บล็อกนี้อธิบายถึงความเสียหายที่อาจเกิดขึ้นที่ระดับฐานข้อมูลใน Microsoft® SQL Server® วิธีการตรวจหา และวิธีแก้ไขโดยใช้เทคนิคการคืนค่าและซ่อมแซมขั้นสูง
แนะนำตัว
ปัจจุบัน SQL Server เป็นหนึ่งในระบบการจัดการฐานข้อมูลเชิงสัมพันธ์ที่ได้รับความนิยมและใช้กันอย่างแพร่หลาย เนื่องจากมีโครงสร้างภายในขั้นสูงและความน่าเชื่อถือสูง หลายองค์กรเลือกใช้ฐานข้อมูล SQL Server เพื่อรักษาและบันทึกข้อมูลทางธุรกิจที่สำคัญ
บริษัทต่างๆ คาดหวังให้ผู้ดูแลระบบฐานข้อมูล (DBA) ปรับปรุงประสิทธิภาพของฐานข้อมูล การบำรุงรักษา และการรักษาความปลอดภัยอย่างต่อเนื่อง เมื่อฐานข้อมูลเสียหายและเข้าถึงข้อมูลไม่ได้ คุณอาจสงสัยว่ามีสาเหตุหลายประการ เช่น ฮาร์ดแวร์เสียหาย ปัญหาดิสก์ การโจมตีของไวรัส หรือระบบปฏิบัติการ (OS) ล้มเหลว การซ่อมแซมฐานข้อมูลที่เสียหายไม่ใช่เรื่องง่ายจนกว่าคุณจะรู้เทคนิคที่ดีที่สุด
โพสต์นี้จะกล่าวถึงสาเหตุบางประการของความเสียหายของฐานข้อมูล ช่วยให้คุณระบุความเสียหายของหน้า สำรวจคำสั่ง CHECKDB ของตัวตรวจสอบความสอดคล้องฐานข้อมูล (DBCC) และสาธิตเทคนิคการคืนค่าและซ่อมแซมขั้นสูง
ฐานข้อมูลเสียหาย
SQL Server เก็บข้อมูลผู้ใช้ในรูปแบบของเพจ หน้าเหล่านั้นอยู่ใน .MDF (หลัก) ไฟล์ข้อมูล การทุจริตของ .MDF file สามารถนำไปสู่ความเสียหายของฐานข้อมูลทั้งหมด หน้าไฟล์ข้อมูลนั้นดีเมื่อเขียนออกจากหน่วยความจำของ SQL Server (นั่นคือ ลงบนดิสก์) แต่ไม่ดีเมื่ออ่านกลับเข้าไปในหน่วยความจำ ดังแสดงในภาพต่อไปนี้:
สาเหตุของความเสียหายของฐานข้อมูล:
ประเภทความเสียหายของฐานข้อมูลประกอบด้วยรายการต่อไปนี้:
- ระบบย่อย I/O (นี่เป็นหนึ่งในสาเหตุที่พบบ่อยที่สุดที่ทำให้ฐานข้อมูลเสียหาย)
- ระบบปฏิบัติการ Windows
- ไดรเวอร์ระบบไฟล์ เช่น การเข้ารหัสหรือโปรแกรมป้องกันไวรัส
- ตัวควบคุม SAN หรือ RAID
- ดิสก์
- หน่วยความจำ
- ส่วนหัวของไฟล์
- ข้อบกพร่องของเซิร์ฟเวอร์ SQL
- ข้อผิดพลาดของมนุษย์
ข้อความแสดงข้อผิดพลาด:
เมื่อคุณเข้าถึงฐานข้อมูลที่เสียหาย คุณอาจเห็นข้อความแสดงข้อผิดพลาดต่อไปนี้:
- ข่าวสาร 823 ใน SQL Server
- ข่าวสาร 824 ใน SQL Server
- ข่าวสารเกี่ยวกับ 825 (ลองอ่านอีกครั้ง) ใน SQL Server
- ข้อผิดพลาด 9004 SQL Server
- ข้อผิดพลาดเกี่ยวกับความเสียหายของข้อมูลเมตา
- ข้อผิดพลาดการทุจริตระดับเพจ
การติดตามความเสียหายของเพจ
SQL Server มีกลไกในตัวเพื่อระบุและเตือนคุณโดยอัตโนมัติเมื่อมีความเสียหายระหว่างการดำเนินการ I/0 เช่น การอ่านและการเขียนหน้าไปยังดิสก์
ตัวเลือกการตรวจสอบระดับเพจประเภทต่างๆ ต่อไปนี้มีอยู่ในSQL Server และช่วยปกป้องเพจบนดิสก์:
- TORN_PAGE_DETECTION
- เช็คซัม
เมื่อ TORN_PAGE_DETECTION ถูกระบุ บิตจะถูกพลิกสำหรับเซ็กเตอร์ดิสก์ขนาด 16 x 512 ไบต์สำหรับหน้าไฟล์ข้อมูลขนาด 8 KB เมื่อใดก็ตามที่เพจถูกเขียนลงดิสก์ หลังจากอ่านเพจในหน่วยความจำแล้ว ค่าเหล่านี้จะถูกเปรียบเทียบ หากพบบิตใน สถานะผิด หน้าน่าจะเขียนไม่ถูกต้อง ในกรณีนี้ ระบบสร้างข้อความแสดงข้อผิดพลาด 824 (ระบุข้อผิดพลาดหน้าฉีกขาด)
เมื่อ Checksum ถูกระบุ ระบบจะคำนวณค่าเช็คซัมเหนือเนื้อหาของเพจและเก็บค่านั้นไว้ในส่วนหัวของเพจเมื่อเขียนเพจไปยังดิสก์ หลังจากที่โหลดเพจจากดิสก์ในภายหลัง เช็คซัมจะถูกคำนวณและเปรียบเทียบกับค่าที่เก็บไว้ที่ส่วนหัวของเพจ หากค่าไม่ตรงกัน ระบบจะสร้างข้อความแสดงข้อผิดพลาด 824 (แสดงว่าเช็คซัมล้มเหลว)
ข้อผิดพลาดทั้งสอง 823 I/O ฮาร์ด และ 824 soft I/O เป็นข้อผิดพลาดระดับความรุนแรง 24 รายการและถูกบันทึกไว้ใน msdb.dbo ต้องสงสัย_pagestable.
ตาราง msdb.dbo ต้องสงสัย_pagestable ใช้สำหรับการดำเนินการกู้คืนหน้าเดียว และสามารถบันทึกลงในบันทึกข้อผิดพลาดของ SQL Server และบันทึกเหตุการณ์ของ Windows® ได้
DBCC CHECKDB
DBCC CHECKDB ตรวจสอบความสมบูรณ์ทางกายภาพและทางตรรกะของวัตถุทั้งหมดในฐานข้อมูล
เป็นการดำเนินการที่ใช้ทรัพยากรมากและใช้การประมวลผลแบบขนาน แต่คุณสามารถเรียกใช้ในเธรดเดียวได้โดยการติดตามแฟล็ก 2528
การตรวจสอบตารางระบบที่สำคัญเบื้องต้น
การตรวจสอบเบื้องต้นได้รับการออกแบบมาเพื่อทำการตรวจสอบตารางระบบที่สำคัญซึ่งมีข้อมูลเมตาของกลไกจัดเก็บข้อมูลและบนเส้นทางการจัดสรรที่มีการจัดเก็บข้อมูลใน MDF ไฟล์.
การตรวจสอบเบื้องต้นจะแสดงในรายการต่อไปนี้:
-
การตรวจสอบ DBCC :ตรวจสอบความสอดคล้องของโครงสร้างการจัดสรรในฐานข้อมูล จะตรวจสอบว่าโครงสร้างการจัดสรรถูกต้องและไม่มีหน้า datafile เดียวที่จัดสรรให้กับสองตาราง
-
ตรวจสอบ DBCC ได้ :ตรวจสอบความสอดคล้องของตารางและดัชนี ตรวจสอบโครงสร้างของตารางและดัชนีที่เกี่ยวข้อง กำหนดว่าข้อมูลดัชนีมีแถวที่ตรงกันในตารางหรือไม่ และตรวจสอบคีย์ลำดับดัชนี หากมี FILESTREAM ใดที่ใช้ในตาราง มันจะตรวจสอบการมีอยู่ของลิงก์
-
รายการตรวจสอบ DBCC :ตรวจสอบความสอดคล้องระหว่างแคตตาล็อกระบบ
-
DBCC CHECKFILEGROUP :คล้ายกับ DBCC CHECKDB การตรวจสอบนี้ทำการตรวจสอบความไม่สอดคล้องกันสำหรับกลุ่มไฟล์และการตรวจสอบการจัดสรรสำหรับฐานข้อมูล
โค้ดตัวอย่าง
DBCC CHECKDB
[ ( database_name | database_id | 0
[ , NOINDEX
| , { REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD } ]
) ]
[ WITH
{
[ ALL_ERRORMSGS ]
[ , EXTENDED_LOGICAL_CHECKS ]
[ , NO_INFOMSGS ]
[ , TABLOCK ]
[ , ESTIMATEONLY ]
[ , { PHYSICAL_ONLY | DATA_PURITY } ]
[ , MAXDOP = number_of_processors ]
}
]
]
สแนปชอตฐานข้อมูลภายใน
การใช้สแน็ปช็อตฐานข้อมูลภายในกับ CHECKDB เพื่อตรวจสอบและรักษาความสอดคล้องของธุรกรรมช่วยป้องกันปัญหาการบล็อกและการทำงานพร้อมกัน หากคุณไม่สามารถสร้างสแน็ปช็อตฐานข้อมูลได้ ให้ตรวจสอบว่าคุณมีล็อกเฉพาะสำหรับฐานข้อมูลและแชร์การล็อกตารางเนื่องจากจำเป็นต้องดำเนินการตรวจสอบระดับตาราง . CHECKDB ล้มเหลวในต้นแบบหากไม่มีการสร้างสแน็ปช็อต
รายการต่อไปนี้ประกอบด้วยการตรวจสอบภายในที่ดำเนินการโดย DBCC CHECKDB:
- ตรวจสอบตารางระบบที่สำคัญ
- การตรวจสอบเชิงตรรกะของตารางระบบที่สำคัญ
- ตรวจสอบตรรกะของตารางอื่นๆ
- ตรวจสอบการจัดสรร
- ตรวจสอบข้อมูลเมตา
- การตรวจสอบความถูกต้องของนายหน้าบริการ
- มุมมองที่จัดทำดัชนี ตรวจสอบดัชนีเชิงพื้นที่
ข้อผิดพลาด CHECKDB
ตารางต่อไปนี้แสดงข้อผิดพลาด DBCC CHECKDB บางส่วน:
แนวทางปฏิบัติที่ดีที่สุด
ถ้าฐานข้อมูล VLDB มีปัญหารันไทม์สำหรับ CHECKDB คุณควรใช้PHYSICAL_ONLY ตัวเลือกบ่อยครั้งเพื่อลดเวลาการทำงานสำหรับ VLDB ฐานข้อมูลการผลิต อย่างไรก็ตาม โดยทั่วไปคุณควรเรียกใช้ DBCC CHECKDB โดยไม่ได้ระบุตัวเลือก กำหนดการรัน CHECKDB ของคุณขึ้นอยู่กับสภาพแวดล้อมการผลิตของคุณ
ตัวเลือกการคืนค่าขั้นสูง
ในขณะที่คนส่วนใหญ่ใช้เทคนิคการคืนค่าฐานข้อมูลอย่างง่ายสำหรับปัญหาการทุจริต มีเทคนิคการคืนค่าขั้นสูงดังต่อไปนี้:
กู้คืนหน้า
คุณสามารถกู้คืนหนึ่งหน้าขึ้นไปด้วยเทคนิคนี้ การคืนค่าระดับหน้าเป็นการดำเนินการแบบออนไลน์สำหรับรุ่นฐานข้อมูลขององค์กร และคุณสามารถใช้การดำเนินการออฟไลน์สำหรับรุ่นอื่นๆ ได้ ซึ่งหมายความว่าฐานข้อมูลสามารถออฟไลน์ได้ในระหว่างกระบวนการกู้คืน
สคริปต์ T-SQL
RESTORE DATABASE <database_name>
PAGE = '<file: page> [ ,... n ] ' [ ,... n ]
FROM <backup_device> [ ,... n ]
WITH NORECOVERY
ในการรับ Page Id ให้ใช้แหล่งต่างๆ ที่มีอยู่ เช่น บันทึกข้อผิดพลาด, Eventtraces, DBCC และ msdb..suspectpages ตารางที่แสดงรายการหน้าเว็บที่เสียหายและรหัส
หมายเหตุ: คุณไม่สามารถกู้คืนหน้าบูต หน้าส่วนหัวของไฟล์ บางหน้าในตารางระบบที่สำคัญ และบิตแมปการจัดสรรเป็นการกู้คืนหน้า
การคืนค่าชิ้นส่วนและบางส่วน
คล้ายกับการกู้คืนหน้า คุณสามารถดำเนินการกู้คืนบางส่วนและบางส่วนทางออนไลน์สำหรับรุ่นองค์กร และออฟไลน์สำหรับรุ่นอื่นๆ ที่มีหลายไฟล์หรือกลุ่มไฟล์
การคืนค่าทีละน้อยเริ่มต้นด้วยลำดับการคืนค่าบางส่วน RESTORE DATABASE
คำสั่งที่คืนค่าการสำรองข้อมูลทั้งหมดด้วย PARTIAL
ตัวเลือก. เมื่อการคืนค่าเสร็จสมบูรณ์ ฐานข้อมูลควรออนไลน์เพียงบางส่วน ซึ่งหมายความว่าไฟล์ที่เหลืออยู่ในโหมดรอการกู้คืนเนื่องจากการกู้คืนถูกเลื่อนออกไป
การคืนค่าทีละน้อยขึ้นอยู่กับรูปแบบการกู้คืนของฐานข้อมูลและลำดับของการกู้คืน
เรียกคืนลำดับ
ในการดำเนินการกู้คืนบางส่วนของกลุ่มไฟล์ X และ Z และกลุ่มไฟล์หลัก ให้เรียกใช้รหัสต่อไปนี้:
RESTORE DATABASE DB_XYZ FILEGROUP='X',FILEGROUP='Z'
FROM partial_backup
WITH PARTIAL, RECOVERY;
ที่จุดก่อนหน้า X สิ่งต่อไปนี้เป็นจริง:
- Filegroup Z และกลุ่มไฟล์หลักออนไลน์อยู่
- ไฟล์ในกลุ่มไฟล์ Y อยู่ระหว่างการกู้คืน
- กลุ่มไฟล์ออฟไลน์อยู่
การรัน RESTORE DATABASE DB_XYZ FILEGROUP='Y' FROM backup WITH RECOVERY;
ตอนนี้ กลุ่มไฟล์ทั้งหมดออนไลน์อยู่
เทคนิคการซ่อมขั้นสูงอื่นๆ
การซ่อมแซมรับประกันการกู้คืนข้อมูลเสมอหรือไม่? คำตอบคือ “ไม่”
อาจมีชุดค่าผสมที่เป็นไปได้จำนวนหนึ่งที่อาจทำให้ข้อมูลเสียหาย และไม่สามารถทดสอบชุดค่าผสมทั้งหมดได้ ตัวอย่างเช่น ตารางระบบเสียหาย และการซ่อมแซมจะไม่ทำงานบนหน้าต่างๆ เช่น บูต และ PFS .
ต่อไปนี้คือตัวเลือกการซ่อมแซมบางส่วน:
REPAIR_REBUILD
ตัวเลือกนี้ทำการซ่อมแซม แต่อาจทำให้ข้อมูลสูญหายเมื่อสร้าง NCindex ที่เสียหายขึ้นใหม่
REPAIR_ALLOW_DATA_LOSS
ตัวเลือกนี้ทำการซ่อมแซม แต่อาจทำให้ข้อมูลสูญหายได้
สร้างดัชนีตารางระบบใหม่
คุณไม่สามารถซ่อมแซมดัชนีตารางระบบแบบคลัสเตอร์ได้ แต่คุณสามารถซ่อมแซมดัชนีที่ไม่ใช่แบบคลัสเตอร์ได้ในบางสถานการณ์โดยการตรวจสอบตัวเลือก DBCC CHECKTABLE
หมายเหตุ: ใช้เทคนิคการซ่อมแซมขั้นสูงทุกประเภทบนสำเนาของฐานข้อมูลเสมอ ไม่ใช่ในฐานข้อมูลดั้งเดิมเพื่อหลีกเลี่ยงสถานการณ์เลวร้าย
สร้างวันที่ใหม่จากดัชนีที่ไม่ใช่คลัสเตอร์:
ถ้าดัชนีคลัสเตอร์หรือฮีปเสียหาย การซ่อมแซมเป็นทางเลือกเดียวสำหรับการกู้คืนข้อมูลจากดัชนีที่ไม่ใช่คลัสเตอร์ (NC) อย่างไรก็ตาม ในบางกรณี การซ่อมแซมจะไม่ทำงานหากข้อมูลเมตาเสียหาย
คุณสามารถใช้คำสั่ง select เพื่อบังคับการเลือกดัชนี NC ที่ไม่เสียหาย แต่อาจขึ้นอยู่กับความครอบคลุมระดับคอลัมน์ของดัชนี NC
หน้า DBCC
การใช้ DBCC PAGE … WITH TABLERESULTS
สามารถระบุช่วงที่สำคัญได้ คุณสามารถสร้างจากดัชนีที่ไม่จัดกลุ่มและตรวจสอบหน้าที่เสียหายเพื่อพยายามรับข้อมูลจากหน้าต่างๆ
บทสรุป
หลังจากอ่านโพสต์นี้ คุณควรมีความเข้าใจที่ดีขึ้นเกี่ยวกับความเสียหายของฐานข้อมูลและวิธีกู้คืนฐานข้อมูลของคุณโดยใช้เทคนิคทั้งแบบธรรมดาและขั้นสูง นอกจากนี้ เทคนิคเหล่านี้ยังช่วยในการนำฐานข้อมูลออนไลน์หลังการทุจริต คุณควรมีแผนสำรองที่แข็งแกร่งเสมอเพื่อหลีกเลี่ยงการหยุดทำงานของการทุจริต
ใช้แท็บคำติชมเพื่อแสดงความคิดเห็นหรือถามคำถาม
เพิ่มประสิทธิภาพสภาพแวดล้อมของคุณด้วยการดูแลระบบ การจัดการ และการกำหนดค่าจากผู้เชี่ยวชาญ
บริการแอปพลิเคชันของ Rackspace(RAS) ผู้เชี่ยวชาญจะให้บริการแบบมืออาชีพและที่มีการจัดการในแอปพลิเคชันที่หลากหลาย:
- แพลตฟอร์มอีคอมเมิร์ซและประสบการณ์ดิจิทัล
- การวางแผนทรัพยากรองค์กร (ERP)
- ระบบธุรกิจอัจฉริยะ
- การจัดการลูกค้าสัมพันธ์ของ Salesforce (CRM)
- ฐานข้อมูล
- อีเมลโฮสติ้งและประสิทธิภาพการทำงาน
เราจัดส่ง:
- ความเชี่ยวชาญที่เป็นกลาง :เราลดความซับซ้อนและเป็นแนวทางในการสร้างสรรค์สิ่งใหม่ของคุณ โดยมุ่งเน้นที่ความสามารถที่มอบคุณค่าในทันที
- ประสบการณ์สุดคลั่ง ™:เรารวมกระบวนการก่อน เทคโนโลยีที่สอง®แนวทางพร้อมการสนับสนุนทางเทคนิคเฉพาะเพื่อมอบโซลูชันที่ครอบคลุม
- ผลงานที่ยอดเยี่ยม :เราใช้ประสบการณ์ระบบคลาวด์ที่ครอบคลุมเพื่อช่วยคุณเลือกและปรับใช้เทคโนโลยีที่เหมาะสมบนระบบคลาวด์ที่เหมาะสม
- ส่งไว :เราพบคุณในที่ที่คุณอยู่ในการเดินทางของคุณและปรับความสำเร็จของเราไปพร้อมกับคุณ
แชทเลยเพื่อเริ่มต้น