以下笔记是今天下午一位朋友碰到日志文件删除后数据库不能启动的问题,然后查资料一起解决后,再整理出来的。
所有步骤或命令都是参考网上或书上资料,我只是加以整理,如有错误请大家指证,如有用处,请帮忙顶,谢谢!
重做日志文件损坏的恢复笔记:
一、归档模式下的重做日志文件的恢复
二、非归档模式下的重做日志文件的恢复
如果是日志文件所在的磁盘或路径已不可用,可参考文后命令G
一、-----归档模式下的重做日志文件的恢复
1、如果日志文件为非当前状态,且已归档成功。
a.群组中有其他日志文件,copy其他日志文件恢复。
b.无其他日志文件,使用SQL>alter database clear logfile group 群组序号;重建该日志文件。
2、如果日志文件为当前状态,且未归档成功。
a.如该群组有多个日志文件,是否可以先 shutdown abort,再copy另外的日志文件恢复呢?
b.如果该群组中无多个日志文件
使用SQL>alter database clear unarchived logfile group 群组序号;强制重建该日志文件。
b.1如果强制重建不成功
可以采用获取最近的SCN的办法用until scn恢复或用until cnacel恢复
recover database until cancel
先选择auto,尽量恢复可以利用的归档日志,然后重新
recover database until cancel
这次输入cancel,完成不完全恢复,也就是说恢复两次。
如:
SQL> recover database until cancel;
Auto
……
SQL> recover database until cancel;
Cancel;
5、利用alter database open resetlogs打开数据库。
然后关闭数据库,做冷备份。
二、------非归档模式下重做日志文件的恢复
1、和2.a步骤应该相同。
2.b、如果使用SQL>alter database clear unarchived logfile group 群组序号;强制重建该日志文件。
不成功的情况
b.1、把数据库down掉
SQL>shutdown immediate
b.2、在init.ora中加入如下参数
_allow_resetlogs_corruption=TRUE
b.3、重新启动数据库,利用until cancel恢复
SQL>recover database until cancel;
Cancel
如果出错,不再理会,发出
SQL>alter database open resetlogs;
b.4、数据库被打开后,马上执行一个full export
b.5、shutdown数据库,去掉_all_resetlogs_corrupt参数
b.6、重建库
b.7、import并完成恢复
b.8、建议执行一下ANALYZE TABLE ...VALIDATE STRUCTURE CASCADE;
其他参考命令:
a.参看数据库是否运行在归档模式下
sql>ARCHIVE LOG LIST
查看database log mode参数的值。
b.将数据库更改为归档模式:(在数据库可关闭的情况下)
b.1修改pfile参数文件,添加以下标识:
log_archive_start=true (注:此参数保证数据库开启时自动进入存档模式)
log_archive_dest_1="LOCATION=$ORACLE_BASE/oradata/ora201/ch10/arch1"
log_archive_dest_2="LOCATION=$ORACLE_BASE/oradata/ora201/ch10/arch2"
log_archive_format=arch_%s.arc
log_archive_max_processes=2
b.2利用新的参数文件将数据库开启至mount状态。
b.3然后再执行
sql>alter database archivelog;
c.如果数据不能被关闭,可使用:alter system archive log start 切换到归档模式,但是下次重启数据库仍要执行一次。
D.如果数据库没有运行在自动归档模式,需要使用手动归档命令:
ALTER SYSTEM ARCHIVE LOG ALL
E.可查看V$log视图了解日志文件的归档状态:
SQL> select group#,sequence#,archived,status from v$log;
GROUP# SEQUENCE# ARC STATUS
---------- ---------- --- ----------------
1 54 YES INACTIVE
2 55 NO CURRENT
3 53 YES INACTIVE
F.日志切换命令:
ALTER SYSTEM SWITCH LOGFILE;
G.重命名日志文件群组
ALTER DATABASE ERNAME FILE
'/disk3/ora201/redo01.log'
TO '/disk4/oradata/redo01.log' ;
丢弃以前的日志文件
alter database drop logfile member ‘/disk3/ora201/redo01.log’
两个问题:
a.如该群组有多个日志文件,是否可以先 shutdown abort,再copy另外的日志文件恢复呢?
b.如果日志文件运行在active状态,执行日志切换后状态会不会改变呢?
active状态的损坏了如何恢复呢?
以上笔记是今天下午一位朋友碰到日志文件删除后数据库不能启动的问题,然后查资料一起解决后,再整理出来的。
所有步骤或命令都是参考网上或书上资料,我只是加以整理,如有错误请大家指证,如有用处,请帮忙顶,谢谢!