Saturday, August 15, 2009

การกู้ข้อมูลกรณี Redo Log File ที่ไม่ได้ Active อยู่เสีย

ข้อเขียนนี้ช่วยฉัน: 
Redo Log File มีอยู่ 3 สถานะคือ
1) Current คือตัวที่ระบบฐานข้อมูลกำลังเขียนอยู่
2) Active คือตัวที่ระบบฯ ยังต้องใช้ในการทำ Instance Recovery อยู่ และ
3) Inactive คือสถานะที่ไม่ได้ใช้งานใด ๆ แล้ว

กรณีที่ Redo Log File เสีย หากตัว (หรือกลุ่ม) ที่เสียมีสถานะเป็น Inactive จะจัดการง่ายกว่ากรณีที่เป็น Current หรือ Active โดยมีขั้นตอนในการกู้ Redo Log File ดังนี้

1) เช็คดูว่า Redo Log File ตัวที่เสียนั้นมีสถานะเป็น Inactive
2) ถ้าใช่ เคลียร์ข้อมูลใน Redo Log File นั้น
3) Open database
4) แบ็คอัพฐานข้อมูลทั้งหมด (Whole Database Backup)

ในบทความนี้เราเน้นที่การแก้ปัญหา Redo Log File เสียเมื่อโหมดในการเก็บล็อกของระบบฐานข้อมูลเป็นแบบ No Archive (ไม่มีการ Archive Redo Log มาเก็บไว้)
เมื่อ Redo Log File เสีย เราจะพบ Error Message คล้าย ๆ กับตัวอย่างข้างล่างนี้

------------------------------------------------------------
D:\> set oracle_sid=orcl2
D:\> sqlplus / as sysdba
SQL> startup
ORACLE instance started.
Total System Global Area 167772160 bytes
Fixed Size 1247876 bytes
Variable Size 83887484 bytes
Database Buffers 75497472 bytes
Redo Buffers 7139328 bytes
Database mounted.
ORA-00313: open failed for members of log group 3 of thread 1
ORA-00312: online log 3 thread 1:
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL2\REDO03.LOG'
------------------------------------------------------------

จากตัวอย่างเรารู้ว่า Redo Log File ตัวที่มีปัญหาคือ Onlinelog 3 ซึ่งมีพาธอยู่ที่ D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL2\REDO03.LOG

เมื่อทราบว่าปัญหาเกิดจาก Redo Log File เราจะเริ่มแก้ปัญหาด้วยวิธีการที่กล่าวมา
1) เราจะเช็คดูว่า Database อยู่ในโหมด No Archive และสถานะของ Onlinelog 3 เป็น Inactive

------------------------------------------------------------
SQL> archive log list
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 6
Current log sequence 9

SQL> select group#,thread#,status from v$log;
GROUP# THREAD# STATUS
---------- ---------- ----------------
1 1 CURRENT
3 1 INACTIVE
2 1 INACTIVE
------------------------------------------------------------

2) จากผลการตรวจสอบพบว่าระบบฐานข้อมูลอยู่ในโหมด No Archive และไฟล์ที่เสีย (3) มีสถานะเป็น Inactive เราจะเคลียร์ล็อกที่อยู่ใน Redo Log File 3

------------------------------------------------------------
SQL> alter database clear logfile group 3;
Database altered.
------------------------------------------------------------

3) จากนั้นจึงเปิดระบบฐานข้อมูล

------------------------------------------------------------
SQL> alter database open;
Database altered.
------------------------------------------------------------

4) ระบบจะกลับมาเปิดใช้งานได้อีกครั้ง ข้อควรจำก็คือจะต้องทำการ Shutdown Immediate, Startup Mount และทำการแบ็คอัพทั้งฐานข้อมูล (Whole Database Backup) เก็บไว้ทันที

บทความที่เกี่ยวเนื่องกัน
1. การกู้ข้อมูลกรณี Control File เสีย

No comments:

Post a Comment