Oracle 数据库之归档日志

1、归档日志基本概念

Oracle 重做日志(Redo Log)是数据库的核心机制,记录了所有数据变更操作。当数据库处于归档模式(ARCHIVELOG Mode)时,Oracle 在切换重做日志组之前,会将已写满的重做日志文件复制到指定的归档目标位置,生成的文件就是归档日志(Archive Log / Redo Log Archive)。

归档日志是数据库恢复的基石。没有归档日志,数据库只能恢复到最近一次备份的时间点;有了归档日志,可以将数据库恢复到任意时间点(Point-in-Time Recovery),实现零数据丢失。

2、归档模式 vs 非归档模式

|----------------|--------------------------------------|-------------------------|
| 特性 | 归档模式(ARCHIVELOG) | 非归档模式(NOARCHIVELOG) |
| 日志保留 | 已写满的重做日志被归档后才可覆盖 | 已写满的重做日志直接被覆盖 |
| 在线备份 | 支持热备份(ALTER TABLESPACE BEGIN BACKUP) | 仅支持冷备份(SHUTDOWN 后复制) |
| 时间点恢复 | 支持任意时间点恢复 | 仅支持恢复到备份时刻 |
| Data Guard | 支持 | 不支持 |
| 闪回数据库 | 支持 | 不支持 |
| RMAN 增量备份 | 支持 | 部分支持(无归档日志无法完全恢复) |
| 适用场景 | 生产环境(必须) | 开发/测试环境 |

3、归档日志命名与格式

归档日志文件名由 LOG_ARCHIVE_FORMAT 参数控制,支持以下占位符:

|---------|------------------------|
| 占位符 | 含义 |
| %t | 线程号(Thread Number) |
| %s | 日志序列号(Sequence Number) |
| %r | 重置日志 ID(Resetlogs ID) |
| %d | 数据库 ID(DBID) |
| %S | 日志序列号(固定宽度,不足补零) |
| %T | 年月日(YYYYMMDD) |

查看当前归档日志格式:

SELECT name, value FROM v$parameter WHERE name = 'log_archive_format';

设置归档日志格式(需重启生效):

ALTER SYSTEM SET log_archive_format = 'arch_%t_%s_%r.arc' SCOPE=SPFILE;

实例:归档日志命名格式不当导致文件覆盖

**S --- Situation(场景):**某企业 Oracle 数据库使用默认归档格式 arch_%s.arc(仅含序列号)。在一次 DBID 相同的数据库克隆操作后,两个库的归档日志写入同一目录,因序列号冲突导致归档日志相互覆盖,主库归档日志丢失。

**T --- Task(任务):**修改归档日志命名格式,确保唯一性,并建立归档目录隔离机制。

A --- Action(行动):

1、修改归档日志格式,加入线程号和重置日志 ID:

ALTER SYSTEM SET log_archive_format='arch_%t_%s_%r.arc' SCOPE=SPFILE;

2、为不同数据库配置独立的归档目标目录;

3、建立归档目录命名规范:/archive/<DB_UNIQUE_NAME>/

4、重启数据库使格式生效。

**R --- Result(结果):**归档日志文件名包含 %t(线程号)和 %r(Resetlogs ID),彻底避免了文件覆盖问题。后续克隆操作不再影响主库归档日志安全。

4、归档日志关键视图

**V$ARCHIVED_LOG:**显示所有已归档的日志信息,包括序列号、SCN、大小、归档目标等

**V$ARCHIVE_DEST:**显示所有归档目标位置及其状态

**V$ARCHIVE_DEST_STATUS:**显示归档目标的详细状态(传输延迟、错误信息等)

**V$LOG_HISTORY:**显示日志切换历史记录

**V$LOG:**显示当前在线重做日志组状态

**V$LOGFILE:**显示重做日志文件物理位置

**V$FLASH_RECOVERY_AREA_USAGE:**显示 FRA 空间使用情况(含归档日志)

**DBA_HIST_ARCHIVED_LOG:**AWR 中的归档日志历史(自动负载信息库)

相关推荐
程序员清风4 小时前
Java 后端高并发设计:线程池、限流、熔断与降级
java·数据库·oracle
天衍四九-4 小时前
MySQL中如何定位慢查询?如果SQL语句执行很慢,如何分析和优化?
数据库·sql·mysql
尚久龙4 小时前
mysql-5.7.26-winx64的安装步骤
数据库·mysql
医疗信息化王工4 小时前
DataForge:基于 Python 的数据库批量导出 Excel 工具——从架构到部署的全流程实战
数据库·python·excel
实心儿儿4 小时前
MySQL 的安装
数据库·mysql·adb
程序员阿鹏6 小时前
为什么MySQL InnoDB选择B+树?
数据结构·数据库·b树·sql·mysql·算法·缓存
瀚高PG实验室7 小时前
使用pg_stat_statements抓取数据库TOP SQL
数据库·sql·postgresql·瀚高数据库
yanwumuxi9 小时前
【数据库系列】opensearch数据备份和恢复
数据库
anxiao_m9 小时前
2026企业AI数字孪生选型攻略,不同场景对应不同解决方案
大数据·网络·数据库
SelectDB9 小时前
从 ClickHouse 迁移到 Doris:SQL 兼容、同步与验证清单(实战笔记)
大数据·数据库·数据分析