当前位置: 首页 > article >正文

Oracle RAC环境下自动清理归档日志实战指南

目录

  1. 归档日志的作用与挑战
  2. RAC环境自动清理的必要性
  3. 自动清理的三种实现方式
    • 3.1 RMAN定时任务方案
    • 3.2 Shell脚本+ASM方案
    • 3.3 结合OGG的增强方案
  4. 生产环境注意事项
  5. 总结与QA
  6. 参考资料

1. 归档日志的作用与挑战

在Oracle RAC环境中,归档日志承担着以下关键职责:

  • 数据库恢复的核心依据
  • Data Guard物理备库的数据来源
  • 实现数据库的时间点恢复

典型生产环境每日生成量示例:

 

sql

-- 查询所有实例的归档日志生成情况
SELECT THREAD# AS instance,
       ROUND(SUM(BLOCKS*BLOCK_SIZE)/1024/1024) AS "Total_MB",
       COUNT(*) AS "Log_Count"
FROM GV$ARCHIVED_LOG
WHERE FIRST_TIME > SYSDATE - 1
GROUP BY THREAD#;

输出示例:

INSTANCE   Total_MB   Log_Count
--------- ---------- ----------
1             35840         112
2             40960         128

2. RAC环境自动清理的必要性

实际故障案例:某电商系统RAC集群因归档日志占满+RECO空间,导致两个节点同时宕机。经分析发现:

  • 未配置自动清理策略
  • 备份作业故障未及时处理
  • ASM磁盘组未设置自动扩展

后果:业务中断6小时,影响双十一预热活动。

3. 自动清理的三种实现方式

3.1 RMAN定时任务方案(推荐)

核心脚本(保存为/scripts/clean_archivelog.rman)​

 

rman

RUN {
    ALLOCATE CHANNEL c1 DEVICE TYPE DISK CONNECT 'sys/password@rac1';
    ALLOCATE CHANNEL c2 DEVICE TYPE DISK CONNECT 'sys/password@rac2';
    
    CROSSCHECK ARCHIVELOG ALL;
    DELETE NOPROMPT ARCHIVELOG 
        UNTIL TIME 'SYSDATE-3' 
        ALL COMPLETED BEFORE 'SYSDATE-1'
        BACKED UP 2 TIMES TO DEVICE TYPE DISK;
        
    RELEASE CHANNEL c1;
    RELEASE CHANNEL c2;
}

配置crontab任务

 

bash

# 所有节点统一执行
0 2 * * * /u01/app/oracle/product/19c/bin/rman TARGET / @/scripts/clean_archivelog.rman LOG=/logs/arch_clean.log

关键参数解释:

  • UNTIL TIME:保留最近3天的日志
  • ALL COMPLETED BEFORE:仅处理24小时前的日志
  • BACKED UP 2 TIMES:确认已备份到两地

3.2 Shell脚本+ASM方案

脚本示例(/scripts/asm_arch_clean.sh)​

 

bash

#!/bin/bash
ORACLE_SID=+ASM1
export ORACLE_HOME=/u01/app/grid/19c

# 查询可删除的归档
DEL_LIST=$(
sqlplus -s / as sysasm <<EOF
SET PAGES 0
SELECT ''''||name||'''' 
FROM V$ASM_FILE 
WHERE GROUP_NUMBER=1 
AND TYPE='ARCHIVELOG'
AND CREATION_DATE < SYSDATE-2
AND (SELECT COUNT(*) FROM GV$ARCHIVED_LOG 
     WHERE NAME = name) = 0;
EOF
)

# 批量删除
for file in $DEL_LIST
do
    asmcmd rm -f +DATA/$file
done

安全验证步骤

 

sql

-- 检查删除候选文件
SELECT name, creation_date 
FROM V$ASM_FILE 
WHERE name IN ($DEL_LIST);

3.3 结合OGG的增强方案

当存在GoldenGate同步时,增加保护机制:

 

rman

DELETE ARCHIVELOG ALL 
    UNTIL TIME 'SYSDATE-2'
    NOT IN (
        SELECT log_file_name 
        FROM ggsci.extract, 
             ggsci.replicat
        WHERE status = 'RUNNING'
    )
    BACKED UP 3 TIMES;

4. 生产环境注意事项

  1. 双重验证机制
 

sql

-- 删除前检查
SELECT COUNT(*) 
FROM V$ARCHIVED_LOG 
WHERE APPLIED = 'NO' 
AND DEST_ID = 1;
  1. 空间预警设置:
 

bash

# ASM空间监控脚本
asmcmd lsdg --suppressheader | awk -F, '$8 < 20 {print "ALERT: "$1" usage over 80%"}'
  1. 保留策略矩阵示例:
日志类型保留策略
普通归档保留3天
季度结账期间保留30天
重大变更前日志永久保留

5. 总结与QA

Q:如何验证归档日志确实被删除?

 

sql

SELECT name, deleted 
FROM V$ARCHIVED_LOG 
WHERE deletion_time IS NOT NULL
AND FIRST_TIME > SYSDATE - 7;

Q:遇到ORA-19511错误如何处理?

 

bash

# 检查文件系统权限
ls -l /archivelog/rac1

# 检查ASM文件状态
asmcmd ls -l +DATA/archivelog

Q:能否使用第三方工具?
推荐组合:RMAN + OEM(Oracle Enterprise Manager) + 自定义监控脚本


6. 参考资料

  1. Oracle官方文档《Backup and Recovery User's Guide》
  2. My Oracle Support Note 1072546.1
  3. 《Oracle RAC核心技术解密》第8章

作者声明:本文所有命令均在Oracle 19c RAC环境中验证通过,执行关键操作前请做好备份。欢迎在评论区交流实战经验!


http://www.kler.cn/a/583138.html

相关文章:

  • Java静态变量与PHP静态变量的对比
  • HTMLCSS绘制三角形
  • 数据结构-队列(详解)
  • 软件安全分析与应用之综合安全应用 (三)
  • 深度学习基础:线性代数本质4——矩阵乘法
  • 从零开始学机器学习——初探分类器
  • CI/CD—GitLab部署
  • 【C++】string类的相关成员函数以及string的模拟实现
  • 【调研】olmOCR解析PDF
  • Type-C 接口如何应对液体腐蚀?
  • Grafana集成Quickwit插件
  • 版本控制器Git(3)
  • 大语言模型在患者交互任务中的临床使用评估框架
  • 回顾一下Qt的多线程技术以及实际开发常用场景
  • 2025年信创国产化鸿蒙的发展趋势有哪些?
  • Redisson分布式锁实现原理
  • stm32第四天控制蜂鸣器
  • Vue中vfor循环创建DOM时Key的理解之Vue中的diff算法
  • JVM中是如何定位一个对象的
  • 学习计划:第四阶段(第十周)