ใน SQL Server 2000 ถ้าคุณต้องการระบุเพจที่เสียหายดังนั้นตัวเลือกฐานข้อมูล TORN_PAGE_DETECTION ควรถูกตั้งค่าเป็น TRUE
แต่ใน SQL 2005 และสูงกว่าการตั้งค่าใหม่ PAGE_VERIFY แทนที่ TORN_PAGE_DETECTION เก่าซึ่งอนุญาตให้เลือกการยืนยันหน้าสองประเภทที่แตกต่างกัน: TORN_PAGE_DETECTION และ CHECKSUM
ตอนนี้คำถามมาที่หนึ่งที่จะตั้ง - TORN_PAGE_DETECTION หรือตรวจสอบ?
TORN_PAGE_DETECTION - เขียนบิตสำหรับทุก ๆ 512 ไบต์ในหน้าหนึ่งซึ่งช่วยให้คุณตรวจจับได้เมื่อหน้าไม่ได้เขียนลงดิสก์สำเร็จ สิ่งที่จับได้คือมันจะไม่บอกคุณว่าข้อมูลที่จัดเก็บใน 512 ไบต์นั้นถูกต้องจริงหรือไม่เนื่องจากข้อเท็จจริงที่ว่าไบต์คู่อาจถูกเขียนอย่างไม่ถูกต้อง
ตรวจสอบ - จะคำนวณผลรวมตรวจสอบของหน้าทั้งสองเมื่อหน้าถูกเขียนและเมื่ออ่านหน้าสมมติว่ามันมีการตรวจสอบบน
SQL Server คำนวณการตรวจสอบตามรูปแบบบิตบนหน้าเก็บไว้ในส่วนหัวของหน้าแล้วออก I / O เพื่อเขียนหน้า เมื่อ SQL Server อ่านหน้านั้นคำนวณการตรวจสอบใหม่โดยใช้ตรรกะเดียวกันและเปรียบเทียบกับค่าที่มีอยู่ในส่วนหัวของหน้า หากค่าการตรวจสอบที่ตรงกันนั้นจะถือว่าหน้าไม่ได้รับความเสียหายในระหว่างรอบการอ่าน - เขียน
เนื่องจากค่าใช้จ่ายในการคำนวณการตรวจสอบที่เกิดขึ้นในแต่ละหน้าอ่านและเขียนมันสามารถเพิ่มค่าใช้จ่ายของ CPU และอาจส่งผลกระทบต่อปริมาณงานของปริมาณงานของคุณ สิ่งที่ควรทราบอีกประการหนึ่งคือการตรวจสอบที่ไม่ซ้ำกันสำหรับรูปแบบบิตเฉพาะในหน้า สองหน้าสามารถแมปกับค่าเช็คซัมเดียวกันได้ ดังนั้นจึงมีความเป็นไปได้จากระยะไกลที่หน้าเสียหายอาจตรวจไม่พบ
การอ้างอิง: Checksum ใน SQL2005
เพื่อตอบคำถามของคุณโดยเฉพาะ:
ฉันเชื่อว่า Checksum ได้รับการแนะนำใน SQL2005 และการอัปเกรดหรือการกู้คืนฐานข้อมูลจากเวอร์ชันก่อนหน้านั้นจะคงไว้ซึ่งวิธีการตรวจสอบหน้าก่อนหน้า เช่นไม่มีการอัพเกรดโดยนัย
ใช่ CHECKSUM เป็นที่รู้จักใน SQL Server 2005 และเป็นค่าเริ่มต้น เมื่อคุณอัปเกรดจาก 2000 เป็น 2005 คุณจะต้องเปลี่ยนตัวเลือกฐานข้อมูลอย่างชัดเจน Page Verify เพื่อใช้ CHECKSUM
หากคุณกู้คืนฐานข้อมูลที่สร้างไว้แล้วใน sql 2005 ไปยังเซิร์ฟเวอร์อื่นที่รัน sql 2005 คุณไม่จำเป็นต้องตั้งค่า มันจะยืนยันสิ่งที่คุณเคยตั้งค่าตัวเลือกการยืนยันหน้าเป็น
ฉันไม่ประสบความสำเร็จในการค้นคว้าเมื่อมีการตรวจจับหน้าเว็บด้วย Torn
จาก: http://support.microsoft.com/kb/230785
SQL Server รุ่นก่อนหน้า 7.0
SQL Server รุ่นก่อนหน้า 7.0 ไม่ได้จัดเตรียมบันทึกการตรวจสอบหรือการตรวจจับบิตฉีกขาด อันที่จริงแล้วเวอร์ชันเหล่านั้นสามารถเขียนหน้าล็อกเดียวกันได้หลายครั้งจนกระทั่งเรคคอร์ดบันทึกเติมหน้าล็อก 2-KB สิ่งนี้สามารถเปิดเผยธุรกรรมที่ได้กระทำสำเร็จ หากหน้าบันทึกกำลังถูกเขียนใหม่ในระหว่างความล้มเหลวภาคที่มีการทำธุรกรรมที่มุ่งมั่นอาจไม่ได้รับการเขียนใหม่อย่างถูกต้อง
ดังนั้น TORN_PAGE_DETECTION จึงมีมาตั้งแต่ SQL Server 7.0 แล้วถึงแม้เริ่มต้นก็คือว่ามันไม่ได้เปิดใช้ (ลิงค์เดียวกัน)
หมายเหตุการตรวจหาหน้า Torn นั้นไม่ได้เปิดใช้งานโดยค่าเริ่มต้นใน SQL Server 7.0 ดูsp_dboptionสำหรับวิธีการเปิดใช้งานการตรวจจับในระบบของคุณ
ดังนั้นหากฐานข้อมูลได้รับการพัฒนาเทียบกับอินสแตนซ์ 7.0 และได้รับการอัพเกรดในภายหลังมันจะอัพเกรดด้วยตัวเลือก PAGE VERIFY ของ NONE ที่มีอยู่ (ตามที่ @ThomasStringer ระบุไว้ในคำตอบของเขา)
แก้ไข: 09/24/2013 เพื่อปรับปรุงคำตอบ:
การอ้างอิงถึงบันทึกย่อภายใน SQL Server ของฉันจาก SQLSkills ฉันพบว่าการใช้การถ่ายโอนข้อมูลหน้าคุณสามารถตรวจสอบว่าการตรวจจับบิตฉีกขาด - TORN_PAGE_DETECTION หรือ CHECKSUM ถูกเปิดใช้งานหรือไม่:
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 : สิ่งนี้จะเก็บเช็กซัมหน้าหรือบิตที่แทนที่โดยบิตการป้องกันการฉีกขาดหน้า - ทั้งนี้ขึ้นอยู่กับรูปแบบของการป้องกันเพจที่จะเปิดใช้งานสำหรับฐานข้อมูล
หมายเหตุ : ฉันไม่มีรุ่นเซิร์ฟเวอร์ sql รุ่นเก่ากว่าทำงานอยู่ ด้านล่างได้รับการยืนยันจากsql server 2000 ขึ้นไป หากคุณใช้งาน 7.0 หรือ 6.5 คุณสามารถยืนยันได้เช่นกัน :-)
