• 正文
  • 相关推荐
申请入驻 产业图谱

DBA | Oracle 归档日志文件介绍配置实践指南

05/26 10:35
2086
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

大家好,我是 WeiyiGeek,一名深耕安全运维开发(SecOpsDev)领域的技术从业者,致力于探索DevOps与安全的融合(DevSecOps),自动化运维工具开发与实践,企业网络安全防护,欢迎各位道友一起学习交流、一起进步 ,若此文对你有帮助,收藏学习不迷路  。

又有一段时间,没有给大家更新文章,最近确实有些懈怠了,不过还好,通过这段时间的沉淀,又整理了一些实用技巧,我都放在了 全栈工程师修炼指南 知识星球,部分文章同步到公众号,希望对各位正在学习 Oracle 数据库的童鞋有帮助。

Oracle 归档日志文件

什么是归档日志文件?

描述:归档日志文件(Archive Log Files)是Oracle数据库重做日志文件的持久化备份,当数据库处于归档模式(ARCHIVELOG)时,LGWR进程写满一个重做日志文件后,ARCn进程会将其内容复制到指定的归档位置,形成归档日志文件。

由上可知,归档日志文件在数据容灾备份非常重要,在生产环境中一定、一定要开启;前面我们提到在线重做日志文件发生切换后,就需要被归档到磁盘中永久存放,归档在线重做日志文件后可用于数据备份、及数据恢复,防止重做日志循环写入导致的历史数据丢失 ,支持数据库恢复到任意时间点。

归档日志文件命名格式

通常为:O1_MF_%t_%s_%r_.ARC ,例如 O1_MF_1_6_MZDJQL71_.ARC,其中:

文件名部分 说明 示例值 含义
O1_MF_ 固定前缀 O1_MF_ Oracle 12c的标准前缀
1 线程号(%t) 1 产生该日志的线程编号(单实例通常为1)
6 日志序列号(%s) 6 日志序列号,唯一标识归档文件
MZDJQL71 重做日志ID(%r) MZDJQL71 重做日志的唯一标识符
.ARC 固定后缀 .ARC 归档日志的标准扩展名

归档文件命名常用参数,如下所示:

%t:线程号(Thread number)

%s:日志序列号(Log sequence number)

%r:重做日志ID(Resetlogs ID)

%d:数据库ID(Database ID)

%a:激活ID(Activation ID)

归档日志文件存放路径

Windows:
C:apporaclefast_recovery_area<SID>ARCHIVELOG # 缺省
C:apporaclerecovery_area<SID>ARCHIVELOG      # 自定义

如何配置和修改归档设置

特别注意:Oracle 数据库默认未启用归档,所以通常需要将数据库置于MOUNT阶段,然后我们手动开启归档模式,若已上线的生产环境则需要在闲时停机维护。

1.检查当前归档状态

-- # 使用SQL语句查看数据库日志模式
SELECT log_mode FROM v$database;
-- NOARCHIVELOG # 表示数据库日志模式为非存档模式
-- # 或者使用 arhive 命令查看数据库日志模式,当前为非存档模式
SQL> archive log list;
-- 数据库日志模式       非存档模式
-- 自动存档             禁用
-- 存档终点             USE_DB_RECOVERY_FILE_DEST
-- 最早的联机日志序列     2
-- 当前日志序列           6

-- # 查看归档进程状态
SELECT process, statusFROM v$archive_processes;
-- PROCESS STATUS
-- 0 STOPPED
-- 1 STOPPED

-- # 查看归档日志文件信息
SELECTname, sequence#, first_time, completion_time 
FROM v$archived_log
ORDERBYsequence# DESC;

-- # 检查归档目标配置
SELECT dest_name, status, destination FROM v$archive_dest;

-- # 检查归档空间使用
SELECTNAME,SPACE_LIMIT/1024/1024"SPACE_LIMIT", SPACE_USED  FROM v$recovery_file_dest;
-- NAME SPACE_LIMIT SPACE_USED
-- C:apprecovery_area 9546 0

2.启用日志归档模式和手动切换日志文件生成归档文件

# 1.关闭数据库实例,并将实例置于MOUNT阶段
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT; 
    数据库装载完毕。
    
# 2.启用数据库日志模式
SQL> ALTER DATABASE ARCHIVELOG;

# 3.将数据库实例置于OPEN状态
SQL> ALTER DATABASE OPEN;

# 4.再次查看日志归档模式
SQL> archive log list;
# 数据库日志模式            存档模式
# 自动存档             启用
# 存档终点            USE_DB_RECOVERY_FILE_DEST
# 最早的联机日志序列     2
# 下一个存档日志序列   6
# 当前日志序列           6

# 5.手动切换重做日志,自动生成归档文件
SQL> alter system switch logfile;
C:apporaclerecovery_areahistdbARCHIVELOG2025_04_09

# 7.之后,我们了解一下归档相关的 recover 参数,查看到归档路径、大小限制等信息。
SQL> show parameter recover;
# NAME                                 TYPE        VALUE
# ------------------------------------ ----------- ------------------------------
# db_recovery_file_dest                string      C:apporaclerecovery_area  # 归档路径  
# db_recovery_file_dest_size           big integer 9546M  # 归档快速恢复区目录的总容量限制
# db_unrecoverable_scn_tracking        boolean     TRUE
# recovery_parallelism                 integer     0
# remote_recovery_file_dest            string

# 8.查询确认快速恢复区的使用情况
SQL> set linesize 140 pagesize 50;
SQL> col NAME for a30;
SQL> SELECT * FROM V$RECOVERY_FILE_DEST;
# NAME                           SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES     CON_ID
# ------------------------------ ----------- ---------- ----------------- --------------- ----------
# C:apporaclerecovery_area     1.0010E+10    2248704                 0               1          0

weiyigeek.top-启用归档模式查看归档文件

3.若要关闭归档则同样需要进入到 MOUNT 阶段,然后执行如下命令。

-- 1. 关闭数据库
SQL> SHUTDOWN IMMEDIATE;
-- 2. 启动到mount状态
SQL> STARTUP MOUNT; 
-- 3.关闭归档模式
SQL> ALTER DATABASE NOARCHIVELOG;  
-- 4. 打开数据库
ALTER DATABASE OPEN; 

4.配置归档目标路径及格式

-- 设置主归档目标
ALTERSYSTEMSET log_archive_dest_1='LOCATION=/oracle/data/arch/ORCL'SCOPE=BOTH;

-- 设置备用归档目标(可选)
ALTERSYSTEMSET log_archive_dest_2='LOCATION=/oracle/data/arch2/ORCL'SCOPE=BOTH;

-- 查看与设置归档文件格式
SHOW PARAMETER log_archive_format;
ALTERSYSTEMSET log_archive_format='ARCH_%t_%s_%r.arc'SCOPE=SPFILE;

5.修改归档进程数量

-- 增加归档进程(默认4个,最大30个)
ALTER SYSTEM SET log_archive_max_processes=5 SCOPE=BOTH;

6.归档日志管理

-- # 查看所有日志组及其归档状态
SELECTgroup#, sequence#, bytes/1024/1024 "Size(MB)", 
       members, status, archived, first_time, next_time
FROM v$log
ORDERBYgroup#;
-- GROUP# SEQUENCE# Size(MB) MEMBERS STATUS ARCHIVED FIRST_TIME NEXT_TIME
-- 1 4195 200 1 CURRENT NO 2025-05-23 08:13:38 
-- 2 4193 200 1 INACTIVE NO 2025-05-22 22:00:36 2025-05-23 00:18:15
-- 3 4194 200 1 INACTIVE NO 2025-05-23 00:18:15 2025-05-23 08:13:38

-- # 查看当前正在使用的重做日志组(即将被归档的组)
SELECTgroup#, sequence#, bytes/1024/1024 "Size(MB)", members, status, archived
FROM v$log
WHEREstatus = 'CURRENT';

-- 3 查看日志组成员的具体信息
SELECTgroup#, member, type, is_recovery_dest_file
FROM v$logfile
ORDERBYgroup#, member;
-- GROUP# MEMBER                       TYPE IS_RECOVERY_DEST_FILE
-- 1 C:APPORADATAORCLREDO01.LOG ONLINE NO
-- 2 C:APPORADATAORCLREDO02.LOG ONLINE NO
-- 3 C:APPORADATAORCLREDO03.LOG ONLINE NO

-- # 归档指定日志组
ALTERSYSTEMARCHIVELOGGROUP3;

-- # 手动归档当前日志组
ALTERSYSTEMARCHIVELOGCURRENT;

最后提及一点,归档日志文件是Oracle数据库实现持续运行和数据保护的关键组件,合理配置和管理归档模式对数据库的可用性和可恢复性至关重要。

加入:作者【全栈工程师修炼指南】知识星球

获取:作者工作学习全栈笔记

作者整理了10年的工作学习笔记(涉及网络、安全、运维、开发),需要学习实践笔记的看友,可添加作者微信或者回复【工作学习实践笔记】,当前价格¥199,除了获得从业笔记的同时还可进行问题答疑以及每月远程技术支持,希望大家多多支持,收获定大于付出!

相关推荐