官方文档

Managing Archived Redo Log Files

开启归档日志

使用 Oracle 的 SQL Plus 工具查看当前归档路径:

1
archive log list;

示例:

1
2
3
4
5
6
SQL> archive log list;
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination /u01/app/oracle/product/12.1.0.2/dbhome_1/dbs/arch
Oldest online log sequence 3
Current log sequence 5

关闭数据库:

1
shutdown immediate;

启动至 mount 状态:

1
startup mount;

开启归档日志:

1
alter database archivelog;

开启数据库:

1
alter database open;

清理归档日志

清理归档日日志需要使用到 RMAN 这个工具。

RMAN 使用方法

1
2
3
RMAN NOCATALOG;

CONNECT TARGET;

其他相关命令

查看所有有效归档日志:

1
list archivelog all;

删除过期日志:

1
delete expired archivelog all; 

方法1:手动删除

可以手动删除已经归档好的日志文件,然后在 RMAN 中执行:

1
crosscheck archivelog all;

这个命令可以校验归档日志可用性,更新控制文件中的归档记录。

方法2:使用 RMAN 基于时间等格式清理

1
2
-- 清理到某天日期之前的归档
delete noprompt archivelog until time to_date('XXXX-XX-XX','YYYY-MM-DD');

方法3:清理 N 天之前的归档日志

1
DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7';

归档日志常见报错

1
ORA-00257: 归档程序错误。只有在解析完成后才以 AS SYSDBA 方式连接。
1
DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-60';

归档日志存放目录和大小限制

如果归档日志是存放在 recovery 地址中

归档日志占空间满了之后(达到 db_recovery_file_dest_size 上限之后),如果数据库开启了 ADR,Oracle 会一直记录 alert 日志,可能会导致 alert 日志爆满,可以清理日志文件,设置归档日志自动清理。

db_recovery_file_dest_size 修改大一点及删除归档日志 |转| - sumsen - 博客园

Oracle基本参数(DB_RECOVERY_FILE_DEST,DB_RECOVERY_FILE_DEST_SIZE) - 腾讯云开发者社区-腾讯云

ORA-19815: WARNING: db_recovery_file_dest_size is 100.00% used, and has 0 remaining bytes available. | SERHAT CELIK’S DATABASE BLOG

ORA-19815: WARNING: db_recovery_file_dest_size of bytes is used DBACLASS

ORACLE-BASE - Automatic Diagnostic Repository (ADR) in Oracle Database 11g Release 1 (ADRCI)

Oracle 数据库自动诊断库 ADR(Automatic Diagnostic Repository)简介 - 墨天轮

修改归档日志大小

How to Resize Redo Logs in Oracle - Ed Chen Logic

Oracle如何更改redo日志的大小_oracle 修改redo大小-CSDN博客

修改 Redo log BLOCKSIZE

报错 ORA-01378: 逻辑块大小 (4096) (属于文件 /opt/oracle/oradata/ORCL/redo04.log) 与磁盘扇区大小 (介质扇区大小为 512, 主机扇区大小为 512) 不兼容

执行下边的 SQL 后可以修改:

1
alter system set "_disk_sector_size_override"=TRUE scope=both;

Redo Log 4K Blocksize - Ask TOM

Deep Dive: Oracle with 4k Sectors | flashdba

Oracle Workloads and Redo Log Blocksize – 512 bytes or 4k blocksize for redo log (VMware 4k Sector support in the roadmap) - Virtualize Applications

Oracle 常规优化参数调整 – Cloud Architecture 云架构那些事儿

_DISK_SECTOR_SIZE_OVERRIDE | Prashant Atri Blog

ORA-01163: SIZE clause indicates 32768 (blocks), but should match header

A! Help: 4K Sector, compatible.rdbms and Redo Log File Block Size

从 512 改为 4096 之后,修改后,使用 LogMiner 测试解析单个文件,COUNT(*),速度没有特别明显的提升。

修改归档日志路径

Destinations can be local—within the local file system or an Oracle Automatic Storage Management (Oracle ASM) disk group—or remote (on a standby database). When you archive to multiple destinations, a copy of each filled redo log file is written to each destination. These redundant copies help ensure that archived logs are always available in the event of a failure at one of the destinations.

——Managing Archived Redo Log Files

归档路径可以设置几种目的地:

(1)local

(2)Oracle ASM

(3)remote (on a standby database)

(1)本地存储(local)

For local destinations, in addition to the local file system or an Oracle ASM disk group, you can archive to the Fast Recovery Area. The database uses the Fast Recovery Area to store and automatically manage disk space for a variety of files related to backup and recovery.

——Managing Archived Redo Log Files

本地存储的时候,除了可以保存到本地文件系统和 ASM,还可以设置保存到 Fast Recovery Area。

关于修改后是否立刻生效:

Any destination changes that you make take effect at the next log switch (automatic or manual).

——Managing Archived Redo Log Files

下次日志切换的时候就会生效。

归档日志强制切换

Oracle 数据库中的 ARCHIVE_LAG_TARGET 参数可以控制每隔多少时间执行一次日志切换。如果使用 LogMiner 只解析归档日志不解析在线日志的模式,可以设置该参数保证数据延迟可控。比如,如果源库低峰期数据变更频率很低,可能很久才会切换一次日志,在线日志中的这部分数据可能会读取不到,如果设置了该参数,那么每隔一段时间一定会切换一次日志,保证低频变更的数据也可以及时读取到。

ARCHIVE_LAG_TARGET forces a log switch after the specified amount of time elapses.

A 0 value disables the time-based thread advance feature; otherwise, the value represents the number of seconds. Values larger than 7200 seconds are not of much use in maintaining a reasonable lag in the standby database. The typical, or recommended value is 1800 (30 minutes). Extremely low values can result in frequent log switches, which could degrade performance; such values can also make the archiver process too busy to archive the continuously generated logs.

设置方式:

1
ALTER SYSTEM SET ARCHIVE_LAG_TARGET = 600; -- 单位: 秒

ARCHIVE_LAG_TARGET【官方文档】

ARCHIVE_LAG_TARGET参数的作用(查看日志切换时间)_Data & safety的博客-CSDN博客_archive_lag_target

archive_lag_target tips

归档日志文件名修改

LOG_ARCHIVE_FORMAT

自动清理

Oracle归档日志使用情况及自动清理_杰米尼123的博客-CSDN博客_查看归档日志使用情况

自动清理Oracle归档日志 - 腾讯云开发者社区-腾讯云

如何查看crontab的日志记录_51CTO博客_查看crontab执行日志

常见报错

1
[64000][257] ORA-00257: 归档程序错误。只有在解析完成后才以 AS SYSDBA 方式连接。

关闭归档日志

  1. How to open or close ORACLE database archivelog- Huawei
  2. oracle 归档日志开启、关闭及删除归档日志 - 重剑无锋_FQT - 博客园
  3. Disable Archive log mode

常见问题

使用 RMAN 清理归档日志之后,有部分文件没有删除掉

RMAN 删除归档日志依据的是控制文件中的归档日志信息,而不是文件系统(或 Oracle ASM)上保存的归档日志文件。

Oracle 的控制文件中,保存归档日志的部分是可以循环使用的,Oracle 通过 control_file_record_keep_time 来设置控制文件中可以冲用的记录在多久以后可以被重用,这个参数的默认值是 7。也就意味着 7 天之前的归档日志信息在控制文件中可能已经不存在了。RMAN 命令只能删除控制文件中有记录信息的归档日志文件,对于已经没有归档日志信息的日志文件,是不会做处理的。对于这部分归档日志文件,只能手动从文件系统或 ASM 中删除。

另外,用 RMAN 删除归档日志信息的时候,并不会删除控制文件中归档日志的信息,而是在控制文件中把对应归档日志的删除状态设置为 DELETED,即 V$ARCHIVED_LOGDELETED 列和 STATUS 列的状态。

一般情况下建议使用 RMAN 删除归档日志,如果不使用 RMAN 删除归档日志,使用其他方式删除归档日志之后,建议使用 RMAN 更新一下控制文件中的归档日志信息,方法是:

1
2
3
crosscheck archivelog all;

delete expired archivelog all;

RAC 环境需要注意:

如果是RAC环境且archivelog存储在各节点的本地盘而未使用NFS,直接执行以上命令会导致其它节点上的所有archivelog都被标识为无效而被删除。这是因为归档日志不是共享的,执行命令的节点无法访问到其它节点上的归档日志。对于这种情况需要为每个节点分配一个metainance channel来解决。
RMAN > allocate channel for maintenance device type disk connect‘sys/systemaudit@ora91’;
RMAN > allocate channel for maintenance device type disk connect‘sys/systemaudit@ora92’;
RMAN > crosscheck archivelog all;
RMAN> delete expired archivelog all;

——rman 删除之后物理文件还存在 - Oracle数据库管理 - ITPUB论坛-专业的IT技术社区

RMAN 备份和恢复归档日志

RMAN 可以把归档日志打包备份起来,同时可以在备份之后删除归档日志。

备份所有归档日志并删除所有备份的日志:

1
backup archivelog all delete input;

恢复备份的所有归档日志:

1
restore archivelog all;

根据归档日志的 sequence 号恢复归档日志:

1
restore archivelog from logseq 5 until logseq 8;

恢复 7 天内的归档日志

1
restore archivelog from time 'sysdate-7';

压缩备份

1
BACKUP AS COMPRESSED BACKUPSET ARCHIVELOG ALL DELETE ALL INPUT;

查看已经备份的归档日志:

1
list backup of archivelog all;

查看所有归档日志

1
list archivelog all;

检查备份:

1
crosscheck backupset;

1
crosscheck backup;

删除所有备份集:

1
DELETE BACKUP;

参考资料

  1. Managing Archived Redo Log Files
  2. 第四步:oracle-归档日志的删除与整理 - 简书
  3. Oracle 每天归档量大小查看_小楼一夜听春雨,深巷明朝卖杏花-CSDN博客_查看归档大小
  4. Oracle归档日志使用情况及自动清理_杰米尼123的博客-CSDN博客_oracle自动清理归档日志
  5. ORA-00257: archiver error tips
  6. rman 删除之后物理文件还存在 - Oracle数据库管理 - ITPUB论坛-专业的IT技术社区
  7. 通过RMAN删除归档日志不释放问题_项目日志归档 内存没释放_隔壁的渣渣刘的博客-CSDN博客
  8. RMAN备份及恢复归档日志的语法-阿里云开发者社区
  9. RMAN Backup Concepts
  10. Easy to Learn Oracle Database and Solve Your Problem. : RMAN Compress Backup Archivelog and Full Database【讲了如何压缩备份归档日志】
  11. oracle rman backup archivelog all delete input 和 delete all input 的区别_oracle delete input_数据库人生的博客-CSDN博客【RMAN 在 RAC 环境的注意事项】
  12. Oracle数据库开启归档日志及rman备份情况查询 - HR· - 博客园
  13. 【转】RMAN删除过期备份或非过期备份 - gegeman - 博客园