Trong SQL Server 2000, nếu bạn muốn xác định các trang bị hỏng, thì tùy chọn cơ sở dữ liệu TORN_PAGE_DETMENT phải được đặt thành TRUE.
Nhưng trong SQL 2005 trở lên, một cài đặt mới PAGE_VERIFY đã thay thế TORN_PAGE_DETMENT cũ cho phép chọn từ hai loại xác minh trang khác nhau: TORN_PAGE_DETMENT và CHECKSUM.
Bây giờ câu hỏi đặt ra cái nào sẽ được đặt - TORN_PAGE_DETMENT hoặc CHECKSUM?
TORN_PAGE_DETMENT - ghi một bit cho mỗi 512 byte trong một trang cho phép bạn phát hiện khi một trang không được ghi thành công vào đĩa. Điều hấp dẫn là nó sẽ không cho bạn biết liệu dữ liệu được lưu trữ trong 512 byes đó có thực sự chính xác hay không do thực tế là một vài byte có thể đã được viết không chính xác.
KIỂM TRA - sẽ nhân một tổng kiểm tra của trang cả khi một trang được viết và khi một trang được đọc, giả sử nó có tổng kiểm tra trên đó.
Máy chủ SQL tính toán tổng kiểm tra dựa trên mẫu bit trên trang, lưu nó trong tiêu đề trang và sau đó phát hành I / O để viết trang. Khi SQL Server đọc trang, nó sẽ tính lại tổng kiểm tra bằng cách sử dụng cùng logic và sau đó so sánh nó với giá trị có sẵn trong tiêu đề trang. Nếu giá trị tổng kiểm tra khớp thì đó là giả sử trang không bị hỏng trong chu kỳ ghi-đọc.
Vì chi phí tính toán tổng kiểm tra phát sinh trên mỗi trang đọc và ghi, nên nó có thể thêm vào chi phí CPU và có thể ảnh hưởng đến thông lượng của khối lượng công việc của bạn. Một lưu ý khác là tổng kiểm tra không phải là duy nhất cho một mẫu bit cụ thể trên trang. Hai trang có thể có thể ánh xạ tới cùng một giá trị tổng kiểm tra. Vì vậy, có khả năng từ xa rằng tham nhũng trang có thể không bị phát hiện.
Tham khảo: Tổng kiểm tra trong SQL2005
Để trả lời cụ thể câu hỏi của bạn:
Tôi tin rằng Checksum đã được giới thiệu trong SQL2005 và việc nâng cấp hoặc khôi phục DB từ phiên bản trước sẽ duy trì phương thức xác minh trang trước đó. tức là không có nâng cấp ngầm.
Có CHECKSUM đã được giới thiệu trong SQL Server 2005 và là DEFAULT . Khi bạn nâng cấp từ 2000 lên 2005, bạn phải thay đổi rõ ràng tùy chọn cơ sở dữ liệu Trang Xác minh để sử dụng CHECKSUM.
Nếu bạn khôi phục cơ sở dữ liệu đã được tạo trên sql 2005 sang một máy chủ khác chạy sql 2005, bạn không phải thiết lập nó. Nó sẽ tiếp tục với những gì bạn đã đặt tùy chọn Xác minh trang thành.
Tôi đã không thành công trong việc nghiên cứu khi Phát hiện trang bị rách
Từ: http://support.microsoft.com/kb/230785
Các phiên bản của SQL Server sớm hơn 7.0
Các phiên bản của SQL Server trước 7.0 không cung cấp các phương tiện phát hiện bit chẵn lẻ hoặc rách bit. Trên thực tế, các phiên bản đó có thể viết cùng một trang nhật ký nhiều lần cho đến khi các bản ghi nhật ký điền vào trang nhật ký 2 KB. Điều này có thể phơi bày các giao dịch đã cam kết thành công. Nếu trang nhật ký đang được viết lại trong một thất bại, một khu vực với giao dịch đã cam kết có thể không được viết lại đúng cách.
Do đó, TORN_PAGE_DETMENT đã xuất hiện kể từ SQL Server 7.0. Ngay cả khi đó, mặc định là nó không được kích hoạt (cùng một liên kết) .
Lưu ý Phát hiện trang bị rách không được bật theo mặc định trong SQL Server 7.0. Xem sp_dboption để biết cách kích hoạt phát hiện trên hệ thống của bạn.
Do đó, nếu cơ sở dữ liệu được phát triển dựa trên phiên bản 7.0 và sau đó được nâng cấp, thì nó sẽ nâng cấp tùy chọn PAGE VERIFY còn tồn tại của NONE (như @ThomasStringer đã lưu ý trong câu trả lời của anh ấy).
Chỉnh sửa: 24/9/2013 Để cải thiện câu trả lời:
Tham khảo Máy chủ SQL của tôi Ghi chú nội bộ từ SQLSkills, tôi thấy rằng bằng cách sử dụng kết xuất trang, bạn có thể xác minh xem phát hiện bit bị rách - TORN_PAGE_DETMENT hoặc CHECKSUM đã được bật hay chưa:
use database_name -- change here for your database !!
checkpoint
go
dbcc traceon (3604) -- send output to screen
go
dbcc page (dbaalert, 1,1,0)
dbcc traceoff (3604) -- turn off the trace flag
go
m_tornBits : Cái này giữ tổng kiểm tra trang hoặc các bit bị thay thế bởi các bit bảo vệ trang bị rách - tùy thuộc vào hình thức bảo vệ trang nào được cung cấp cho cơ sở dữ liệu.
Lưu ý : Tôi không có bất kỳ phiên bản máy chủ sql cũ nào đang chạy. Dưới đây được xác nhận từ máy chủ sql 2000 trở lên . Nếu bạn có 7.0 hoặc 6.5 chạy xung quanh, bạn cũng có thể xác nhận nó :-)
