oracle的重做日志的管理

 

目录

重做日志的概念

添加重做日志组

查看添加日志组

添加一个重做日志组并向日志组中添加3个日志成员

查询当前重做日志组的使用情况

删除联机重做日志组

验证日志组4的成员是否删除

验证日志组4是否删除

添加重做日志成员

验证日志组的成员数结果

删除连接重做日志成员

查询当前的重做日志组信息

删除该重做日志组。

清除连接重做日志

日志切换和检查点

归档重做日志


 


重做日志的概念

oracle要求最少重做日志组,每个日志至少一个日志成员,而在生产数据库中至少需要3个重做日志组,而每个重做日志组需要多于3日志成员,这些日志成员最好部署在不同磁盘的不同目录下,由于重做日志文件在数据库恢复中的重要性,分布式部署的目的就是为了防止磁盘损坏造成的重做日志失效。


添加重做日志组


SQL> alter database add LOGFILE group 4
  2  ('/tmp/redo04c.log',        
  3  '/tmp/redo04d.log')
  4  size 11M;

数据库已更改。

向当前数据库添加一个重做日志组,日志组号为4,如果不选择group参数,则默认在原有重做日志组号的基础上自动增长,如原来最大的日志组合为2,则此时新建的默认组号为3等,依次类推。在日志租4中有两个日志1成员,大小都为11MB.

查看添加日志组


SQL> select * from v$logfile;

    GROUP# STATUS  TYPE
---------- ------- -------
MEMBER
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
IS_
---
     2       ONLINE
/u01/app/oracle/fast_recovery_area/XE/onlinelog/o1_mf_2_fmn2jb0v_.log
YES

     1       ONLINE
/u01/app/oracle/fast_recovery_area/XE/onlinelog/o1_mf_1_fmn2j7kv_.log
YES

     4       ONLINE
/tmp/redo04c.log
NO

     4       ONLINE
/tmp/redo04d.log
NO


添加一个重做日志组并向日志组中添加3个日志成员


SQL> alter database add logfile
  2  ('/tmp/redo1.log',
  3  '/tmp/redo2.log')
  4  size 11 M;

数据库已更改。
SQL> select * from v$logfile;

    GROUP# STATUS  TYPE
---------- ------- -------
MEMBER
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
IS_
---
     2       ONLINE
/u01/app/oracle/fast_recovery_area/XE/onlinelog/o1_mf_2_fmn2jb0v_.log
YES

     1       ONLINE
/u01/app/oracle/fast_recovery_area/XE/onlinelog/o1_mf_1_fmn2j7kv_.log
YES

     4       ONLINE
/tmp/redo04c.log
NO

     4       ONLINE
/tmp/redo04d.log
NO

     3       ONLINE
/tmp/redo1.log
NO

     3       ONLINE
/tmp/redo2.log
NO


查询当前重做日志组的使用情况


SQL> select group#,sequence#,bytes,members,archived,status from v$log;

    GROUP#  SEQUENCE#       BYTES    MEMBERS ARC STATUS
---------- ---------- ---------- ---------- --- ----------------
     1        7    52428800      1 NO    CURRENT
     2        6    52428800      1 YES INACTIVE
     3        0    11534336      2 YES UNUSED
     4        0    11534336      2 YES UNUSED

重做日志组4是先建的重做日志组,状态为UNUSED未使用,重做日志组4有2个日志成员,每个成员的大小为11534336个字节,

删除联机重做日志组


SQL> alter database drop logfile group 4;

数据库已更改。


验证日志组4的成员是否删除


SQL> select * from v$logfile;

    GROUP# STATUS  TYPE
---------- ------- -------
MEMBER
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
IS_
---
     2       ONLINE
/u01/app/oracle/fast_recovery_area/XE/onlinelog/o1_mf_2_fmn2jb0v_.log
YES

     1       ONLINE
/u01/app/oracle/fast_recovery_area/XE/onlinelog/o1_mf_1_fmn2j7kv_.log
YES

     3       ONLINE
/tmp/redo1.log
NO

     3       ONLINE
/tmp/redo2.log
NO

验证日志组4是否删除


SQL> select group#,sequence#,bytes,members,archived,status from v$log;
 GROUP#  SEQUENCE#       BYTES    MEMBERS ARC STATUS
---------- ---------- ---------- ---------- --- ----------------
     1        7    52428800      1 NO    CURRENT
     2        6    52428800      1 YES INACTIVE
     3        0    11534336      2 YES UNUSED
主义使用指令删除重做日志组会留下垃圾文件,也就是在删除了重做日志组后,作为重做日志成员的操作系统文件还存在,需要手动删除。

添加重做日志成员


在每个重做日志组至少要有一个日志成员,但是为了防止单点失效的发生,最好多设置几个重做日志成员,并存储在不同1的磁盘空间中这样的冗余设置可以集大地提高重做日志文件的可靠性。
SQL> alter database add LOGFILE member
  2  '/tmp/read011.log' to group 3;

数据库已更改。

验证日志组的成员数结果


SQL> select group#,sequence#,bytes,members,archived,status from v$log;

    GROUP#  SEQUENCE#       BYTES    MEMBERS ARC STATUS
---------- ---------- ---------- ---------- --- ----------------
     1        7    52428800      1 NO    CURRENT
     2        6    52428800      1 YES INACTIVE
     3        0    11534336      3 YES UNUSED
验证添加的重做日志组以及对应成员信息
SQL> select * from v$logfile order by group#;

    GROUP# STATUS  TYPE
---------- ------- -------
MEMBER
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
IS_
---
     1       ONLINE
/u01/app/oracle/fast_recovery_area/XE/onlinelog/o1_mf_1_fmn2j7kv_.log
YES

     2       ONLINE
/u01/app/oracle/fast_recovery_area/XE/onlinelog/o1_mf_2_fmn2jb0v_.log
YES

     3       ONLINE
/tmp/redo1.log
NO

     3       ONLINE
/tmp/redo2.log
NO

     3 INVALID ONLINE
/tmp/read011.log
NO

删除连接重做日志成员


重做日志维护就是删除和重建重做日志的过程,对于一个损坏的重做日志,如果没有及时使得日志切换时无法成功,则数据库最终会挂起,一旦出现重做日志文件受损的情况就要及时修复,也就是删除掉该文件,然后重建。
SQL> alter database drop logfile member '/tmp/redo2.log';

数据库已更改。
SQL> select * from v$logfile where group# =3;

    GROUP# STATUS  TYPE
---------- ------- -------
MEMBER
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
IS_
---
     3 INVALID ONLINE
/tmp/read011.log
NO

     3       ONLINE
/tmp/redo1.log
NO
在删除日志成员时,并不是所有的重做日志成员都可以删除,oracle有一些限制条件。执行删除操作的一些限制如下:
如果要删除日志成员是重做日志组中最后一个有效的成员,则不能删除,如该日志组中只有一个日志成员。
如果该日志组当前正在使用,在日志切换前不能删除该组的成员。
如果数据库正在运行在ARCHIVELOG模式,并且要删除的日志成员所属的日志组没有被归档,该组中的日志成员不能被删除。


查询当前的重做日志组信息


SQL> select group#,sequence#,bytes,members,status from v$log;

    GROUP#  SEQUENCE#       BYTES    MEMBERS STATUS
---------- ---------- ---------- ---------- ----------------
     1        7    52428800      1 ACTIVE
     2        6    52428800      1 INACTIVE
     3        8    11534336      2 CURRENT

删除该重做日志组。


服务器正在使用当前的重做日志的时候,是不能删除的,需要提前把当前使用的日志切换到另一个组上并且处于UNUSED,才可以进行删除。

SQL> select group#,bytes,members,status from v$log;

    GROUP#    BYTES     MEMBERS STATUS
---------- ---------- ---------- ----------------
     1   52428800           1 ACTIVE
     2   52428800           1 ACTIVE
     3   11534336           2 ACTIVE
     4   11534336           1 CURRENT

SQL> alter system switch logfile;

系统已更改。

SQL> select group#,bytes,members,status from v$log;

    GROUP#    BYTES     MEMBERS STATUS
---------- ---------- ---------- ----------------
     1   52428800           1 CURRENT
     2   52428800           1 ACTIVE
     3   11534336           2 ACTIVE
     4   11534336           1 ACTIVE

SQL> alter database drop LOGFILE group 4;
alter database drop LOGFILE group 4
*
第 1 行出现错误:
ORA-01623: 日志 4 是实例 XE (线程 1) 的当前日志 - 无法删除 ORA-00312:
联机日志 4 线程 1: '/tmp/redo33.log'

重做日志组4处于ACTIVE状态,是不能删除的,要删除此时需要强制加入一个检查点,其格式为alter system checkpoint;

使得删除的重做日志组处于INACTIVE状态,因为强制检查点使得DBWR将保存在联机重做日志中已经变化的内容写到数据文件中。还可以清楚unarchived 字段

SQL> alter system checkpoint; 或者

SQL> alter database clear unarchived logfile group 4;

数据库已更改。

SQL> select group#,bytes,members,status from v$log;

    GROUP#    BYTES     MEMBERS STATUS
---------- ---------- ---------- ----------------
     1   52428800           1 CURRENT
     2   52428800           1 INACTIVE
     3   11534336           2 INACTIVE
     4   11534336           1 UNUSED

SQL> alter database drop LOGFILE group 4;

数据库已更改。

SQL> select group#,bytes,members,status from v$log;

    GROUP#    BYTES     MEMBERS STATUS
---------- ---------- ---------- ----------------
     1   52428800           1 CURRENT
     2   52428800           1 INACTIVE
     3   11534336           2 INACTIVE

清除连接重做日志

在数据库服务器处于归档(ARCHIVELOG)模式时,如果当前正在使用的重做日志组中的重做日志文件损坏,则该重做日志不能完成归档,使得数据库因无法归档而挂起,在这种情况下,需要清除联机重做日志来重新初始化联机重做日志文件。

SQL> alter database clear LOGFILE group 3;

数据库已更改。

SQL> select group#,bytes,members,status from v$log;

    GROUP#    BYTES     MEMBERS STATUS
---------- ---------- ---------- ----------------
     1   52428800           1 INACTIVE
     2   52428800           1 INACTIVE
     3   11534336           2 UNUSED
     4   11534336           1 CURRENT

在使用清除联机重做日志文件指令后,已经删除的重做日志组中重做日志的序列号变为0,所以此时需要做数据库备份的全备份,因为oracle在进行数据库恢复时,需要连续的序列号。

日志切换和检查点

在一组重做日志组写满时,或用户发出alter database switch logfile时,就会触发日志切换,此时orcale寻找下一个可用的重做日志组,如果数据库处于归档模式,则在当前写满的日志组归档完成前不会使用新的重做日志组。检查点事件是orcale为了减少数据库实例恢复时间而设置的一个事件,当该事件发生时,LGWR进程将重做日志缓冲区中的数据写入重做日志文件中,而同时通知DBWR进程将数据库高速缓存中的已经提交的数据写入数据文件,所有检查点事件越频繁则用于数据库恢复的重做数据就越少。此时,检查点事件也会修改数据文件头信息和控制文件信息以记录检查点的SCN。
SQL> alter system checkpoint;

归档重做日志

归档重做日志就是联机重做日志的脱机备份,在数据库服务器处于归档模式时,发生日志切换时,数据库的归档进程ARCH把重

做日志文件中的数据移动到归档重做日志中。归档进程在数据库服务器运行期间并不是总是存在的,而是当满足一定条件(如一组重做日志文件写满)时启动归档进程。一旦归档完毕,归档进程自动关闭。

归档日志文件存储在存储在参数文件SPFILE或init.ora文件中参数指定的位置,在inti.ora文件中该参数为log_archive_dest_n。

oracle只能把重做日志中的数据移动到磁盘上,而不能移动的磁盘等存储介质上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值