Oracle重做日志文件clear logfile与clear unarchived logfile浅析

首先,从v$log动态视图中观察到ARC和STATUS两个字段

STATUS:分为CURRENT、ACTIVE和INACTIVE三种,当数据库进程DBWn进行一次写入,脏数据从内存刷写到redo logfile中,这时承载数据写入的redo logfile状态即为CURRENT;而数据从redo logfile拷贝到归档目录下时处于ACTIVE状态,完成数据从内存到硬盘的归档,redo logfile被重新置于INACTIVE状态下,循环往复。

ARCHIVED: 有YES和NO两种状态。分别表示对应重做日志组成员上的数据是否已经完成归档。没有完成归档的重做日志文件,在进行数据库恢复的时候可能需要用到。 

下面使用案例来说明clear logfile与clear unarchived logfile的区别

当数据库的重做日志文件仅为两组时,不能通过删除和添加的方法来重建日志文件;这时只能清除重做日志文件

1、当前处于CURRENT状态的重做日志文件,包含了未归档的数据,未切换之前,不能进行删除和清除

2、ACTIVE状态的重做日志文件,已完成归档

SQL> select group#,thread#,archived,status from v$log;

GROUP# THREAD# ARC STATUS
---------- ---------- --- ----------------
1 1 YES INACTIVE
2 1 YES ACTIVE
3 1 NO CURRENT
4 1 YES INACTIVE
5 1 YES INACTIVE

SQL> alter database clear unarchived logfile group 2;

Database altered.

SQL> select group#,thread#,archived,status from v$log;

GROUP# THREAD# ARC STATUS
---------- ---------- --- ----------------
1 1 YES INACTIVE
2 1 YES UNUSED
3 1 NO CURRENT
4 1 YES INACTIVE
5 1 YES INACTIVE

 

3、INACTIVE状态的重做日志文件,已完成归档

SQL> select group#,thread#,archived,status from v$log;

GROUP# THREAD# ARC STATUS
---------- ---------- --- ----------------
1 1 NO CURRENT
2 1 YES ACTIVE
3 1 YES ACTIVE
4 1 YES INACTIVE
5 1 YES INACTIVE

SQL> alter database clear logfile group 5;

Database altered.

SQL> select group#,thread#,archived,status from v$log;

GROUP# THREAD# ARC STATUS
---------- ---------- --- ----------------
1 1 NO CURRENT
2 1 YES UNUSED
3 1 YES INACTIVE
4 1 YES INACTIVE
5 1 YES UNUSED

 

总结:clear logfile 只能用于重建未处于活动状态的重做日志文件,当不能通过删除和新增的方式来重建日志文件,这是一种非常重要的处理手段;而清除ACTIVE状态的重做日志,要使用clear unarchived logfile方式,若日志文件不能正常归档,是不能清除的。

posted @ 2024-03-28 11:58  Tarvin  阅读(274)  评论(0)    收藏  举报