误删重做日志文件组导致启动数据库报错ORA-03113

        听不止一个人说起,学技术就要不断地折腾、搞破坏,比如说备份恢复,你就可以尝试删文件,不管是日志文件、临时文件、数据文件还是system文件。删了之后,重启数据库肯定报错,有的甚至当时数据库就挂掉,这样你就可以学着恢复,一破一立之间,很多常规的备份恢复手段也就算是领教了。我今天就尝试着把虚拟机上的一个重做日志文件组删除。

1.环境准备

我们在Oracle11g中进行测试,数据库处于非归档状态。

点击(此处)折叠或打开

  1. SQL>

  2. SQL> select * from v$version;

  3.  

  4. BANNER

  5. --------------------------------------------------------------------------------

  6. Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production

  7. PL/SQL Release 11.2.0.3.0 - Production

  8. CORE 11.2.0.3.0 Production

  9. TNS for Linux: Version 11.2.0.3.0 - Production

  10. NLSRTL Version 11.2.0.3.0 - Production

  11.  

  12. SQL>

  13. SQL> archive log list;

  14. Database log mode No Archive Mode

  15. Automatic archival Disabled

  16. Archive destination /u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch

  17. Oldest online log sequence 9

  18. Current log sequence 11

  19. SQL>

2.删除一个重做日志文件组,重启数据库报错

首先,通过查询v$log视图来获取数据库 重做日志文件组的状态。

点击(此处)折叠或打开

  1. SQL> select GROUP#,MEMBERS,ARCHIVED,STATUS from v$log;

  2.  

  3.     GROUP# MEMBERS ARC STATUS

  4. ---------- ---------- --- ----------------

  5.          1 1 NO INACTIVE

  6.          2 1 NO CURRENT

  7.          3 1 NO INACTIVE

  8.  

  9. SQL>
然后,通过ls命令查看数据文件,删除第一个 重做日志文件组(该文件组只有一个日志成员)。

点击(此处)折叠或打开

  1. [oracle@ hoegh HOEGH]$ ls

  2. control01.ctl redo01.log sysaux01.dbf undotbs01.dbf

  3. control02.ctl redo02.log system01.dbf users01.dbf

  4. example01.dbf redo03.log temp01.dbf

  5. [oracle@hoegh HOEGH]$

  6. [oracle@hoegh HOEGH]$

  7. [oracle@hoegh HOEGH]$ rm redo01.log

  8. [oracle@hoegh HOEGH]$ ls

  9. control01.ctl control02.ctl example01.dbf redo02.log redo03.log sysaux01.dbf system01.dbf temp01.dbf undotbs01.dbf users01.dbf
重启数据库,数据库报错。

点击(此处)折叠或打开

  1. SQL>

  2. SQL> shu immediate

  3. Database closed.

  4. Database dismounted.

  5. ORACLE instance shut down.

  6. SQL> startup

  7. ORACLE instance started.

  8.  

  9. Total System Global Area 941600768 bytes

  10. Fixed Size 1348860 bytes

  11. Variable Size 515902212 bytes

  12. Database Buffers 419430400 bytes

  13. Redo Buffers 4919296 bytes

  14. Database mounted.

  15. ORA-03113: end-of-file on communication channel

  16. Process ID: 5196

  17. Session ID: 125 Serial number: 5

  18.  

  19.  

  20. SQL>

  21. SQL> select status from v$instance;

  22. ERROR:

  23. ORA-03114: not connected to ORACLE

  24.  

  25.  

  26. SQL>


3.查看报警日志文件,定位问题

ORA-03113报错是一个非常经典的报错,报错原因多种多样,从报错信息中并看不出是什么原因导致的报错,我们可以到报警日志文件中查看有价值的线索。

点击(此处)折叠或打开

  1. [oracle@enmoedu1 trace]$ tail -40 alert_HOEGH.log

  2. Wed Jul 08 21:59:30 2015

  3. MMON started with pid=15, OS id=5443

  4. Wed Jul 08 21:59:30 2015

  5. MMNL started with pid=16, OS id=5445

  6. starting up 1 dispatcher(s) for network address \'(ADDRESS=(PARTIAL=YES)(PROTOCOL=TCP))\'...

  7. starting up 1 shared server(s) ...

  8. ORACLE_BASE from environment = /u01/app/oracle

  9. Wed Jul 08 21:59:39 2015

  10. alter database mount

  11. Wed Jul 08 21:59:43 2015

  12. Successful mount of redo thread 1, with mount id 2105928075

  13. Database mounted in Exclusive Mode

  14. Lost write protection disabled

  15. Completed: alter database mount

  16. Wed Jul 08 22:11:45 2015

  17. Time drift detected. Please check VKTM trace file for more details.

  18. Wed Jul 08 22:11:59 2015

  19. alter database open

  20. Wed Jul 08 22:11:59 2015

  21. Errors in file /u01/app/oracle/diag/rdbms/HOEGH/HOEGH/trace/HOEGH_lgwr_5435.trc:

  22. ORA-00313: open failed for members of log group 1 of thread 1

  23. ORA-00312: online log 1 thread 1: \'/u01/app/oracle/oradata/HOEGH/redo01.log\'

  24. ORA-27037: unable to obtain file status

  25. Linux Error: 2: No such file or directory

  26. Additional information: 3

  27. Errors in file /u01/app/oracle/diag/rdbms/HOEGH/HOEGH/trace/HOEGH_lgwr_5435.trc:

  28. ORA-00313: open failed for members of log group 1 of thread 1

  29. ORA-00312: online log 1 thread 1: \'/u01/app/oracle/oradata/HOEGH/redo01.log\'

  30. ORA-27037: unable to obtain file status

  31. Linux Error: 2: No such file or directory

  32. Additional information: 3

  33. Errors in file /u01/app/oracle/diag/rdbms/HOEGH/HOEGH/trace/HOEGH_ora_5451.trc:

  34. ORA-00313: open failed for members of log group 1 of thread

  35. ORA-00312: online log 1 thread 1: \'/u01/app/oracle/oradata/HOEGH/redo01.log\'

  36. USER (ospid: 5451): terminating the instance due to error 313

  37. Wed Jul 08 22:12:00 2015

  38. System state dump requested by (instance=1, osid=5451), summary=[abnormal instance termination].

  39. System State dumped to trace file /u01/app/oracle/diag/rdbms/HOEGH/HOEGH/trace/HOEGH_diag_5425.trc

  40. Dumping diagnostic data in directory=[cdmp_20150708221200], requested by (instance=1, osid=5451), summary=[abnormal instance termination].

  41. Instance terminated by USER, pid = 5451
其中,黄色标注部分为关键信息,我们知道“ /u01/app/oracle/oradata/HOEGH/redo01.log”这个文件找不到了。

4.启动数据库到mount状态,重建重做日志文件组

从报警日志可以看出,第一组 重做日志文件组丢了,我们可以通过sql语句“ alter database    clear logfile group 1;”重建日志文件组;确认日志文件创建成功后,将数据库切换到open状态。

点击(此处)折叠或打开

  1. SQL> startup nomount

  2. ORACLE instance started.

  3.  

  4. Total System Global Area 941600768 bytes

  5. Fixed Size 1348860 bytes

  6. Variable Size 515902212 bytes

  7. Database Buffers 419430400 bytes

  8. Redo Buffers 4919296 bytes

  9. SQL> alter database mount;

  10.  

  11. Database altered.

  12.  

  13. SQL> select group#,sequence#,archived,status from v$log;

  14.  

  15.     GROUP# SEQUENCE# ARC STATUS

  16. ---------- ---------- --- ----------------

  17.          1 7 NO INACTIVE

  18.          3 6 NO INACTIVE

  19.          2 8 NO CURRENT

  20.  

  21. SQL>

  22. SQL>

  23. SQL>

  24. SQL>

  25. SQL> alter database clear logfile group 1;

  26.  

  27. Database altered.

  28.  

  29. SQL> select group#,sequence#,archived,status from v$log;

  30.  

  31.     GROUP# SEQUENCE# ARC STATUS

  32. ---------- ---------- --- ----------------

  33.          1 0 NO UNUSED

  34.          3 6 NO INACTIVE

  35.          2 8 NO CURRENT

  36.  

  37.  

  38. 启动数据库到open状态

  39. SQL>

  40. SQL> alter database open;

  41.  

  42. Database altered.

  43.  

  44. SQL>

  45. SQL> select group#,sequence#,archived,status from v$log;

  46.  

  47.     GROUP# SEQUENCE# ARC STATUS

  48. ---------- ---------- --- ----------------

  49.          1 0 NO UNUSED

  50.          2 8 NO CURRENT

  51.          3 6 NO INACTIVE
此时我们再次查看文件列表,结果如下。

点击(此处)折叠或打开

  1. [oracle@hoegh HOEGH]$ ls

  2. control01.ctl control02.ctl example01.dbf redo01.log redo02.log redo03.log sysaux01.dbf system01.dbf temp01.dbf undotbs01.dbf users01.dbf

  3. [oracle@hoegh HOEGH]$

5.手动切换重做日志文件组

为了确保新建的日志文件组可用,我们可以手动切换日志文件组,改变新建日志文件组的状态(由 UNUSED改为其他)。

点击(此处)折叠或打开

  1. SQL>

  2. SQL> alter system switch logfile;

  3.  

  4. System altered.

  5.  

  6. SQL> select group#,sequence#,archived,status from v$log;

  7.  

  8.     GROUP# SEQUENCE# ARC STATUS

  9. ---------- ---------- --- ----------------

  10.          1 9 NO CURRENT

  11.          2 8 NO ACTIVE

  12.          3 6 NO INACTIVE

  13.  

  14. SQL> alter system switch logfile;

  15.  

  16. System altered.

  17.  

  18. SQL> select group#,sequence#,archived,status from v$log;

  19.  

  20.     GROUP# SEQUENCE# ARC STATUS

  21. ---------- ---------- --- ----------------

  22.          1 9 NO ACTIVE

  23.          2 8 NO ACTIVE

  24.          3 10 NO CURRENT

  25.  

  26. SQL> alter system switch logfile;

  27.  

  28. System altered.

  29.  

  30. SQL> select group#,sequence#,archived,status from v$log;

  31.  

  32.     GROUP# SEQUENCE# ARC STATUS

  33. ---------- ---------- --- ----------------

  34.          1 9 NO INACTIVE

  35.          2 11 NO CURRENT

  36.          3 10 NO INACTIVE

  37.  

  38. SQL>
其中,
current:表示该日志组为当前日志组,oracle正在使用该日志组;
active:当current redo组发生日志切换时,状态会改变为active,在这个状态下,如果 数据库为归档模式,archive进程会归档active日志组;如果发生数据库crash,该日志组也是实例恢复必需的日志组;
inactive:当active日志组归档完毕并且oracle判断不需要进行实例恢复时,会将其状态修改为inactive,等待下一轮的使用;所以当日志组为inactive的时候,如果数据库为归档模式.那么日志肯定是归档完成了。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30162081/viewspace-1727538/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/30162081/viewspace-1727538/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值