ระบุสาเหตุที่แท้จริงสำหรับสาเหตุที่ฐานข้อมูลติดค้างอยู่ในสถานะเรียกคืน


10

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

ฉันมีการกู้คืนอัตโนมัติโดยใช้สคริปต์ Powershell ซึ่งคืนค่าสำเนาการผลิตไปยังอินสแตนซ์ DEV สคริปต์ไม่เปลี่ยนแปลงประมาณปีและบางครั้งกระบวนการกู้คืนจะเสร็จสิ้น แต่ฐานข้อมูลที่กู้คืนติดอยู่ในRESTORINGสถานะ (บางครั้งสคริปต์ทำงานได้ดีบางครั้งก็ล้มเหลวเช่นนี้)

แต่ละครั้งถ้าฉันรันกระบวนการที่ทำงานด้วยตนเองอีกครั้งหรือถ้าฉันกู้คืนฐานข้อมูลด้วยตนเองจากส่วนติดต่อผู้ใช้ของ SSMS หรือผ่าน T-SQL จะเสร็จสมบูรณ์โดยไม่มีปัญหา

ฉันพบคำตอบที่แนะนำให้เรียกใช้CHECKDBบนฐานข้อมูลที่คืนค่า แต่ไม่มีอะไรออกมาเป็นสาเหตุของปัญหานี้

เนื่องจากสคริปต์คืนค่าคืนค่าการสำรองข้อมูลทั้งหมดของฐานข้อมูลและใช้"WITH RECOVERY"ตัวเลือกฉันพยายามค้นหาสิ่งที่อาจหยุดกระบวนการกู้คืนแม้ว่าฉันจะกู้คืนโดยใช้"WITH RECOVERY"จริง

ข้อเสนอแนะใด ๆ ที่ชื่นชมจริง ๆ ตั้งแต่ฉันติดอยู่ที่พยายามที่จะเข้าใจว่าทำไมสิ่งนี้เกิดขึ้นเป็นครั้งคราว

ฉันอยากจะแก้ปัญหาต้นเหตุของปัญหามากกว่าจะรักษาอาการซึ่งก็คือการกู้คืนฐานข้อมูลด้วยตนเองอีกครั้ง

ปรับปรุง:

Github สรุปสาระสำคัญได้ @Brent แนะนำ - ที่นี่


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

@Shanky ฉันจะดูสิ่งเหล่านั้นแม้ว่าฉันจะไม่สามารถเข้าถึงข้อมูลนั้นได้โดยตรง (ฉันต้องทำความรู้จักกับผู้ดูแลระบบ SAN ของฉัน) Backup integrity ถูกตั้งค่าให้ตรวจสอบทั้งเมื่อทำการสำรองข้อมูลและเมื่อทำการเขียนลงดิสก์
Radu Gheorghiu

1
บันทึกข้อผิดพลาด SQL Server พูดว่าอะไร ลองใช้งานEXEC sys.xp_readerrorlog 0,1;- ค้นหาข้อความในช่วงเวลาที่ทำการกู้คืน
Max Vernon

@MaxVernon ล็อกข้อผิดพลาดจากเวลาที่เรียกคืนเกิดขึ้น ฉันตรวจสอบข้อความแสดงข้อผิดพลาดและดูเหมือนว่าจะแนะนำให้ตรวจสอบพื้นที่ดิสก์ซึ่งมีอยู่มากมาย ฉันจะขุดลึกลงไปและดูสิ่งที่ฉันสามารถหาได้ แต่จากการมองอย่างรวดเร็วสิ่งนี้สามารถขยายได้ค่อนข้างมากและจะให้ฉันดูสิ่งต่าง ๆมากมาย
Radu Gheorghiu

คำตอบ:


8

มีดโกนของ Occamแนะนำให้เริ่มต้นด้วยสิ่งที่ชัดเจน:

หากบางครั้งสคริปต์ของคุณออกจากฐานข้อมูลในสถานะการกู้คืนให้ดีบั๊กสคริปต์

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

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


ขอบคุณเบรนต์เหล่านี้เป็นแนวทางที่ดี! ฉันจะกลับมาพร้อมกับการอัปเดตเมื่อฉันมีข้อมูลมากขึ้นในขณะที่ฐานข้อมูลดีฉันจะเห็นว่าเกิดอะไรขึ้นเมื่อกระบวนการทำงานอีกครั้งในเช้าวันพรุ่งนี้
Radu Gheorghiu
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.