联机日志文件Inacitve状态表示这个日志包含的数据修改已经同步到数据文件中,实例恢复时已不需要它,所以它的丢失不会造成任何的数据丢失,但是会造成数据库无法打开,解决方法是把丢失的inactive删除掉,重新添加新的联机日志。
1)模拟灾难
首先查看log的状态:
SQL> select group#,sequence#,status from v$log;
GROUP# SEQUENCE# STATUS
---------- ---------- ----------------
1 1 INACTIVE
2 2 INACTIVE
3 3 CURRENT
Group#1的状态为inactive,我们找出它所对应的磁盘文件:
SQL> select group#,member from v$logfile where group#=1;
GROUP# MEMBER
---------- --------------------------------------------------
1 I:\INTEL_DATA\O04DMS0\REDO01.O04DMS0
关闭数据库:
SQL> shutdown immediate;
把REDO01.O04DMS0文件在操作系统级别删除。
2)根据错误信息定位问题
启动数据库会出现以下错误:
SQL> startup
ORACLE instance started.
Total System Global Area 281018368 bytes
Fixed Size 1296292 bytes
Variable Size 251660380 bytes
Database Buffers 25165824 bytes
Redo Buffers 2895872 bytes
Database mounted.
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: 'I:\INTEL_DATA\O04DMS0\REDO01.O04DMS0'
从以上错误信息中,可以看到联机日志文件丢失导致无法打开数据库,查一下丢失日志的状态:
SQL> select group#,sequence#,status from v$log where group#=1;
GROUP# SEQUENCE# STATUS
---------- ---------- ----------------
1 1 INACTIVE
幸运地是,丢失的联机日志状态为inactive,那么我们不需要做什么,只要删除它即可,但是最好在删除它之前先增加一组联机日志:
SQL> alter database add logfile group 4 ('I:\INTEL_DATA\O04DMS0\REDO04.O04DMS0') size 100M;
Database altered.
然后把丢失的联机日志删除:
SQL> alter database drop logfile group 1;
Database altered.
SQL> select group#,sequence#,status from v$log;
GROUP# SEQUENCE# STATUS
---------- ---------- ----------------
2 2 INACTIVE
4 0 UNUSED
3 3 CURRENT
这样就可以打开数据库了:
SQL> alter database open;
Database altered.
新增加的Group#4的状态时unused,做几次日志切换使其处于current状态。
===========================
还有一种解决方法更简单,不用删除、增加,直接清除Group1即可,语句如下:
SQL> alter database clear logfile group 1;
1)模拟灾难
首先查看log的状态:
SQL> select group#,sequence#,status from v$log;
GROUP# SEQUENCE# STATUS
---------- ---------- ----------------
1 1 INACTIVE
2 2 INACTIVE
3 3 CURRENT
Group#1的状态为inactive,我们找出它所对应的磁盘文件:
SQL> select group#,member from v$logfile where group#=1;
GROUP# MEMBER
---------- --------------------------------------------------
1 I:\INTEL_DATA\O04DMS0\REDO01.O04DMS0
关闭数据库:
SQL> shutdown immediate;
把REDO01.O04DMS0文件在操作系统级别删除。
2)根据错误信息定位问题
启动数据库会出现以下错误:
SQL> startup
ORACLE instance started.
Total System Global Area 281018368 bytes
Fixed Size 1296292 bytes
Variable Size 251660380 bytes
Database Buffers 25165824 bytes
Redo Buffers 2895872 bytes
Database mounted.
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1: 'I:\INTEL_DATA\O04DMS0\REDO01.O04DMS0'
从以上错误信息中,可以看到联机日志文件丢失导致无法打开数据库,查一下丢失日志的状态:
SQL> select group#,sequence#,status from v$log where group#=1;
GROUP# SEQUENCE# STATUS
---------- ---------- ----------------
1 1 INACTIVE
幸运地是,丢失的联机日志状态为inactive,那么我们不需要做什么,只要删除它即可,但是最好在删除它之前先增加一组联机日志:
SQL> alter database add logfile group 4 ('I:\INTEL_DATA\O04DMS0\REDO04.O04DMS0') size 100M;
Database altered.
然后把丢失的联机日志删除:
SQL> alter database drop logfile group 1;
Database altered.
SQL> select group#,sequence#,status from v$log;
GROUP# SEQUENCE# STATUS
---------- ---------- ----------------
2 2 INACTIVE
4 0 UNUSED
3 3 CURRENT
这样就可以打开数据库了:
SQL> alter database open;
Database altered.
新增加的Group#4的状态时unused,做几次日志切换使其处于current状态。
===========================
还有一种解决方法更简单,不用删除、增加,直接清除Group1即可,语句如下:
SQL> alter database clear logfile group 1;
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26277071/viewspace-711641/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/26277071/viewspace-711641/