TL; DR : 인덱싱 된보기에서 수정할 수없는 손상이 있습니다. 세부 사항은 다음과 같습니다.
달리는
DBCC CHECKDB([DbName]) WITH EXTENDED_LOGICAL_CHECKS, DATA_PURITY, NO_INFOMSGS, ALL_ERRORMSGS
내 데이터베이스 중 하나에서 다음 오류가 발생합니다.
메시지 8907, 수준 16, 상태 1, 줄 1 공간 인덱스, XML 인덱스 또는 인덱싱 된 뷰 'ViewName'(개체 ID 784109934)에 뷰 정의에 의해 생성되지 않은 행이 포함되어 있습니다. 이것은 반드시이 데이터베이스의 데이터에 대한 무결성 문제를 나타내는 것은 아닙니다. (...)
CHECKDB가 테이블 'ViewName'에서 0 개의 할당 오류와 1 개의 일관성 오류를 발견했습니다.
repair_rebuild는 최소 복구 수준 (...)입니다.
이 메시지는 인덱싱 된 뷰 'ViewName'의 구체화 된 데이터가 기본 쿼리가 생성하는 것과 동일하지 않음을 나타냅니다. 그러나 데이터를 수동으로 확인해도 불일치가 나타나지 않습니다.
SELECT * FROM ViewName WITH (NOEXPAND)
EXCEPT
SELECT ...
from T1 WITH (FORCESCAN)
join T2 on ...
SELECT ...
from T1 WITH (FORCESCAN)
join T2 on ...
EXCEPT
SELECT * FROM ViewName WITH (NOEXPAND)
NOEXPAND
에 (만) 색인을 사용하는 데 사용되었습니다 ViewName
. FORCESCAN
인덱싱 된 뷰 일치가 발생하지 않도록하는 데 사용되었습니다. 실행 계획은 두 측정 값 모두 작동하는지 확인합니다.
여기에 행이 리턴되지 않으므로 두 테이블이 동일하다는 의미입니다. (정수 및 guid 열만 있고 데이터 정렬이 작동하지 않습니다).
보기에서 색인을 다시 작성하거나을 실행하여 오류를 수정할 수 없습니다DBCC CHECKDB REPAIR_ALLOW_DATA_LOSS
. 수정을 반복해도 도움이되지 않았습니다. 이 오류 가보고되는 이유는 무엇 DBCC CHECKDB
입니까? 그것을 제거하는 방법?
(다시 작성해도 문제가 해결되지 않습니다. 데이터 확인 쿼리가 성공적으로 실행되었지만 왜 오류가보고됩니까?)
업데이트 : 일부 릴리스에서 버그가 수정되었습니다. SQL Server 2014 SP2 CU 5에서 더 이상 재현 할 수 없습니다. 2014 SP2 KB 에는 KB 문서가없는 수정 프로그램이 포함되어 있습니다 Creating non-clustered index causes DBCC CheckDB With Extended_Logical_Checks to raise corruption error
. 이것에 대한 두 개의 연결 버그가 닫혔습니다.
- https://connect.microsoft.com/SQLServer/feedback/details/847233/creating-non-clustered-index-causes-dbcc-checkdb-with-extended-logical-checks-to-raise-corruption-error
- https://connect.microsoft.com/SQLServer/feedback/details/795478/unfixable-dbcc-checkdb-error-that-is-also-a-false-positive-and-otherwise-strange
If the indexed view does not contain an aggregate over values of type float or real and you receive errors 8907 or 8708, drop the index on the view and re-create it. Do not use ALTER INDEX REBUILD to try to remove the differences between the stored and the computed view, because ALTER INDEX REBUILD does not recalculate the view before rebuilding the index. Then run DBCC CHECKTABLE on the View to verify no differences remain.
[1]
표기 댓글 마크 다운에서 작동하지 않습니다.