การวินิจฉัยข้อผิดพลาด Microsoft SQL Server 9001: บันทึกสำหรับฐานข้อมูลไม่พร้อมใช้งาน


20

ในช่วงสุดสัปดาห์เว็บไซต์ที่ฉันเรียกใช้หยุดทำงานบันทึกข้อผิดพลาดต่อไปนี้ใน Event Viewer ทุกครั้งที่มีการร้องขอเว็บไซต์:

รหัสเหตุการณ์: 9001

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

เว็บไซต์โฮสต์บนเซิร์ฟเวอร์เฉพาะดังนั้นฉันสามารถ RDP ลงในเซิร์ฟเวอร์และกระตุ้นรอบ ๆ LDFไฟล์สำหรับฐานข้อมูลที่มีอยู่ในC:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATAโฟลเดอร์ แต่ความพยายามที่จะทำผลงานใด ๆ กับฐานข้อมูลจากผลการบริหารสตูดิโอในกล่องโต้ตอบการรายงานข้อผิดพลาดเดียวกัน - 9001: เข้าสู่ระบบฐานข้อมูลจะไม่สามารถใช้ได้ ...

นี่เป็นครั้งแรกที่ฉันได้รับข้อผิดพลาดนี้และฉันเคยโฮสต์ไซต์นี้ (และอื่น ๆ ) บนเว็บเซิร์ฟเวอร์เฉพาะนี้มานานกว่าสองปีแล้ว

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

ฉันส่งอีเมลถึงฝ่ายสนับสนุนที่ บริษัท เว็บโฮสติ้งและนี่คือคำตอบของพวกเขา:

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

บันทึกสามารถ "เสียหายหรือไม่"

คำถามของฉัน:ขั้นตอนถัดไปที่ฉันควรทำเพื่อวินิจฉัยปัญหานี้คืออะไร? ฉันจะทราบได้อย่างไรว่านี่เป็นปัญหาฮาร์ดแวร์จริงหรือไม่ และถ้ามีจะมีตัวเลือกอื่นนอกเหนือจากการเปลี่ยนดิสก์หรือไม่?

ขอบคุณ

คำตอบ:


16

ปัญหาความเสียหายของฐานข้อมูลมากกว่า 99% คือการทำระบบจัดเก็บข้อมูล ปัญหาที่เหลืออีกครึ่งหนึ่งเกิดจากหน่วยความจำไม่ดีส่วนอีกครึ่งหนึ่งเป็นข้อบกพร่องใน SQL Server

โอกาสมันเป็นปัญหาการจัดเก็บ

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

การใช้หน่วยความจำอยู่ที่ 87% ไม่เกี่ยวข้องกับปัญหา SQL Server จะเรียกใช้หน่วยความจำจนถึง 100% (หรือใกล้เคียง) โดยการออกแบบ


ขอบคุณสำหรับคำแนะนำ ฉันลองทำ DBCC CHECKDB แต่มีข้อผิดพลาดมากมายรวมถึงข้อผิดพลาดที่บอกว่าไม่พบไฟล์บันทึก แต่ฉันไม่ได้ลองนำ DB ทางออนไลน์ในโหมดฉุกเฉิน
Scott Mitchell

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

แก้ไข. การใช้หน่วยความจำจะไม่มีส่วนเกี่ยวข้องกับสิ่งนี้ - เว้นแต่ว่าหน่วยความจำจะเสียหายและเพิ่งโอนลงบนดิสก์ ไม่ว่าจะด้วยวิธีใดคุณควรเห็นการบ่งชี้อื่น ๆ ของปัญหา IO ในบันทึกเหตุการณ์ของคุณ ที่ไหนสักแห่ง.
Michael K Campbell

คุณสามารถลองใช้ checkdisk (chkdsk) กับดิสก์เพื่อดูว่า Windows เห็นปัญหาใด ๆ กับดิสก์หรือไม่ โอกาสที่คุณจะต้องเปลี่ยนดิสก์ อย่างไรก็ตามอาจเป็นเพียงจุดบกพร่องในรหัสของตัวควบคุมดิสก์หรือรหัสภายใน BIOS ของดิสก์ ไม่ว่าในกรณีใดฉันจะพิจารณาการเปลี่ยนดิสก์และ / หรือคอนโทรลเลอร์
mrdenny

8

ฉันสามารถแก้ปัญหานี้ได้โดยการออฟไลน์ฐานข้อมูลใน Management Studio จากนั้นนำมันกลับมาออนไลน์ทันที dbcc checkdbเกิดข้อผิดพลาดซึ่งแก้ไขได้หลังจากทำเช่นนี้ ฉันไม่สามารถพูดว่าทำไมนี้ทำงานเพียงว่ามันไม่ทำงาน


5

ฉันมีปัญหานี้เมื่อเร็ว ๆ นี้เช่นกันและหลังจากการวิจัยหลายครั้งดูเหมือนว่าจะพบได้บ่อยเมื่อฐานข้อมูลถูกตั้งค่าเป็นปิดอัตโนมัติ ฉันตั้งค่าฐานข้อมูลทั้งหมดเป็น AUTO CLOSE = FALSE สิ่งนี้เริ่มต้นด้วยฐานข้อมูลเดียวจากนั้นไปถึงสองฐานข้อมูลและถัดไปเป็นฐานข้อมูลทั้งหมด ฉันเพิ่งเริ่มบริการอินสแตนซ์ของเซิร์ฟเวอร์ SQL แทนการกู้คืนฐานข้อมูล อีกวิธีในการแก้ไขอาการคือการใช้ฐานข้อมูลที่มีปัญหาออฟไลน์และนำกลับมาออนไลน์อีกครั้ง


1

MS SQL จะทำบันทึกของฐานข้อมูลที่ได้รับผลกระทบออฟไลน์เพื่อหลีกเลี่ยงความเสียหายของฐานข้อมูล นั่นคือเหตุผลที่คุณได้รับข้อผิดพลาด 9001

เมื่อคุณออฟไลน์ฐานข้อมูลที่ได้รับผลกระทบ / ออนไลน์ MS SQL จะเปิดใช้งานบันทึกฐานข้อมูลที่ได้รับผลกระทบจนกว่าข้อผิดพลาดจะเกิดขึ้นอีกครั้ง

อีกวิธีในการแก้ไขปัญหานี้คือการเปลี่ยนตัวเลือก Auto_Close เป็น OFF

http://sqlmag.com/blog/worst-practice-allowing-autoclose-sql-server-databases


0

ฉันจะเดา / หวังว่าคุณจะมีการโจมตีที่เกิดขึ้นกับดิสก์สำหรับเซิร์ฟเวอร์ sql ของคุณ หากคุณสงสัยว่าฮาร์ดแวร์มีปัญหาสิ่งแรกที่ฉันจะทำคือเรียกใช้เครื่องมือบำรุงรักษา / วินิจฉัยการโจมตีของคุณ

สิ่งที่สอง (อาจพร้อมกันถ้าคุณทำได้) เรียกใช้ dbcc checkdb บนฐานข้อมูล (อาจเป็นฐานข้อมูลระบบของคุณด้วย)


0

ตกลงขั้นตอนแรกสำรองไฟล์บันทึกและไฟล์ mdf ของคุณไปยังไดรฟ์อื่นโดยสิ้นเชิง อย่างรวดเร็ว! (คัดลอกไฟล์)

ลองทำการสำรองฐานข้อมูลเต็มรูปแบบ

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

แจ้งให้เราทราบ


0

ใช่ฉันได้รับปัญหาเดียวกันนี้เช่นกันมันเกี่ยวกับข้อผิดพลาด tempDb 9001 เช่นบันทึกไม่พร้อมใช้งาน เราเริ่มบริการใหม่และทุกอย่างเรียบร้อยดี

ปัญหาที่อยู่เบื้องหลังนี้คือ SAN หรือปัญหาการจัดเก็บข้อมูลในขณะที่การดำเนินการเขียน I / O ก็ไม่สามารถเขียนเกิน 15 วินาที


0

เมื่อวานนี้ฉันได้รับข้อผิดพลาดเดียวกัน "บันทึกสำหรับฐานข้อมูล '%' ไม่สามารถใช้ได้ข้อผิดพลาดร้ายแรง 9001, msg 21 โปรดติดต่อผู้ดูแลระบบของคุณ" -

วิธีแก้ปัญหา - ฉันตรวจสอบ 'TempDB' แต่ไม่สามารถเข้าถึงฐานข้อมูลระบบที่เหลือในทำนองเดียวกัน จากนั้นก่อนที่จะไปที่ตัวเลือกการซ่อมแซมฉันเพิ่งเริ่มบริการ SQL สำหรับอินสแตนซ์นั้นและปัญหาได้รับการแก้ไข :) :)


-2

ฉันได้เห็นสิ่งนี้เกิดขึ้นเมื่อไม่มีพื้นที่ว่างบนดิสก์สำหรับการขยายบันทึก คุณสามารถตรวจสอบว่ามีพื้นที่เหลือเฟือใน C: \ และบันทึกของคุณกำลังถูกจัดการนั่นคือการสำรองข้อมูลหากคุณอยู่ในโหมดการกู้คืนแบบเต็ม

ฉันจะย้าย ldf's (และ mdf's) ออกจากปริมาณการบูตหากคุณมีตัวเลือก


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

ฉันจะใช้ถ้อยคำใหม่ .. อาจจะไม่ใช่ความเสียหายของฐานข้อมูล แต่สาเหตุที่แน่นอนสำหรับไฟล์บันทึกไม่พร้อมใช้งานตามที่ระบุไว้
SqlACID

1
มีพื้นที่ว่างบนไดรฟ์มากกว่า 25 GB และฐานข้อมูลที่เป็นปัญหามีขนาดไม่เกิน 25 MB
Scott Mitchell

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

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