联机日志文件丢失解决方法


非归档模式的当前联机日志文件的丢失。

    由于丢失的当前的联机日志文件,所以可能会丢失部分数据,破坏数据库的完整性,而且普通的重建
日志文件的方式是不可行的,这个时候我们需要借助隐含参数_ALLOW_READ_ONLY_CORRUPTION或者
_ALLOW_RESETLOGS_CORRUPTION打开数据库。打开完数据库后立即用EXP/EXPDP导出数据,然后重建数据库。如果有备份,我们可以考虑借助备份恢复,但是由于数据库处于非归档模式,即使是备份也是数据库某
一个时间点的快照,所以会丢失从备份时间点到现在的数据。当然用隐含参数打开数据库,会破坏数据库的完整性。
SQL> SELECT NAME,OPEN_MODE,LOG_MODE FROM V$DATABASE;
NAME      OPEN_MODE  LOG_MODE
--------- ---------- ------------
TOMSYAN   READ WRITE NOARCHIVELOG
SQL> SELECT GROUP#,SEQUENCE#,STATUS FROM V$LOG;
    GROUP#  SEQUENCE# STATUS
---------- ---------- ----------------
         1        106 INACTIVE
         2        104 INACTIVE
         3        107 CURRENT
SQL> SELECT MEMBER FROM V$LOGFILE WHERE GROUP#=3;
MEMBER
--------------------------------------------------------------------------------
C:\ORACLE\PRODUCT\10.2.0\ORADATA\TOMSYAN\REDO03.LOG
SQL> SHUTDOWN IMMEDIATE
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> HOST DEL C:\ORACLE\PRODUCT\10.2.0\ORADATA\TOMSYAN\REDO03.LOG
SQL> STARTUP
ORACLE 例程已经启动。
Total System Global Area  612368384 bytes
Fixed Size                  1250428 bytes
Variable Size             239078276 bytes
Database Buffers          364904448 bytes
Redo Buffers                7135232 bytes
数据库装载完毕。
ORA-00313: 无法打开日志组 3 (用于线程 1) 的成员
ORA-00312: 联机日志 3 线程 1:
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\TOMSYAN\REDO03.LOG'

SQL> SELECT GROUP#,SEQUENCE#,STATUS FROM V$LOG;
    GROUP#  SEQUENCE# STATUS
---------- ---------- ----------------
         1        106 INACTIVE
         3        107 CURRENT
         2        104 INACTIVE
SQL> ALTER DATABASE CLEAR LOGFILE GROUP 3;
ALTER DATABASE CLEAR LOGFILE GROUP 3
*
第 1 行出现错误:
ORA-00313: 无法打开日志组 3 (用于线程 1) 的成员
ORA-00312: 联机日志 3 线程 1:
'C:\ORACLE\PRODUCT\10.2.0\ORADATA\TOMSYAN\REDO03.LOG'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
 
即使日志文件存在,如果日志文件损坏,重建当前的日志文件也不可行。

利用隐含参数_ALLOW_READ_ONLY_CORRUPTION打开数据库

SQL> ALTER SYSTEM SET "_ALLOW_READ_ONLY_CORRUPTION"=TRUE SCOPE=SPFILE;
系统已更改。
SQL> SHUTDOWN IMMEDIATE;
ORA-01109: 数据库未打开

已经卸载数据库。
ORACLE 例程已经关闭。
SQL> STARTUP MOUNT
ORACLE 例程已经启动。
Total System Global Area  612368384 bytes
Fixed Size                  1250428 bytes
Variable Size             239078276 bytes
Database Buffers          364904448 bytes
Redo Buffers                7135232 bytes
数据库装载完毕。
SQL> ALTER DATABASE OPEN READ ONLY;
数据库已更改。
SQL> SELECT NAME,OPEN_MODE,LOG_MODE FROM V$DATABASE;
NAME      OPEN_MODE  LOG_MODE
--------- ---------- ------------
TOMSYAN   READ ONLY  NOARCHIVELOG
 
这种以只读方法打开的数据库,并不会重建当前的日志文件,优点不会对当前的数据文件造成破坏。

赶紧导出数据库吧。
 
利用隐含参数_ALLOW_RESETLOGS_CORRUPTION打开数据库
SQL> ALTER SYSTEM RESET "_ALLOW_READ_ONLY_CORRUPTION" SCOPE=SPFILE SID='*';
系统已更改。
SQL> ALTER SYSTEM SET "_ALLOW_RESETLOGS_CORRUPTION"=TRUE SCOPE=SPFILE;
系统已更改。

SQL> SHUTDOWN IMMEDIATE
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> STARTUP MOUNT
ORACLE 例程已经启动。
Total System Global Area  612368384 bytes
Fixed Size                  1250428 bytes
Variable Size             239078276 bytes
Database Buffers          364904448 bytes
Redo Buffers                7135232 bytes
数据库装载完毕。
下面需要做一次 media recover 不要OPEN 或者直接OPEN RESETLOGS方式打开数据库。
SQL> RECOVER DATABASE UNTIL CANCEL;
完成介质恢复。
SQL> ALTER DATABASE OPEN RESETLOGS;
数据库已更改。
 
如果 OPEN 方式打开数据库 会有下面的错误
SQL> ALTER DATABASE OPEN ;
ALTER DATABASE OPEN
*
第 1 行出现错误:
ORA-03113: 通信通道的文件结束
如果 OPEN RESETLOGS 方式打开数据库 会有下面的错误
SQL> ALTER DATABASE OPEN RESETLOGS;
ALTER DATABASE OPEN RESETLOGS
*
第 1 行出现错误:
ORA-01139: RESETLOGS 选项仅在不完全数据库恢复后有效。
   通过这种方法打开数据库,Oracle会重建日志文件。
通过隐含参数打开数据库,Oracle会跳过数据库的一致性检查,对数据库造成一定的负面影响。这个时候
我们应该立即导出数据,重建个空数据库,然后再导入,以防数据库以后遇到麻烦。

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

转载于:http://blog.itpub.net/28894640/viewspace-765037/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值