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

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环境中验证通过,执行关键操作前请做好备份。欢迎在评论区交流实战经验!

相关文章:

  • vscode更新后: 适用于 Linux 的 Windows 子系统必须更新到最新版本才能继续。可通过运行 “wsl.exe --update” 进行更新
  • 【从零开始学习计算机科学】操作系统(九)大容量存储器
  • Fast DDS Security--仿问控制
  • 《OpenCV》—— dlib(换脸操作)
  • Figma桌面客户端安装与协作设计入门指南(附官方下载链接)
  • 《React 属性与状态江湖:从验证到表单受控的实战探险》
  • Apache Hudi 性能测试报告
  • MVCC的理解(Multi-Version Concurrency Control,多版本并发控制)
  • 蓝桥杯备考:排队顺序(链表)
  • Spring Boot 整合 Redis
  • Python数据分析之数据可视化
  • 数据结构——堆
  • 使用异或完成两个整数的交换
  • 如何使用 CSS 实现黑色遮罩效果
  • VMware安装Windows server 2016
  • 使用const声明常量】
  • 如何为项目选择合适的EMI滤波器——共模与差模干扰分析
  • 【菜鸟飞】Conda安装部署与vscode的结合使用
  • 第27周JavaSpringboot电商进阶开发 1.企业级用户验证
  • C++手动实现一个线性探测法HashMap
  • 博物馆书单|走进博物馆,去体验一场与文明的对话
  • 特朗普:将于19日分别与普京和泽连斯基通话
  • 蒲慕明院士:未来数十年不是AI取代人,而是会用AI的人取代不会用的
  • 马上评|科学红毯,让科学家成为“最亮的星”
  • 特朗普政府涉税改法案遭众议院预算委员会否决
  • 嫩黑线货物列车脱轨致1名路外人员死亡,3人被采取刑事强制措施