Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> ฐานข้อมูล

การตรวจจับและกู้คืนการเสียหายขั้นสูงใน Microsoft SQL Server

บทนำ

ปัจจุบัน Microsoft SQL Server เป็นหนึ่งในระบบจัดการฐานข้อมูลเชิงสัมพันธ์ (RDBMS) ที่ได้รับความนิยมและใช้งานกว้างขวางที่สุด เนื่องจากโครงสร้างภายในที่ทันสมัยและความน่าเชื่อถือสูง องค์กรจำนวนมากได้เลือกใช้ฐานข้อมูล SQL Server เพื่อจัดเก็บและดูแลข้อมูลธุรกิจที่สำคัญ

องค์กรคาดหวังให้ผู้ดูแลฐานข้อมูล (DBA) ปรับปรุงประสิทธิภาพ การบำรุงรักษา และความปลอดภัยของฐานข้อมูลอย่างต่อเนื่อง เมื่อฐานข้อมูลเสียหายและข้อมูลเข้าถึงไม่ได้ สาเหตุที่เป็นไปได้อาจรวมถึง การเสียหายของฮาร์ดแวร์ ปัญหาดิสก์ การโจมตีไวรัส หรือความล้มเหลวของระบบปฏิบัติการ (OS) การซ่อมแซมฐานข้อมูลที่เสียหายไม่ใช่งานง่าย จนกว่าคุณจะรู้จักเทคนิคที่ดีที่สุด

บทความนี้จะอภิปรายสาเหตุบางส่วนของการเสียหายฐานข้อมูล ช่วยให้คุณระบุการเสียหายของเพจ (page) สำรวจคำสั่ง Database Consistency Checker (DBCC) CHECKDB และสาธิตเทคนิคการกู้คืนและซ่อมแซมขั้นสูง

การเสียหายของฐานข้อมูล

SQL Server จัดเก็บข้อมูลผู้ใช้ในรูปแบบของเพจ (pages) เพจเหล่านี้อยู่ในไฟล์ข้อมูล .MDF (Primary) การเสียหายของไฟล์ .MDF อาจนำไปสู่การเสียหายของฐานข้อมูลทั้งหมด เพจของไฟล์ข้อมูลจะดีเมื่อเขียนออกจากหน่วยความจำของ SQL Server (กล่าวคือ บนดิสก์) แต่จะเสียหายเมื่ออ่านกลับเข้าสู่หน่วยความจำ ตามภาพประกอบด้านล่าง:

การตรวจจับและกู้คืนการเสียหายขั้นสูงใน Microsoft SQL Server

สาเหตุของการเสียหายฐานข้อมูล:

  • ระบบ I/O (เป็นหนึ่งในสาเหตุที่พบบ่อยที่สุดของการเสียหายฐานข้อมูล)
  • ระบบปฏิบัติการ Windows
  • ไดรเวอร์ระบบไฟล์ เช่น การเข้ารหัสหรือแอนติไวรัส
  • คอนโทรลเลอร์ SAN หรือ RAID
  • ดิสก์
  • หน่วยความจำ
  • หัวข้อมูลไฟล์ (File Headers)
  • บั๊กของ SQL Server
  • ข้อผิดพลาดของมนุษย์

ข้อความแสดงข้อผิดพลาด:

เมื่อเข้าถึงฐานข้อมูลที่เสียหาย คุณอาจเห็นข้อความแสดงข้อผิดพลาดดังต่อไปนี้:

  • Msg 823 ใน SQL Server
  • Msg 824 ใน SQL Server
  • Msg 825 (read retry) ใน SQL Server
  • Error 9004 SQL Server
  • Metadata Corruption Error
  • Page Level Corruption Error

การติดตามการเสียหายของเพจ

SQL Server มีกลไกในตัวสำหรับระบุและแจ้งเตือนโดยอัตโนมัติเมื่อเกิดการเสียหายระหว่างการดำเนินการ I/O เช่น การอ่านและเขียนเพจไปยังดิสก์

ตัวเลือกการตรวจสอบระดับเพจประเภทต่างๆ ดังต่อไปนี้มีให้ใช้งานใน SQL Server และช่วยปกป้องเพจบนดิสก์:

  • TORN_PAGE_DETECTION
  • Checksum

เมื่อระบุ TORN_PAGE_DETECTION บิตจะถูกพลิกสำหรับ섹เตอร์ดิสก์ 512 ไบต์ 16 ชุดสำหรับเพจไฟล์ข้อมูล 8 KB เมื่อใดก็ตามที่มีการเขียนเพจลงดิสก์ หลังจากอ่านเพจกลับเข้าหน่วยความจำภายหลัง ค่าเหล่านี้จะถูกเปรียบเทียบ หากพบบิตในสถานะผิด เพจน่าจะถูกเขียนผิดพลาด ในกรณีนี้ ระบบจะสร้างข้อความแสดงข้อผิดพลาด 824 (ระบุข้อผิดพลาด torn-page)

เมื่อระบุ Checksum ระบบจะคำนวณค่า checksum จากเนื้อหาของเพจและเก็บค่านั้นไว้ในส่วนหัวของเพจเมื่อเขียนเพจลงดิสก์ หลังจากโหลดเพจจากดิสก์ภายหลัง checksum จะถูกคำนวณใหม่และเปรียบเทียบกับค่าที่เก็บไว้ในส่วนหัวของเพจ หากค่าไม่ตรงกัน ระบบจะสร้างข้อความแสดงข้อผิดพลาด 824 (ระบุความล้มเหลวของ checksum)

ทั้งสองข้อผิดพลาด 823 hard I/O และ 824 soft I/O เป็นข้อผิดพลาดระดับความรุนแรง 24 และถูกบันทึกในตาราง msdb.dbo.suspect_pages

ตาราง msdb.dbo.suspect_pages ใช้สำหรับการดำเนินการกู้คืนเพจเดี่ยว (single page restore) และสามารถบันทึกลงใน SQL Server error log และ Windows event log ได้

DBCC CHECKDB

DBCC CHECKDB ตรวจสอบความสมบูรณ์ทางกายภาพและตรรกะของออบเจ็กต์ทั้งหมดในฐานข้อมูล

เป็นการดำเนินการที่ใช้ทรัพยากรมาก และใช้การประมวลผลแบบขนาน แต่คุณสามารถรันในเธรดเดียวได้โดยใช้ trace flag 2528

การตรวจสอบตารางระบบพื้นฐานที่สำคัญ

การตรวจสอบพื้นฐานถูกออกแบบมาเพื่อตรวจสอบตารางระบบที่สำคัญซึ่งเก็บข้อมูลเมตาของสตอเรจเอนจิน และเส้นทางการจัดสรรที่ข้อมูลจัดเก็บในไฟล์ MDF

การตรวจสอบพื้นฐานมีดังต่อไปนี้:

  • DBCC CHECKALLOC: ตรวจสอบความสอดคล้องของโครงสร้างการจัดสรรในฐานข้อมูล ตรวจสอบว่าโครงสร้างการจัดสรรถูกต้อง และไม่มีเพจไฟล์ข้อมูลเดี่ยวถูกจัดสรรให้กับสองตาราง

  • DBCC CHECKTABLE: ตรวจสอบความสอดคล้องของตารางและดัชนี ตรวจสอบโครงสร้างของตารางและดัชนีที่เกี่ยวข้อง กำหนดว่าข้อมูลดัชนีมีแถวที่ตรงกันในตาราง และตรวจสอบคีย์ลำดับของดัชนี หากมี FILESTREAM ใช้ในตาราง จะตรวจสอบความมีอยู่ของลิงก์

  • DBCC CHECKCATALOG: ตรวจสอบความสอดคล้องระหว่างแคตตาล็อกระบบ

  • 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 จะล้มเหลวบน master หากไม่มีการสร้างสแนปชอต

รายการต่อไปนี้ประกอบด้วยการตรวจสอบภายในที่ดำเนินการโดย DBCC CHECKDB:

  • การตรวจสอบตารางระบบสำคัญ
  • การตรวจสอบตรรกะของตารางระบบสำคัญ
  • การตรวจสอบตรรกะของตารางอื่นๆ
  • การตรวจสอบการจัดสรร
  • การตรวจสอบข้อมูลเมตา
  • การตรวจสอบความถูกต้องของ Service Broker
  • การตรวจสอบมุมมองดัชนีและดัชนีเชิงพื้นที่

ข้อผิดพลาดของ CHECKDB

ตารางต่อไปนี้แสดงข้อผิดพลาดบางส่วนของ DBCC CHECKDB:

การตรวจจับและกู้คืนการเสียหายขั้นสูงใน Microsoft SQL Server

แนวทางปฏิบัติที่ดีที่สุด

หากฐานข้อมูล VLDB มีปัญหาเวลารันไทม์สำหรับ CHECKDB คุณควรใช้ตัวเลือก PHYSICAL_ONLY บ่อยครั้งเพื่อลดเวลารันสำหรับฐานข้อมูล VLDB ในสภาพแวดล้อมการผลิต อย่างไรก็ตาม คุณควรเรียกใช้ DBCC CHECKDB โดยไม่มีตัวเลือกที่ระบุโดยทั่วไป จัดตารางเวลาการรัน CHECKDB ขึ้นอยู่กับสภาพแวดล้อมการผลิตแต่ละรายของคุณ

ตัวเลือกการกู้คืนขั้นสูง

ในขณะที่ส่วนใหญ่ใช้เทคนิคการกู้คืนฐานข้อมูลแบบง่ายสำหรับปัญหาการเสียหาย เทคนิคการกู้คืนขั้นสูงต่อไปนี้มีให้ใช้งาน:

การกู้คืนเพจ (Page Restore)

คุณสามารถกู้คืนเพจหนึ่งหรือหลายเพจด้วยเทคนิคนี้ การกู้คืนระดับเพจเป็นการดำเนินการออนไลน์สำหรับรุ่น Enterprise ของฐานข้อมูล และคุณสามารถใช้การดำเนินการออฟไลน์สำหรับรุ่นอื่นๆ ซึ่งหมายความว่าฐานข้อมูลสามารถออฟไลน์ระหว่างกระบวนการกู้คืน

สคริปต์ T-SQL

RESTORE DATABASE <database_name> PAGE = '<file: page> [ ,... n ] ' [ ,... n ] FROM <backup_device> [ ,... n ] WITH NORECOVERY

เพื่อรับ Page ID ให้ใช้แหล่งที่มาต่างๆ เช่น Error log, Event traces, DBCC, และระเบียนตาราง msdb..suspectpages ซึ่งแสดงรายการเพจที่เสียหายและ ID ของพวกเขา

หมายเหตุ: คุณไม่สามารถกู้คืนหน้าบูท (boot pages), หน้าหัวไฟล์ (file header pages), บางหน้าในตารางระบบสำคัญ และบิตแมปการจัดสรรเป็นการกู้คืนเพจได้

การกู้คืนแบบชิ้นส่วนและบางส่วน (Piecemeal and Partial Restores)

คล้ายกับการกู้คืนเพจ คุณสามารถดำเนินการกู้คืนแบบชิ้นส่วนและบางส่วนได้ออนไลน์สำหรับรุ่น Enterprise และออฟไลน์สำหรับรุ่นอื่นๆ ที่มีหลายไฟล์หรือกลุ่มไฟล์

การกู้คืนแบบชิ้นส่วนทุกครั้งเริ่มต้นด้วยลำดับการกู้คืนบางส่วน คำสั่ง RESTORE DATABASE ที่กู้คืนการสำรองข้อมูลเต็มรูปแบบด้วยตัวเลือก PARTIAL เมื่อการกู้คืนนี้เสร็จสิ้น ฐานข้อมูลควรจะออนไลน์บางส่วน ซึ่งหมายความว่าไฟล์ที่เหลืออยู่ในโหมด recovery pending เนื่องจากการกู้คืนถูกเลื่อน

การกู้คืนแบบชิ้นส่วนขึ้นอยู่กับโมเดลการกู้คืนของฐานข้อมูลและลำดับการกู้คืนของมัน

ลำดับการกู้คืน

เพื่อดำเนินการกู้คืนบางส่วนของกลุ่มไฟล์ X และ Z และกลุ่มไฟล์หลัก ให้รันโค้ดต่อไปนี้:

RESTORE DATABASE DB_XYZ FILEGROUP='X',FILEGROUP='Z' FROM partial_backup WITH PARTIAL, RECOVERY;

ในจุดก่อนหน้านี้ X สิ่งต่อไปนี้เป็นจริง:

  • กลุ่มไฟล์ Z และกลุ่มไฟล์หลักอยู่ในสถานะออนไลน์
  • ไฟล์ในกลุ่มไฟล์ Y อยู่ในสถานะ recovery pending
  • กลุ่มไฟล์อยู่ในสถานะออฟไลน์

รัน RESTORE DATABASE DB_XYZ FILEGROUP='Y' FROM backup WITH RECOVERY;

ตอนนี้ กลุ่มไฟล์ทั้งหมดอยู่ในสถานะออนไลน์

เทคนิคซ่อมแซมขั้นสูงอื่นๆ

การซ่อมแซมมีการรับประกันการกู้คืนข้อมูลเสมอหรือไม่? คำตอบคือ "ไม่"

อาจมีการผสมผสานที่เป็นไปได้หลายอย่างที่สามารถทำให้ข้อมูลเสียหาย และเป็นไปไม่ได้ที่จะทดสอบทุกการผสมผสาน ตัวอย่างเช่น ตารางระบบเสียหาย และการซ่อมแซมจะไม่ทำงานบนหน้าต่างๆ เช่น Boot และ PFS

ต่อไปนี้คือตัวเลือกซ่อมแซมบางส่วน:

REPAIR_REBUILD

ตัวเลือกนี้ดำเนินการซ่อมแซม แต่อาจทำให้สูญเสียข้อมูลเมื่อสร้างดัชนี NC ที่เสียหายใหม่

REPAIR_ALLOW_DATA_LOSS

ตัวเลือกนี้ดำเนินการซ่อมแซม แต่อาจทำให้สูญเสียข้อมูล

การสร้างดัชนีตารางระบบใหม่

คุณไม่สามารถซ่อมแซมดัชนีแบบกลุ่ม (clustered) ของตารางระบบได้ แต่คุณสามารถซ่อมแซมดัชนีที่ไม่ใช่แบบกลุ่มในบางสถานการณ์ได้โดยการตรวจสอบตัวเลือก DBCC CHECKTABLE

หมายเหตุ: ควรดำเนินการเทคนิคซ่อมแซมขั้นสูงทุกประเภทบนสำเนาของฐานข้อมูล ไม่ใช่ฐานข้อมูลต้นฉบับ เพื่อหลีกเลี่ยงสถานการณ์ที่รุนแรง

สร้างข้อมูลใหม่จากดัชนีที่ไม่ใช่แบบกลุ่ม:

หากดัชนีแบบกลุ่มหรือฮีป (heap) เสียหาย การซ่อมแซมเป็นตัวเลือกเดียวสำหรับการกู้คืนข้อมูลจากดัชนีที่ไม่ใช่แบบกลุ่ม (NC) อย่างไรก็ตาม ในบางกรณี การซ่อมแซมจะไม่ทำงานหากข้อมูลเมตาเสียหาย

คุณสามารถใช้คำสัาม select เพื่อบังคับให้เลือกดัชนี NC ที่ไม่เสียหาย แต่สิ่งนั้นอาจขึ้นอยู่กับการครอบคลุมระดับคอลัมน์ของดัชนี NC

DBCC Page

การใช้ DBCC PAGE … WITH TABLERESULTS สามารถระบุช่วงคีย์ได้ คุณสามารถสร้างมันจากดัชนีที่ไม่ใช่แบบกลุ่มและตรวจสอบเพจที่เสียหายเพื่อพยายามดึงข้อมูลจากเพจเหล่านั้น

สรุป

หลังจากอ่านบทความนี้ คุณควรจะเข้าใจการเสียหายของฐานข้อมูลและวิธีกู้คืนฐานข้อมูลของคุณโดยใช้เทคนิคทั้งแบบง่ายและขั้นสูงได้ดีขึ้น นอกจากนี้ เทคนิคเหล่านี้ช่วยให้นำฐานข้อมูลกลับมาออนไลน์หลังการเสียหาย คุณควรมีแผนการสำรองข้อมูลที่แข็งแกร่งเพื่อหลีกเลี่ยงการหยุดทำงานเนื่องจากการเสียหาย

ใช้แท็บ Feedback เพื่อแสดงความคิดเห็นหรือถามคำถาม

เพิ่มประสิทธิภาพสภาพแวดล้อมของคุณด้วยการจัดการ การกำหนดค่า และการบริหารจัดการโดยผู้เชี่ยวชาญ

ผู้เชี่ยวชาญด้านบริการแอปพลิเคชันของ Rackspace (RAS) ให้บริการมืออาชีพและบริการที่จัดการทั่วพอร์ตโฟลิโอแอปพลิเคชันที่กว้างขวาง:

  • แพลตฟอร์มอีคอมเมิร์ซและประสบการณ์ดิจิทัล
  • การวางแผนทรัพยากรองค์กร (ERP)
  • бизнес Intelligence
  • Salesforce Customer Relationship Management (CRM)
  • ฐานข้อมูล
  • โฮสติ้งอีเมลและประสิทธิภาพการทำงาน

เราให้บริการ:

  • ความเชี่ยวชาญที่ไร้ความลำเอียง: เราลดความซับซ้อนและนำทางการเดินทางการทำให้ทันสมัยของคุณ โดยเน้นความสามารถที่ส่งมอบคุณค่าทันที
  • Fanatical Experience™: เรารวมแนวทาง Process first. Technology second.® กับการสนับสนุนทางเทคนิคที่专心เพื่อให้โซลูชันที่ครอบคลุม
  • พอร์ตโฟลิโอที่ไม่มี đối thủ: เราใช้ประสบการณ์คลาวด์ที่กว้างขวางเพื่อช่วยคุณเลือกและปรับใช้เทคโนโลยีที่เหมาะสมบนคลาวด์ที่เหมาะสม
  • การส่งมอบที่คล่องตัว: เราพบคุณที่จุดที่คุณอยู่ในการเดินทางของคุณและปรับความสำเร็จของเราให้สอดคล้องกับของคุณ

แชทตอนนี้เพื่อเริ่มต้น