Oracle 删除重做日志
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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;
数据库已更改。
注 意
如果被清空的重做日志组没有被归档,则有可能造成数据丢失。