以下笔记是今天下午一位朋友碰到日志文件删除后数据库不能启动的问题,然后查资料一起解决后,再整理出来的。

所有步骤或命令都是参考网上或书上资料,我只是加以整理,如有错误请大家指证,如有用处,请帮忙顶,谢谢!

重做日志文件损坏的恢复笔记:

一、归档模式下的重做日志文件的恢复

二、非归档模式下的重做日志文件的恢复

如果是日志文件所在的磁盘或路径已不可用,可参考文后命令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状态的损坏了如何恢复呢?

以上笔记是今天下午一位朋友碰到日志文件删除后数据库不能启动的问题,然后查资料一起解决后,再整理出来的。

所有步骤或命令都是参考网上或书上资料,我只是加以整理,如有错误请大家指证,如有用处,请帮忙顶,谢谢!

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐