증상
Microsoft SQL Server 2012, 2014 또는 2016를 실행 하는 서버에서 데이터베이스 테이블에 있는 열의 데이터 형식을 ntext 에서 nvarchar (max) 로 변경 합니다. 4000 개 이상의 레코드를 추가 하 여 테이블을 업데이트 하는 경우 DBCC CHECKDB는 다음과 유사한 오류를 보고할 수 있습니다.
메시지 8961, 수준 16, 상태 1, LineNumber 테이블 오류: ObjectID, indexid, partitionID, alloc단위 id (LOB 데이터 입력). (PageID), 슬롯 0, textID 의 오프 라인 데이터 노드가 페이지의 참조 (PageID), 슬롯 0과 일치 하지 않습니다. 메시지 8961, 수준 16, 상태 1, LineNumber 테이블 오류: ObjectID, indexid, partitionID, alloc단위 id (LOB 데이터 입력). (PageID), 슬롯 0, textID 의 오프 라인 데이터 노드가 페이지의 참조 (PageID), 슬롯 0과 일치 하지 않습니다. 메시지 8929, 수준 16, 상태 1, LineNumberObjectID, indexid, PartitionID, alloc단위 ID (행 내 데이터 입력): rid = (Rid)로 식별 된 데이터 레코드에서 소유 하는 ID 가 있는 행 외부 데이터에서 오류가 발견 되었습니다. 'TableName'에 대 한 DBCC 결과입니다. 개체 "TableName"에 대 한 1 개 페이지에 1 개의 행이 있습니다. CHECKTABLE에서는 테이블 'TableName' (ObjectID)에서 0으로 된 할당 오류 및 3 개의 일관성 오류가 발견 되었습니다. repair_allow_data_loss는 DBCC CHECKTABLE (DatabaseName. TableName)에서 찾은 오류에 대 한 최소 복구 수준입니다. DBCC 실행이 완료 되었습니다. DBCC에서 오류 메시지를 출력 한 경우 시스템 관리자에 게 문의 하세요.
해결 방법
이 문제는 다음과 같은 SQL Server 누적 업데이트에서 해결 되었습니다.
SQL Server 2016 RTM의 누적 업데이트 5
SQL Server 2016 SP1 용 누적 업데이트 2
SQL Server 2014 SP2의 누적 업데이트 4
새 SQL Server 누적 업데이트에는 이전 누적 업데이트에 포함 된 모든 핫픽스와 보안 수정 사항이 포함 되어 있습니다. SQL Server에 대 한 최신 누적 업데이트를 확인 하세요.
해결 방법
데이터 형식을 변경한 후에이 문제를 해결 하려면 행에서 큰 값 형식 옵션을 1로 설정 합니다.
ALTER TABLE TableName ALTER COLUMN COLUMN_NAME nvarchar(max) NOT NULL
go
exec sp_tableoption 'TableName', 'large value types out of row', '1'
상태
Microsoft는 "적용 대상" 절에 나열한 제품에서 이 문제를 확인했습니다.
참조
Microsoft에서 소프트웨어 업데이트를 설명 하는 데 사용 하는 용어 에 대해 알아봅니다.