#归档日志文件管理
数据库运行于归档模式时,redo日志文件进行归档后生成的二进制文件称为归档日志文件。
# 查看归档日志文件
# 查看物理文件
使用安装用户登录数据库所在服务器,进入归档日志文件的存放路径查看对应的物理文件,归档日志文件默认存放在$YASDB_DATA/archive目录,支持自定义配置归档路径。
$ cd $YASDB_DATA/archive
$ ls -lrt
total 15456
-rw-r----- 1 yashan yashan 12128256 Jun 17 11:45 arch_0_1.ARC
-rw-r----- 1 yashan yashan 3698688 Jun 18 17:14 arch_0_2.ARC
归档日志默认的文件名格式为arch_{resetid}_{sequence}.ARC,共享集群部署中也可能为arch{instanceId}_{resetid}_{sequence}.ARC,具体字段含义如下:
resetid:redo日志的reset id,每次重置redo时间线(例如执行failover、以RESETLOGS模式打开数据库等)会使该值加1。
sequence:归档日志文件的序列号。
instanceId:共享集群部署中独有字段,用于标记归档日志文件所属的实例ID,1号实例的归档日志文件名则直接省略instanceId字段。
# 通过视图查看
通过V$ARCHIVED_LOG视图可以查看归档日志文件的信息,例如归档日志的序列号、归档日志文件名和归档时间等。
SELECT name,SEQUENCE#,completion_time,backup_count FROM V$ARCHIVED_LOG;
NAME SEQUENCE# COMPLETION_TIME BACKUP_COUNT
------------------------------------------ ------------ ----------------- ------------
$YASDB_DATA/archive/arch_0_1.ARC 1 2022-06-17 2
$YASDB_DATA/archive/arch_0_2.ARC 2 2022-06-18 1
# 备份与恢复归档日志文件
如果归档日志文件连续且完整(或已妥善备份),可以对数据库进行基于时间点的恢复(PITR),即通过数据库备份集先将数据库恢复到备份时间点,再回放这些连续完整的归档日志文件(或先恢复归档日志再回放),可以将数据库恢复到备份集时间点至现存最新一条归档日志期间的任一时刻的状态。
因此,建议定期对归档日志文件进行备份,并在清理策略中配置备份达到指定次数后才允许被清理(ARCHIVELOG_DELETION_POLICY = 'BACKED UP integer TIMES'),使数据库在需要进行恢复时能恢复尽可能多的数据,减少数据丢失。
在单机部署和共享集群部署中,可以执行BACKUP ARCHIVELOG语句、RESTORE ARCHIVELOG语句对数据库的归档日志文件进行单独备份与恢复,在存算一体分布式集群部署中,则通过备份整库从而备份归档日志文件。
具体的备份与恢复操作步骤,请查阅备份恢复。
# 手动清理归档日志文件
YashanDB提供了自动清理机制,在参数配置符合业务需求的情况下,通常无需人为介入。若遇偶发需要更多磁盘空闲容量等场景,数据库管理员可以对归档日志文件进行手动清理,手动清理操作不会妨碍自动清理机制。
手动清理归档日志文件是指通过执行SQL语句进行清理,请勿直接在操作系统路径下删除相关文件。清理时,支持基于以下维度指定归档日志文档范围(实际清理仍遵循清理原则与策略),相应的范围依据均可通过查询V$ARCHIVED_LOG视图获取:
| 维度 | 描述说明 | 范围依据 |
|---|---|---|
| ALL | 清理所有满足策略的归档日志文件。 | - |
| SEQUENCE integer | 清理指定序列号之前所有满足策略的归档日志文件。 | V$ARCHIVED_LOG视图的SEQUENCE#字段 |
| TIME date | 清理指定时间之前生成的并且满足清理条件的归档日志文件。 | V$ARCHIVED_LOG视图的NEXT_TIME字段 |
| SCN integer | 清理指定SCN之前并且满足清理条件的归档日志文件。 | V$ARCHIVED_LOG视图的NEXT_CHANGE#字段 |
以DBA用户连接并登录数据库。
$ yasql sales/********@192.168.1.2:1688 YashanDB SQL Enterprise Edition Release {version_number} x86_64 Connected to: YashanDB Server Enterprise Edition Release {version_number} x86_64 - Linux SQL>查看ARCHIVELOG_DELETION_POLICY和ARCH_CLEAN_IGNORE_MODE参数配置。
-- 查看ARCHIVELOG_DELETION_POLICY SHOW PARAMETER ARCHIVELOG_DELETION_POLICY NAME VALUE ---------------------------------------------------------------- ---------------------------------------------------------------- ARCHIVELOG_DELETION_POLICY SHIPPED TO ALL STANDBY, BACKED UP 2 TIMES -- 若ARCHIVELOG_DELETION_POLICY = DEFAULT时,自定义策略则以ARCH_CLEAN_IGNORE_MODE参数值为准 SHOW PARAMETER ARCH_CLEAN_IGNORE_MODE name value ---------------------------------------------------------------- ---------------------------------------------------------------- ARCH_CLEAN_IGNORE_MODE BACKUP若策略相关配置不符合需求,则需先修改对应参数值再执行后续操作。
为避免归档日志文件被误清理,建议先对其进行备份。
在单机部署、共享集群部署中,可以单独备份归档日志文件,具体操作步骤请查阅备份归档日志。
BACKUP ARCHIVELOG ALL FORMAT '/data/backup/all_20211209191000' TAG 'yas_allarchive_backup' PARALLELISM 3;根据清理归档日志的参考维度,查看对应的维度范围参考依据值。
SELECT NAME,SEQUENCE#,NEXT_CHANGE#,NEXT_TIME,BACKUP_COUNT FROM V$ARCHIVED_LOG; NAME SEQUENCE# NEXT_CHANGE# NEXT_TIME BACKUP_COUNT ----------------------------------- ----------- ------------------ --------------------------- ------------ $YASDB_DATA/archive/arch_0_1.ARC 1 707838135675723776 2025-06-23 11:20:44.842706 2 $YASDB_DATA/archive/arch_0_2.ARC 2 708408122494455808 2025-06-25 02:00:01.780873 0 $YASDB_DATA/archive/arch_0_3.ARC 3 708557045713440768 2025-06-25 12:05:59.988633 0手动清理归档日志,具体语法请查阅ALTER DATABASE。
-- 方式一:基于SCN指定范围,删除SCN小于等于708408122494455808且符合清理策略的归档日志 ALTER DATABASE DELETE ARCHIVELOG UNTIL SCN 708408122494455808; -- 方式二:基于时间指定范围,删除2025-01-06 11:30:00及之前产生的且符合清理策略的归档日志 ALTER DATABASE DELETE ARCHIVELOG UNTIL TIME TO_DATE('2025-01-06 11:30:00', 'yyyy-mm-dd hh24:mi:ss'); -- 方式三:基于归档序列号指定范围,删除序列号小于等于2且符合清理策略的归档日志 ALTER DATABASE DELETE ARCHIVELOG UNTIL SEQUENCE 2; -- 方式四:删除所有可被清理的归档日志 ALTER DATABASE DELETE ARCHIVELOG ALL;

