SQL Server 2005 및 이후 버전에서는 DBCC 오류 2570 문제 해결

기술 자료 번역 기술 자료 번역
기술 자료: 923247 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

이 페이지에서

소개

이 문서에서는 SQL Server 오류 2570, 원인은 무엇입니까 설명 오류 및 문제를 해결 하는 방법.

추가 정보

DATA_PURITY 검사

SQL Server 2005의 새 옵션인 DATA_PURITY, 추가 되었습니다. DBCC CHECKDB 및 관해 DBCC CHECKTABLE 명령입니다. DBCC CHECKDB를 실행 하는 경우 관해 DBCC CHECKTABLE 명령을 사용이 옵션을 사용 하 여 명령을 수행할 또는 모든 테이블의 모든 행의 열 값을 "데이터 순도" 유효성 검사 또는 데이터베이스에 있는 테이블입니다. 이러한 새 검사가 수행 되어 있는지 확인 하십시오 있는 열에 저장 된 값에는 유효한 (즉, 값이 없는 범위 밖 해당 열의 데이터 형식과 관련 된 도메인에 대 한). 는 수행할 유효성 검사의 특성상 열의 데이터 형식에 따라 달라 집니다. 는 철저 한 목록 다음 몇 가지 예를 제공 합니다.
표 축소표 확대
열 데이터 형식데이터 유효성 검사 수행
유니코드 문자데이터 길이 여야 합니다는 2의 배수입니다.
날짜/시간일 필드의 Jan 1 1753 사이 이어야 합니다. 및 12 월 31 9999. 시간 필드에 '11:59:59:999 오후' 보다 이전 이어야 합니다.
실제 및 부동잘못 된 있는지 확인 PINF, NINF, ND, SNAN, PD, QNAN 마음에 부동 소수점 값입니다.
모든 데이터 형식이 열에 대 한 유효성 검사 데이터입니다. 만 여 곳의 저장 된 값을 가질 수 범위를 확인 합니다. 예를 들어 tinyint 데이터 형식 유효한 범위는 0 ~ 255 있고 저장 되는 따라서 값을 검사 (는 255부터 0 까지의 값은만 저장할 수 있습니다) 단일 바이트, 필요는 없습니다.

데이터 무결성 유효성 검사를 사용할 수 없습니다. 자동으로 모든 데이터베이스에 대 한. 따라 여러 검사 가능 요인:
  • SQL Server 2005 및 이후 버전에서 만든 데이터베이스의 기본적으로 이러한 검사 및 DBCC CHECKDB 또는 관해 DBCC CHECKTABLE 명령을 실행할 때 DATA_PURITY 옵션에서는 관련 되므로, 비활성화할 수 없습니다.
  • SQL의 이전 버전에서 만든 데이터베이스에 대 한 SQL Server 2000, 7.0 SQL Server 및 SQL에 업그레이드 버전 등 서버 Server 2005에서 이러한 검사 기본적으로 활성화 되지 않았습니다. 이러한 검사를 수행할 DATA_PURITY 옵션에는 DBCC CHECKDB 지정 해야 하거나 관해 DBCC CHECKTABLE 명령입니다. 이 두 가지를 발생할 수 있습니다.
    • DBCC 명령이 완료 및 보고 데이터베이스 모든 데이터 무결성 검사를 포함 한 정리입니다. 이 팩트에 기록 되는 데이터베이스 헤더입니다. 모든 후속 DBCC CHECKDB 또는 관해 DBCC CHECKTABLE 명령 실행이이 정보를 확인할 수 및 데이터는 자동으로 수행 됩니다. SQL Server 2005에서 만든 데이터베이스에 대해 발생 하는 순도 검사 합니다. 에서 데이터베이스 "클린"으로 알려진 후, 즉 데이터 무결성 검사 됩니다. 항상 수행합니다.
    • DBCC 명령을 마친 있지만 대 한 문제를 보고 합니다. 데이터에 일관성이 없습니다. 이런 경우에 데이터베이스를 정리 해야 합니다. 불일치를 제거 하 고 DBCC 명령을 다시 실행 해 보십시오. DBCC 명령까지 DATA_PURITY 옵션을 지정 해야 합니다 있는 데이터베이스 정리로 보고 됩니다.
  • PHYSICAL_ONLY 옵션을 지정한 경우 때 DBCC CHECKDB 또는 관해 DBCC CHECKTABLE 명령을 실행 하 고 데이터 무결성 검사 되지 않습니다. 다음을 수행 합니다.

현상

SQL에서 올바르지 않거나 범위를 벗어난 데이터 저장 다음과 같은 이유로 이전 버전의 데이터베이스를 서버:
  • 잘못 된 데이터 소스에 있는 대량 사용 하는 동안 되었습니다. bcp 유틸리티와 같은 메서드를 삽입 합니다.
  • 대 한 RPC 이벤트 호출을 통해 잘못 된 데이터가 전달 되었습니다. SQL Server.
  • 다른 잠재적 실제 데이터 손상을 왼쪽 발생 잘못 된 상태 열의 값입니다.
테이블의 열에 잘못 된 데이터가 있으면 잘못 된 데이터에 대해 수행 되는 작업의 유형에 따라 문제가 발생할 수 있습니다. 그러나 아무런 문제가 표시 되어 잘못 된 데이터를 SQL Server 2005 및 이후 버전에서는 DBCC CHECKDB 또는 관해 DBCC CHECKTABLE 명령을 실행할 때까지 발견 되지 않습니다 수입니다.

현상 중 일부를 때문에 잘못 된 데이터가 있는지 나타날 수 있습니다 (하지만 제한 되지 않습니다 위치):
  • 액세스 위반이 나 다른 종류의 예외를 하는 동안 영향을 받는 열에 대해 쿼리를 실행 합니다.
  • 잘못 된 결과 대해 실행 된 쿼리에서 반환 되는 영향을 받는 열입니다.
  • 오류 또는 문제에 대 한 통계가 되는 경우 영향을 받는 열.
  • 다음과 같은 오류 메시지:
    Msg 9100, 레벨 23, 상태 2, 줄 1 수 인덱스 손상이 발견 되었습니다. DBCC를 실행 합니다. CHECKDB입니다.

DATA_PURITY 문제 보고서

DBCC CHECKDB 또는 관해 DBCC CHECKTABLE 명령을 사용 하 여 실행 하는 경우 DATA_PURITY 옵션을 사용 (또는 데이터 무결성 검사를 실행 자동으로), 잘못 된 데이터가 있는 테이블에서 DBCC 검사 명령, DBCC 출력 나타내는 메시지가 추가로 포함은 데이터에 문제가 발생 합니다. 데이터의 순도 나타내는 몇 가지 샘플 오류 메시지 문제는 다음과 같습니다.
DBCC 결과 대 한 "account_history"입니다.
메시지 2570, 수준 16, 상태 2, 줄 1
페이지 (1:1073) 33 개체 ID 1977058079, 인덱스 ID 0, 파티션 ID 129568478265344 슬롯, 할당 단위 ID 129568478265344 (형식 "에서 행 데이터"). "Account_name_japan" 열 값이 "nvarchar" 데이터 형식의 범위를 벗어났습니다. 열을 유효한 값으로 업데이트 합니다.
메시지 2570, 수준 16, 상태 2, 줄 1
객체의 슬롯 120 페이지 (1:1156) ID 1977058079, 인덱스 ID 0, 파티션 ID 129568478265344, 할당 합니다 단위 ID입니다. 129568478265344 ("데이터 행" 입력). "Account_name_japan" 값 열 아웃입니다. "nvarchar" 데이터 형식에 대 한 범위입니다. 열을 유효한 값으로 업데이트 합니다.
거기 1080 페이지 "account_history" 개체에 153137 행이 됩니다.
CHECKDB 발견 0 할당 오류 및 "account_history" 테이블 일관성 오류 338 (개체 ID 1977058079)입니다.
CHECKDB 338 0 할당 오류 발견 'BadUnicodeData' 데이터베이스에서 일관성 오류가 발생 했습니다.
DBCC 실행이 완료 되었습니다. DBCC 오류 메시지를 출력 하면 시스템 관리자에 게를 문의 하십시오.
'Table1'의 DBCC 결과입니다.
메시지 2570, 수준 16, 상태 3, 줄 1
(1:154) 페이지, 개체 ID 2073058421 0 슬롯, ID 인덱스 0, 파티션 ID 72057594038321152, 할당 합니다 단위 ID 72057594042318848 (형식 "행을 데이터"). 열 "col2" 값 "실제" 데이터 형식의 범위를 벗어났습니다. 열을 유효한 값으로 업데이트 합니다.
2 페이지 개체에 대 한 4 행 수 "table1"입니다.
CHECKDB 0 할당 오류 및 1 일관성 오류 발견 'table1' 테이블 (개체 ID 2073058421).
CHECKDB 0 할당 오류를 발견 했습니다. 1 일관성 오류 'realdata' 데이터베이스에서에서 하 고 있습니다. DBCC 실행이 완료 되었습니다. If DBCC 인쇄 오류 메시지, 시스템 관리자에 게 문의 하십시오.
'Table2'의 DBCC 결과입니다.
메시지 2570, 수준 16, 상태 3, 줄 1
(1:155) 페이지, 개체 ID 2105058535 0 슬롯, ID 인덱스 0, 파티션 ID 72057594038452224, 할당 합니다 단위 ID 72057594042449920 (형식 "행을 데이터"). 열 "col2" 값이 "10 진수" 데이터 형식의 범위를 벗어났습니다. 열을 유효한 값으로 업데이트 합니다.
1 페이지 개체에 대 한 4 행 수 "table2"입니다.
CHECKDB 0 할당 오류 및 1 일관성 오류 발견 테이블 'table2' (개체 ID 2105058535).
CHECKDB 0 할당 오류를 발견 했습니다. 1 일관성 오류 'realdata' 데이터베이스에서에서 하 고 있습니다. DBCC 실행이 완료 되었습니다. If DBCC 인쇄 오류 메시지, 시스템 관리자에 게 문의 하십시오.
'표'의 DBCC 결과입니다.
메시지 2570, 수준 16, 상태 3, 줄 1
(1:157) 페이지, 개체 ID 2121058592 0 슬롯, ID 인덱스 0, 파티션 ID 72057594038517760, 할당 합니다 단위 ID 72057594042515456 (형식 "행을 데이터"). 열 "col2" 값 "datetime" 데이터 형식의 범위를 벗어났습니다. 열을 유효한 값으로 업데이트 합니다.
개체에 대해 1 페이지에서 3 행 수 "표 3"
CHECKDB 0 할당 오류 및 1 일관성 오류 발견 테이블 '표' (개체 ID 2121058592).
CHECKDB 0 할당 오류를 발견 했습니다. 1 일관성 오류 'realdata' 데이터베이스에서에서 하 고 있습니다. DBCC 실행이 완료 되었습니다. If DBCC 인쇄 오류 메시지, 시스템 관리자에 게 문의 하십시오.
에 대 한 2570 오류는 잘못 된 열 값을 포함 하는 행 마다 생성 됩니다.

데이터 무결성 문제를 해결합니다.

2570 오류는 DBCC 복구를 사용 하 여 복구할 수 없습니다. 옵션입니다. DBCC에 대 한 값이 무엇 인지 확인 하려면 불가능 하기 때문입니다. 잘못 된 열 값을 바꾸는 데 사용 합니다. 열 값이 있어야 하므로, 수동으로 업데이트합니다.

수동 업데이트를 수행 하려면 행을 찾을 수 있어야 문제가 있습니다. 이 작업을 수행 하는 두 가지 방법이 있습니다.
  • 포함 된 테이블에 대해 쿼리를 실행할는 잘못 된 값이 들어 있는 행을 찾으려면 잘못 된 값입니다.
  • 2570 오류에서 정보를 사용 하 여 식별할 수 있는 잘못 된 값이 있는 행입니다.
자세히 아래에 두이 방법 모두를 사용 하 여 논의 잘못 된 데이터가 있는 행을 찾으려면 예제를 제공 합니다.

사용자를 찾은 후 해당 올바른 행을 결정 하는 데 사용할 새 값을 수정 해야 잘못 된 기존 데이터를 교체 합니다. 이 결정은 매우 신중 해야 응용 프로그램에 대 한 작업 시간 값의 범위에 따라 어떤은 물론 특정 행의 데이터에 대 한 논리 합리적입니다. 할 사항은 다음과 같습니다.
  • 어떤 값을 알고 있는 경우에 설정 특정 값입니다.
  • 적절 한 기본값을 설정 합니다.
  • 열 값은 NULL로 설정 합니다.
  • 열 값의 최대 또는 최소 값 설정 열에 해당 하는 데이터 형식입니다.
  • 특정 행의 사용 없이 아닌지 판단 되 면 열에 대해 유효한 값을 해당 행을 모두 삭제할 수 있습니다.

T SQL 쿼리를 사용 하 여 잘못 된 값을 가진 행 찾기

찾기 행 하기를 실행 하면 쿼리 형식 잘못 된 값 문제를 보고 하는 열의 데이터 형식에 따라 달라 집니다. 2570 오류 메시지에서 보면 중요 한 두 가지를 알 수 있습니다. 이 작업에 도움이 되는 정보입니다. 다음 예제에서는 열 "account_name_japan" 값 "nvarchar." 데이터 형식 범위를 벗어났습니다. 우리를 수 있습니다. 쉽게 문제 뿐만 아니라 데이터 형식이 있는 열을 식별의 관련된 열입니다. 따라서 한 번 데이터 형식을 알고와 관련 된 열 사용 잘못 된 값을 포함 하는 행을 찾기 위해 쿼리를 만들 수 있습니다. 열 (조건자에 이름으로 해당 행을 식별 하는 데 필요한 열을 선택 합니다. WHERE 절) 또한 업데이트 또는 삭제 합니다.

유니코드 데이터 형식:
SELECT col1 ,DATALENGTH(account_name_japan) as Length ,account_name_japan 
FROM account_history
WHERE DATALENGTH(account_name_japan) % 2 != 0

Float 데이터 형식:
-- Change col1 to your actual primary key column(s), col2 to the column from the 2570 error, table1 to the table from the CHECKDB output

SELECT col1, col2 FROM table1
WHERE col2<>0.0 AND (col2 < 2.23E-308 OR col2 > 1.79E+308) AND (col2 < -1.79E+308 OR col2 > -2.23E-308)

Real 데이터 형식:
-- Change col1 to your actual primary key column(s), col2 to the column from the 2570 error, table1 to the table from -- the CHECKDB output

SELECT col1, col2 FROM testReal 
WHERE col2<>0.0 AND (col2 < CONVERT(real,1.18E-38) OR col2 > CONVERT(real,3.40E+38)) AND (col2 < CONVERT(real,-3.40E+38) OR col2 > CONVERT(real,-1.18E-38)) 
ORDER BY col1; -- checks for real out of range
Decimal 및 Numeric 데이터 형식:
SELECT col1 FROM table2
WHERE col2 > 9999999999.99999 
OR col1 < -9999999999.99999
기반으로 하는 값을 조정 해야 합니다 염두에 전체 자릿수와 소수 decimal 또는 numeric 열을 정의 합니다. 위의 예에서 열 col2 decimal(15,5)로 정의 되었습니다.

날짜 시간 데이터 형식:
식별 하는 두 개의 다른 쿼리를 실행 하면 날짜 시간 열에 대 한 잘못 된 값이 있는 행입니다.
SELECT col1 FROM table3
WHERE col2 < '1/1/1753 12:00:00 AM' OR col2 > '12/31/9999 11:59:59 PM'

SELECT col1 FROM table3 WHERE
((DATEPART(ms,col2)+ (1000*DATEPART(s,col2)) + (1000*60*DATEPART(mi,col2)) + (1000*60*60*DATEPART(hh,col2)))/(1000*0.00333)) 
> 25919999

행 실제 위치를 사용 하 여 잘못 된 값으로 찾기:

행을 찾을 수 없는 경우이 메서드를 사용할 수 있습니다. 위에서 설명한 T SQL 메서드를 사용 하 여 관심. 2570 오류 메시지에서는 잘못 된 값이 들어 있는 행의 실제 위치에 인쇄 됩니다. 에 대 한 예제를 보면 다음과 같은 메시지가:
페이지 (1:157) 0 개체 ID 2121058592, 인덱스 ID 0, 파티션 ID 72057594038517760 슬롯을 할당 단위 ID 72057594042515456 (형식 "에서 행 데이터"). 열 "col2" 값이입니다. "datetime" 데이터 형식의 범위를 벗어났습니다. Legal로 열을 업데이트 합니다. 값입니다.
이 메시지에 있는 정보를 확인 합니다: 페이지 (1:157) 슬롯 0입니다. 이 행을 식별 하는 데 필요한 정보입니다. 해당 필드는 1입니다. PageInFile 157, 고 SlotId 0입니다. 이 정보를 얻은 경우 다음과 같이 명령을 실행 해야 합니다.
DBCC TRACEON ( 3604 )
DBCC PAGE ( realdata , 1 , 157 , 3 )
이 명령은 한 페이지의 전체 내용을 인쇄 합니다. 매개 변수는 DBCC PAGE 명령은 다음과 같습니다.
  • 데이터베이스 이름
  • 필드
  • PageInFile
  • 인쇄 옵션
이 명령을 실행 한 후에 출력을 알 수 있습니다. 다음 형식으로 유사한 정보가 포함 되어 있습니다.
Slot 0 Offset 0x60 Length 19 Record Type = PRIMARY_RECORD Record
		  Attributes = NULL_BITMAP Memory Dump @0x44D1C060 00000000: 10001000 01000000
		  ffffffff ffffffff †................ 00000010:
		  0200fc†††††††††††††††††††††††††††††††... Slot 0 Column 0 Offset 0x4 Length 4 col1 = 1Slot 0 Column 1 Offset 0x8 Length 8 col2 = Dec 31 1899 19:04PM Slot 1 Offset 0x73 Length 19 Record Type = PRIMARY_RECORD Record
		  Attributes = NULL_BITMAP Memory Dump @0x44D1C073 00000000: 10001000 02000000
		  0ba96301 f8970000 †..........c..... 00000010:
		  0200fc†††††††††††††††††††††††††††††††... Slot 1 Column 0 Offset 0x4 Length 4
		  col1 = 2 Slot 1 Column 1 Offset 0x8 Length 8 col2 = Jul 8 2006 9:34PM Slot 2
		  Offset 0x86 Length 19 Record Type = PRIMARY_RECORD Record Attributes =
		  NULL_BITMAP Memory Dump @0x44D1C086 00000000: 10001000 03000000 0ba96301
		  f8970000 †..........c..... 00000010: 0200fc†††††††††††††††††††††††††††††††...
		  Slot 2 Column 0 Offset 0x4 Length 4 col1 = 3 Slot 2 Column 1 Offset 0x8 Length
		  8 col2 = Jul 8 2006 9:34PM 
이 출력에 수행할 수 있습니다. 명확 하 게 원하는 행의 열 값을 참조 하십시오. 이 예에서 사용자 행 페이지 0 슬롯에 저장 해야 합니다. 오류 메시지를 알으십시오 해당 col2 문제입니다. 때문에 c o l 1의 값을 걸립니다. 0 슬롯 및 update 문의 WHERE 절 조건자 사용 또는 문을 삭제 합니다.

경고 첫 번째 메서드를 사용 하는 것이 좋습니다 (즉, T SQL 사용 필요한 정보를 찾는 쿼리). DBCC 페이지 명령 으로만 사용을 마지막 수단으로 사용 합니다. 프로덕션 환경에서이 명령을 사용 하는 동안 중단 주의 환경입니다. 프로덕션 데이터베이스에서 테스트를 복원 하는 것이 좋습니다. 서버 다음 DBCC PAGE 사용 하 여 필요한 모든 정보를 가져올 및 다음 실행에 프로덕션 서버에 업데이트 됩니다. 항상 백업을 준비 해야 잘못 된 들어가고의 이전 복사본을 복원 해야 하는 경우는 데이터베이스입니다.

참조

DBCC CHECKDB 명령문에 대 한 자세한 내용은 참조 하십시오. "DBCC CHECKDB (Transact-SQL)" 항목에는 다음과 같은 Microsoft 개발자 네트워크 (MSDN) 웹 사이트:
http://msdn2.microsoft.com/en-us/library/ms176064.aspx
정상에 대 한 자세한 내용은 SQL Server 2000에서 문제를 보려면 다음 문서 번호를 클릭 합니다 있는 Microsoft 기술 자료 문서:
900335FIX: 데이터 형식을 FLOAT 또는 REAL 데이터 형식, 인덱스를 포함 하 고이 데이터 형식은 NaN 값을 포함 하는 경우 SQL Server 2000 자동 데이터베이스 복구 작업이 성공 하지 못할 수 없습니다.
RPC 이벤트에 대 한 자세한 내용은 참조 하십시오 있는 "저장 프로시저 (OLE DB) 호출" 항목에서 다음 MSDN 웹 사이트:
http://msdn2.microsoft.com/en-us/library/aa198358 (SQL.80).aspx
다른 데이터 형식에 대 한 자세한 내용은 참조 하십시오 있는 "저장 프로시저 (OLE DB) 호출" 항목에서 다음 MSDN 웹 사이트:
http://msdn2.microsoft.com/en-us/library/ms187752.aspx
부동 소수점 값 규칙에 대 한 자세한 내용은 참조 하십시오. 다음 Intel 웹 사이트:
http://www.intel.com/design/pentiumii/manuals/243191.htm
Microsoft 기술 지원을 찾을 수 있도록 타사 연락처 정보를 제공 합니다. 이 연락처 정보는 예 고 없이 변경 될 수 있습니다. Microsoft 않습니다. 이 타사 연락처 정보의 정확성을 보장 합니다.

속성

기술 자료: 923247 - 마지막 검토: 2012년 3월 22일 목요일 - 수정: 1.0
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2005 Express Edition with Advanced Services
  • Microsoft SQL Server 2005 Workgroup Edition
  • Microsoft SQL Server 2005 Enterprise Edition for Itanium Based Systems
  • Microsoft SQL Server 2005 Enterprise X64 Edition
  • Microsoft SQL Server 2005 Standard Edition for Itanium Based Systems
  • Microsoft SQL Server 2005 Standard X64 Edition
  • Microsoft SQL Server 2008 Standard
  • Microsoft SQL Server 2008 R2 Developer
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2008 Express
  • Microsoft SQL Server 2008 Express with Advanced Services
  • Microsoft SQL Server 2008 Workgroup
  • Microsoft SQL Server 2008 Standard Edition for Small Business
키워드:?
kbtshoot kbexpertiseadvanced kbsql2005engine kbinfo kbmt KB923247 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.
이 문서의 영문 버전 보기:923247

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com