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

ความเสียหายและการกู้คืนขั้นสูงของ Microsoft SQL Server

บล็อกนี้อธิบายถึงความเสียหายที่อาจเกิดขึ้นที่ระดับฐานข้อมูลใน Microsoft® SQL Server® วิธีการตรวจหา และวิธีแก้ไขโดยใช้เทคนิคการคืนค่าและซ่อมแซมขั้นสูง

แนะนำตัว

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

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

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

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

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

ความเสียหายและการกู้คืนขั้นสูงของ Microsoft 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 บางส่วน:

ความเสียหายและการกู้คืนขั้นสูงของ Microsoft SQL Server

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

ถ้าฐานข้อมูล 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)
  • ฐานข้อมูล
  • อีเมลโฮสติ้งและประสิทธิภาพการทำงาน

เราจัดส่ง:

  • ความเชี่ยวชาญที่เป็นกลาง :เราลดความซับซ้อนและเป็นแนวทางในการสร้างสรรค์สิ่งใหม่ของคุณ โดยมุ่งเน้นที่ความสามารถที่มอบคุณค่าในทันที
  • ประสบการณ์สุดคลั่ง ™:เรารวมกระบวนการก่อน เทคโนโลยีที่สอง®แนวทางพร้อมการสนับสนุนทางเทคนิคเฉพาะเพื่อมอบโซลูชันที่ครอบคลุม
  • ผลงานที่ยอดเยี่ยม :เราใช้ประสบการณ์ระบบคลาวด์ที่ครอบคลุมเพื่อช่วยคุณเลือกและปรับใช้เทคโนโลยีที่เหมาะสมบนระบบคลาวด์ที่เหมาะสม
  • ส่งไว :เราพบคุณในที่ที่คุณอยู่ในการเดินทางของคุณและปรับความสำเร็จของเราไปพร้อมกับคุณ

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