Sau đây là tổng hợp các kết quả mà tôi đọc được. Bạn sẽ tìm thấy nhiều thông tin hơn trong các tài liệu và blog được liên kết.
Đầu tiên, điều đó có thể xảy ra là DBCC CHECKDB
sẽ không phát hiện ra sự không nhất quán nếu bạn tắt xác minh tổng kiểm tra hoặc torn_page. Một trích dẫn của Paul Randal trong bài này :
Bạn đã đúng - nếu trang bị rách hoặc tổng kiểm tra không được bật thì sẽ không có gì có thể được phát hiện khi có liên quan đến các tùy chọn bảo vệ trang. CHECKDB vẫn có thể tiếp nhận các tham nhũng mà nó tìm thấy khi thực hiện tất cả các kiểm tra tính nhất quán mà nó thực hiện - nhưng chẳng hạn, nó sẽ không thấy các tham nhũng ở giữa các giá trị dữ liệu.
Ha - đó là người lập dị về việc bật tổng kiểm tra trang - không có gì xảy ra cho đến khi một trang được đọc, thay đổi và viết ra. Cách duy nhất để buộc các trang nhận được tổng kiểm tra là làm cho chúng thay đổi - ví dụ: thông qua việc xây dựng lại tất cả các chỉ mục của bạn, có thể không hấp dẫn - không có công cụ "chạm" nào cả.
Tình huống trên có thể ảnh hưởng đến bạn, nếu bạn đã nâng cấp cơ sở dữ liệu từ SQL Server 2000 trở về năm 2005 trở lên. Sau đó, bạn cần phải kích hoạt tổng kiểm tra trang bằng ALTER DATABASE để kích hoạt chúng. Nhưng sau đó đoạn 2 của đoạn trích dẫn trên có thể gây rắc rối cho bạn.
BACKUP WITH CHECKSUM
sẽ phát hiện sự không nhất quán của tổng kiểm tra, nhưng chỉ khi trang đã có một tổng kiểm tra được viết cho nó, khi nó đang được sao lưu. Thông thường DBCC CHECKDB
cũng phát hiện ra các lỗi này, vì vậy không nên sử dụng BACKUP VỚI CHECKSUM để thay thế DBCC CHECKDB .
Bây giờ có khả năng thứ hai là DBCC CHECKDB
không thể hiện bất kỳ sự mâu thuẫn nào, ngay cả khi có một số. Vì điều này tôi chỉ trích dẫn lại Paul Randal trong những quan niệm sai lầm về tham nhũng: chúng có thể biến mất không? :
Vì vậy, những gì về tham nhũng biến mất? Điều này nhận được vào cách kiểm tra tính nhất quán làm việc. Kiểm tra tính nhất quán chỉ chạy trên các trang trong cơ sở dữ liệu được phân bổ. Nếu một trang không được phân bổ cho bất cứ điều gì, thì 8192 byte của nó là vô nghĩa và không thể hiểu được. Đừng nhầm lẫn giữa dành riêng và phân bổ - Tôi giải thích rằng trong các quan niệm sai lầm đầu tiên ở đây. Miễn là một trang được phân bổ, nó sẽ được DBCC CHECKDB kiểm tra tính nhất quán, bao gồm kiểm tra tổng kiểm tra trang, nếu nó tồn tại. Tham nhũng dường như có thể 'biến mất' nếu một trang bị hỏng được phân bổ tại thời điểm DBCC CHECKDB chạy, nhưng sau đó được xử lý vào thời điểm DBCC CHECKDB tiếp theo chạy. Lần đầu tiên nó sẽ được báo cáo là tham nhũng, nhưng lần thứ hai nó không được phân bổ, vì vậy nó không được kiểm tra tính nhất quán và sẽ không được báo cáo là tham nhũng. Tham nhũng trông giống như nó biến mất một cách bí ẩn. Nhưng nó đã không - chỉ là trang bị hỏng không còn được phân bổ. Không có gì ngăn SQL Server xử lý một trang bị hỏng - trên thực tế, đó là điều mà nhiều sửa chữa DBCC CHECKDB làm - giải quyết những gì bị hỏng và sửa chữa tất cả các liên kết.
Tôi không có câu trả lời cuối cùng cho câu hỏi của bạn, nhưng DBCC CHECKDB
chỉ kiểm tra các trang được phân bổ, nó sẽ không hiển thị sự không nhất quán trong các trang bị phân bổ. Tình huống duy nhất tôi có thể tưởng tượng bây giờ là BACKUP cũng sao lưu những trang bị xử lý hiển thị các lỗi tổng kiểm tra tiềm năng đã bị bỏ qua DBCC CHECKDB
.