大家好,我是 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,除了获得从业笔记的同时还可进行问题答疑以及每月远程技术支持,希望大家多多支持,收获定大于付出!
2086