Oracle数据库:重做日志(Redo Log)、归档日志(Archivelog)、以及使用RMAN正确地删除归档日志(Archivelog)以及设置有备库的归档删除策略

在Oracle数据库中,归档日志(Archivelog)是与重做日志(Redo Log)是一同出现的概念,它们的协同作用,确保数据库在持续运行过程中能够有效地记录所有的数据修改操作。

重做日志(Redo Log)

  • 重做日志记录了对数据库所做的所有更改操作,包括插入、更新、删除等。这是确保数据持久性和事务一致性的重要组成部分。
  • 重做日志是由LGWR(Log Writer)进程从内存中的重做日志缓冲区(redo log buffer)定期写入到磁盘上的重做日志文件中。
  • 重做日志文件是循环使用的,一旦一个日志文件组写满,LGWR会开始写入下一个日志文件组。在非归档模式下(Oracle数据库安装后默认是“非归档模式”),当一个重做日志文件循环使用时,其中的信息会被覆盖;而在归档模式下,则会被归档。

非归档模式下,当一个重做日志文件填满后,这个重做日志文件会循环使用,意味着新的重做记录会覆盖该文件中较早的记录。换句话说,旧的重做信息在这个过程中会被丢弃或覆盖,不会被保存下来。这就简化了数据库的维护工作,但也带来了一个重要限制:如果数据库发生故障,只能恢复到最近一次的备份状态,而在此备份之后的所有数据库更改都将丢失。因此:非归档模式不适合对数据完整性和高可用性要求较高的生产环境,更适合于开发、测试等对数据丢失容忍度较高的环境。

归档日志(Archivelog)

  • 当数据库运行在归档模式(Archive Mode)下,重做日志文件在被重用前,其内容会被复制到归档日志文件中。这一过程称为归档。
  • 归档日志就是重做日志的副本,开启了归档日志,就提供了历史数据变化的完整记录,是进行数据库恢复和实现点-in-time恢复的基础。
  • 归档过程由ARCn(Archiver)进程自动完成,确保即使原始重做日志被覆盖,也能通过归档日志找回所有更改历史。
  • 数据库管理员需要配置归档目标路径,并确保足够的存储空间来保存归档日志。
  • 归档日志的管理对于维护数据库的可恢复性至关重要,尤其是在发生介质失败时,能够帮助数据库恢复到故障点的状态。

 

开启归档日志(ARCHIVELOG)模式:

参考“Oracle database 开启归档日志 archivelog

数据库在装载(MOUNT)模式下执行下列操作开启归档模式

ALTER DATABASE FORCE LOGGING;

ALTER DATABASE ARCHIVELOG;

 

归档日志状态查询,以及路径归档日志的存储位置

sqlplus / as sysdba

SQL> archive log list;

sqlplus / as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Mon Jun 17 10:38:11 2024
Copyright (c) 1982, 2016, Oracle.  All rights reserved.

Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> archive log list;
Database log mode	       Archive Mode
Automatic archival	       Enabled
Archive destination	       /data/app/oracle/product/12.2.0/db_1/dbs/arch
Oldest online log sequence     711
Next log sequence to archive   713
Current log sequence	       713
SQL>

 

归档日志(Archivelog)清理

参考阅读:RMAN正确地删除Archivelog以及设置有备库的归档删除策略

1、你可以直接使用RMAN删除archivelog日志。(可以同步删除关联关系以及归档日志文件)
在RMAN中是可以使用命令直接将ARCHIVELOG删除的,命令如下: 
RMAN> DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7'; 
表示删除7天以前的所有archivelog,但是这个命令的缺点是无法对archivelog进行细致的划分。 

#进入rman
rman target /

#清理7天以前的,或特定日期之前已完成的所有归档日志
RMAN> delete archivelog all completed before 'sysdate-7';
RMAN> delete archivelog all completed before '2023-10-16';

2、你还可以先删除归档日志文件后,再去Rman中清除记录中查不到的archivelog关联关系记录

使用RMAN来删除archivelog,具体可以按以下步骤操作: 
1、在主机 /data/app/oracle/product/12.2.0/db_1/dbs/arch路径下,删除不要的archivelog归档日志。 
2、进入RMAN rman target /
3、crosscheck archivelog all; 
4、delete expired archivelog all; 
这样就把那些在Oracle的记录中查不到的相应的archivelog记录删除了。

 

 

重做日志(Redo Log)的扩展阅读


重做日志(Redo Log)以循环方式工作,确保数据库在持续运行过程中能够有效地记录所有的数据修改操作。以下是重做日志循环方式的详细说明:

  1. 重做日志的作用
    • 重做日志用于记录数据库中所有的修改操作,包括插入、更新和删除操作。
    • 这些日志是物理恢复的基础,可以用来回滚未提交的事务和重放已提交的事务。
  2. 循环写入的机制
    • Oracle数据库中的重做日志是以循环写入的方式进行工作的。
    • 数据库通常配置有多个重做日志组(通常至少两个),每个日志组包含一个或多个重做日志文件。
    • 当一个重做日志组被写满后,LGWR(Log Writer)进程会开始写入下一个重做日志组。
    • 当所有的重做日志组都写满后,LGWR进程会重新开始写入第一个重做日志组,形成一个循环。
  3. 日志切换
    • 每当一个重做日志组写满时,或者通过发出switch logfile指令时,都会触发日志组的切换。
    • 在日志切换时,如果数据库处于归档模式(ARCHIVELOG模式),ARCH(归档写进程)会将当前的重做日志数据写入到归档日志文件中。
  4. 归档模式的影响
    • 在非归档模式(NOARCHIVELOG模式)下,当所有的重做日志组都写满后,新的写入会覆盖旧的重做日志数据。
    • 而在归档模式下,即使重做日志组被覆盖,旧的日志数据也会被保存在归档日志文件中,以供后续的恢复操作使用。
  5. 检查点操作
    • 在日志切换时,检查点操作也会发生。检查点操作是用来实现同步的,它会写数据文件的头信息和控制文件。
    • 这确保了数据文件和控制文件与重做日志的同步性,为数据库的恢复提供了保障。
  6. 查询重做日志状态
    • 可以通过查询v$log视图来获取重做日志组的状态信息,包括组号、序列号、成员数、大小、状态(如当前组、非活动组、活动组、未使用组)以及是否已归档等。
posted @ 2024-06-17 11:33  Magiclala  阅读(57)  评论(0编辑  收藏  举报