当前位置:文档之家› Oracle 删除重做日志

Oracle 删除重做日志

Oracle 删除重做日志
当日志成员出现损坏或丢失时,后台进程LGWR不能将事务变化写入到该日志成员中,在这种情况下应该删除该日志成员;当日志组尺寸不合适时,需要重新建立新日志组,并删除原有的日志组。

删除重做日志是使用ALTER DATABASE语句来完成的,执行该语句要求数据库用户必须具有ALTER DATABASE系统权限。

1.删除日志成员
要删除一个成员日志文件,只需要使用带DROP LOGFILE MEMBER子句的ALTER DA TABASE语句。

例如,下面的语句将删除4号日志组的第2个成员:
SQL> alter database drop logfile member
2 'e:\oradata\orcl\redo04b.log';
数据库已更改。

上面语句只是在数据字典和控制文件中将重做日志成员的信息删除,并不会在操作系统中物理地删除相应的文件,这需要确认删除成功后手工在操作系统中删除文件。

2.删除日志组
由于已经存在日志组的尺寸不能改变,所以当日志组尺寸不合适时,就需要重新建立日志组并指定合适尺寸,然后删除不符合尺寸要求的日志组。

在删除一个日志组时,其中的成员文件也将全部被删除。

在删除日志组时,首先需要考虑如下几点:
●无论日志组中有多少个成员,一个数据库至少需要两个日志组。

●只能删除处于INACTIVE状态的日志组。

如果要删除CURRENT状态的重做日志
组,则必须执行一个手工切换日志,将它切换到INACTIVE状态。

●如果数据库处于归档模式下,在删除重做日志组之前必须确定它已经被归档。

因此,在删除重做日志组之前,可以查询V$LOG动态性能视图来获知各个重做日志组的状态以及它是否已经归档。

例如:
SQL> select group#,archived,status from v$log;
GROUP# ARC STATUS
---------- --- ----------------
1 NO CURRENT
2 NO INACTIVE
3 NO INACTIVE
4 YES UNUSED
要删除一个重做日志组,需要使用带有DROP LOGFILE子句的ALTER DATABASE语句。

例如,下面的语句可以删除4号重做日志组:
SQL> alter database drop logfile group 4;
同样,该语句只是在数据字典和控制文件中将重做日志组的记录信息删除,并不会物理地删除操作系统中相应的文件,这需要手工在操作系统中将相应的文件删除。

3.清空重做日志组
清空重做日志文件就是将重做日志文件中的内空全部初始化,这相当于删除该重做日志文件,然后再重新建立它。

即使数据库只拥有两个重做日志组,或者要清空的重做日志组正处理CURRENT状态,在这些状态下都可以成功执行清空操作。

要清空一个重做日志组,需要使用带有CLEAR LOGFILE 子句的ALTER DATABASE 语句。

例如,下面的语句将清空3号重做日志组:
SQL> alter database clear logfile group 3;
数据库已更改。

如果要清空的重做日志组尚未归档,则必须在ALTER DA TABASE 语句中指定UNARCHIVED 子句,例如:
SQL> alter database clear unarchived logfile group 3;
数据库已更改。

注 意
如果被清空的重做日志组没有被归档,则有可能造成数据丢失。

相关主题