通常对重做日志的维护和修复是通过将有问题的重做日志文件组和组成员删除掉,然后重建之。但是在某些情况下不能通过这种方式来实现。如:数据库只有两个重做日志组、崩溃的重做日志文件属性当前重做日志组。在这种情况下如果数据库是开启的,由于一个联机重做日志文件崩溃导致归档过程不能进行,最终导致数据库的挂起。此时可以使用如下命令来重新初始化联机重做日志文件:
alter database clear logfile group 组号;
如果崩溃的重做日志文件已经不能归档,可以使用unarchived关键字来清除已崩溃的重做日志文件,从而避免对他们进行归档。
alter database clear unarchived logfile group 组号;
注:当oracle服务器执行了以上的任何一条命令后,oracle以前的备份都将变为无用。所以在执行以上的命令之前应该对数据库做一个全备份。
以上的命令是清除重做日志文件的内容,重新初始化重做日志文件,并不是删除重做日志文件。
清除联机重做日志文件的步骤:
一、为了安全起见首先为数据库做一个脱机的全备份(在对数据库做任何危险操作之前都应该做一个脱机的全备份)。备份的主要文件包括:控制文件、数据文件、重做日志文件、初始化参数文件、口令文件
1、获取控制文件的文件绝对路径
select status,name from v$controlfile;
2、获得数据文件的存储路径:
select file#,creation_time,status,name from v$datafile;
3、获得重做日志文件的存储路径:
select group#,member,status,type from v$logfile;
4、获得口令文件和初始化参数文件的存储路径:
show parameter pfile;
二、关闭数据库shutdown:
对数据库全备份时必须关闭数据库才能保证利用备份文件恢复数据库时是数据库的完全恢复,否则会造成数据库的丢失或者覆盖。
三、使用操作系统的指令把相关文件备份到指定的目录下:
1、备份控制文件:
host copy D:\\app\Administrator\oradata\orclyg\*.CTL D:\backup\control\;
2、备份数据文件
host copy D:\\app\Administrator\oradata\orclyg\*.DBF D:\backup\datafile\;
3、备份重做日志文件
host coyp D:\\app\Administrator\oradata\orclyg\*.LOG D:\backup\redo\;
4、备份参数文件和口令文件
host coyp oracle_home\database\* D:\backup\parameter\;
四、启动数据库startup
五、使用v$log、v$logfile数据字典查看重做日志组和重做日志组成员的详细信息
select group#,sequence#,members,bytes,arc from v$log;
查看每个重做日志组的序列号,确定所有的序列号是连续的,因为oracle在执行数据库恢复时要求重做日志组的序列号必须是连续的,否则不能恢复。同时查看当前的归档组。
六、使用指令清除目标重做日志组
alter database clear logfile group 3;
七、查看重做日志组和组成员信息
从v$log数据字典中显示的sequence表明被重新初始化的日志组序列号为0不再是与原来连续的,并且status显示为unused
八、应该再次关闭数据库做一个数据库的全备份。
多次使用切换日志组指令后alter system switch logfile,再使用v$log,v$logfile数据字典查看重做日志组和成员都显示正常的状态,同时成员组序列号变为连续的。
这样如果要恢复数据库时因为在clear之前已经把目标成员文件中 的内容归档了,故在数据恢复时是从归档日志文件中恢复数据的。所以不会造成数据的丢失现在,重新恢复的数据库仍然是截至到关闭数据库时最新的数据库。clear操作只是完成对组成员文件的重新初始化。
综述:经过上述操作主要 完成的就是把重做日志组和组成员重新初始化,清空原来的内容并归档之。