รวบรวม Code ต่างๆนานา ที่เคยพบเจอมาจากประสบการณ์

UNDERGROUND PROGRAMMER PRESENT

วันจันทร์ที่ 7 พฤษภาคม พ.ศ. 2561

SQL SERVER#10 การแก้ปัญหา Suspect Database

เช้ามาก็เจอเลยงานเข้า ติดต่อฐานข้อมูลไม่ได้ไหนๆ เกิดจากอะไร ลองเข้าไปดูสิ นั่นไงอาการเป็นแบบนี้ อ๋อ Database แสดงสถานะ Suspect แล้วมันคืออะไร? แก้ปัญหาอย่างไร? มาดูกัน 😎😎

Recovery SQL Server Suspect Database 

สาเหตุของอาการดังกล่าว: 
ตอบแบบภาพรวมละกันนะ มันก็จะเกิดได้ตามสาเหตุ ดังนี้
  • สาเหตุทางด้านกายภาพ เช่น Hardware ได้รับความเสียหายต่างๆ
  • มีการปิดฐานข้อมูลที่ไม่เหมาะสม เช่น ไฟดับ ไฟตก หรือเหตุอื่นใดที่ทำให้ดับ โดยที่ยังมีกระบวนการทำงานยังไม่เสร็จสมบูรณ์ หรือมีบาง Transaction ค้างอยู่
  • Server หา ไฟล์ฐ้านข้อมูล (*.mdf, *.log)ไม่พบ หรือ ไม่พบอุปกรณ์ ที่จัดเก็บไฟล์
  • มีพื้นที่การจัดเก็บที่ไม่เพียงพอ
วิธีการแก้ปัญหา:

    1. ให้ทำการเข้าสู่ SQL SERVER Management Studio หลังจากนั้นให้เลือกฐ้านข้อมูลเป็น master และทำการเปิดหน้าจอ New Query ขึ้นมา จากนั้นมให้ทำการพิมพ์ คำสั่ง

EXEC sp_resetstatus [YourDatabase];

เป็นคำสั่งที่ใช้ในการปิด suspect mode เมื่อทำแล้วก็ต้อง Stop และ Restart SQL Server 

    2.ทำการปรับสถานะฐานข้อมูลให้อยู่ในภาวะฉุกเฉิน หรือ EMERGENCY mode ก่อน โดยใช้คำสั่งดังนี้

ALTER DATABASE [YourDatabase] SET EMERGENCY

* จะเป็นคำสั่งที่ทำให้ฐานข้อมูล เข้าสู่ READ_ONLY_MODE และจะมีการจำกัดการเข้าถึงให้เฉพาะ SysAdmin Account 
เท่านั้น 



    3. ให้ทำการใช้คำสั่ง DBCC CheckDB ในการตรวจสอบความเสียหาย และตรวจสอบความสมบูรณ์ของโครงสร้างฐานข้อมูลทั้งหมด โดยใช้คำสั่งดังนี้


DBCC checkdb([YourDatabase])

     4. ให้ทำการปรับสถานะ Database เป็น Single mode ก่อน เพื่อเปิดสิทธิ์ในการ Repair Database โดยให้ทำการใช้คำสั่ง ดังนี้

ALTER DATABASE [YourDatabase] SET SINGLE_USER WITH ROLLBACK IMMEDIATE

     5. ทำการซ่อมแซมฐานข้อมูลในส่วนที่เสียหายที่ได้ผลจากคำสั่ง DBCC CheckDB ในส่วนนี้จะใช้เวลาในการประมวลผลพอสมควร และในทางกลับกันอาจมีข้อมูลบางส่วนที่จะสูญหายไปบ้าง โดยให้ทำการใช้คำสั่ง

DBCC CheckDB ([YourDatabase], REPAIR_ALLOW_DATA_LOSS)

    6. ขั้นตอนสุดท้ายจะเป็นการปรับให้ฐานข้อมูลกลับมาใช้งานได้ตามปกติ โดยให้ใช้คำสั่ง

ALTERDATABASE [YourDatabase] SET MULTI_USER


*** หลังจากเสร็จสิ้นทุกขั้นตอนแล้วก็ทำการปิด แล้วก็ลองเข้าตรวจสอบดูอีกครัง โดยใช้คำสั่ง DBCC CheckDB()


*** ดีที่สุดกันพลาด ก็ควรมีเวลา Backup ไว้บ้างก็จะดีนะ 😜😜


ไม่มีความคิดเห็น:

แสดงความคิดเห็น