当前位置:首页 > 问答 > 正文

Oracle报错|日志归档 ORA-19905:log_archive_format参数需包含%s、t和%r 故障修复与远程处理

📝 Oracle报错急救手册:ORA-19905日志归档格式翻车实录

场景还原 👨💻
凌晨3点,你正美滋滋地吃着泡面追剧,突然监控系统狂闪红光——生产库归档日志罢工了!告警信息赫然显示:

ORA-19905: log_archive_format参数必须包含%s、%t和%r占位符  

手里的老坛酸菜面突然不香了...别慌!这份"急救指南"能让你10分钟内满血复活!

🔍 故障诊断三板斧

  1. 查症状

    SELECT name, value FROM v$parameter WHERE name = 'log_archive_format';  

    如果返回结果缺少%s(日志序列号)、%t(线程号)或%r(RESETLOGS标识),恭喜你中奖了💣

  2. 看影响

    • 归档日志无法自动生成
    • RMAN备份失败
    • 主备库同步中断(DG环境会直接罢工)
  3. 翻旧账
    最近是否有人手贱执行了类似操作?

    Oracle报错|日志归档 ORA-19905:log_archive_format参数需包含%s、t和%r 故障修复与远程处理

    ALTER SYSTEM SET log_archive_format='arch_%d.log' SCOPE=SPFILE;  

🛠️ 修复方案(附避坑指南)

方案A:在线热修复(需重启)

-- 先记下当前值防翻车  
CREATE PFILE='/tmp/pfile_202508.ora' FROM SPFILE;  
-- 标准格式模板(11g/12c/19c通用)  
ALTER SYSTEM SET log_archive_format='arch_%d_%t_%s_%r.arc' SCOPE=SPFILE;  

⚠️ 重点提醒

  • 必须包含三大金刚:%s%t%r
  • 推荐添加%d(DB_NAME)方便识别
  • 修改后必须重启数据库才能生效!

方案B:紧急救援模式(免重启)

如果暂时不能重启,可以暴力重建控制文件:

-- 生成控制文件脚本  
ALTER DATABASE BACKUP CONTROLFILE TO TRACE;  
-- 在udump目录找到跟踪文件,修改log_archive_format后执行重建  

💣 风险提示:此操作相当于给数据库做"开颅手术",非骨灰级玩家请呼叫援军!

🌐 远程处理锦囊

当客户现场没DBA时,可以这样远程指导:

  1. 让运维小哥执行

    Oracle报错|日志归档 ORA-19905:log_archive_format参数需包含%s、t和%r 故障修复与远程处理

    # 先用ssh连上服务器  
    su - oracle  
    sqlplus / as sysdba <<EOF  
    CREATE PFILE='/home/oracle/pfile_bak.ora' FROM SPFILE;  
    ALTER SYSTEM SET log_archive_format='arch_%d_%t_%s_%r.arc' SCOPE=SPFILE;  
    exit  
    EOF  
  2. 优雅重启数据库

    # RAC环境要额外注意  
    srvctl stop database -d orcl  
    srvctl start database -d orcl  
  3. 验证疗效

    ARCHIVE LOG LIST;  -- 查看归档状态  
    SELECT sequence#, archived FROM v$archived_log;  -- 检查最新归档  

🧠 原理小课堂

为什么Oracle这么执着于这三个参数?

  • %s:保证日志序列号连续(就像书的页码)
  • %t:RAC环境中区分不同实例(多作者合著时的署名)
  • %r:防止恢复时用错日志(相当于文件"版本号")

🎯 终极预防方案

  1. 配置检查脚本(每月自动巡检)

    SELECT name, value FROM v$parameter  
    WHERE name IN ('log_archive_format','log_archive_dest');  
  2. 变更管控

    Oracle报错|日志归档 ORA-19905:log_archive_format参数需包含%s、t和%r 故障修复与远程处理

    • 所有参数修改必须走审批流程
    • 生产环境禁止直接ALTER SYSTEM(用SPFILE更安全)
  3. 备库同步检查
    DG环境中主备库参数必须保持一致,否则会出现"精神分裂"症状


最后彩蛋 🥚
下次再遇到ORA-19905,你可以优雅地说:"小问题,这是Oracle在提醒我们该换归档日志命名规范了~" (然后默默擦掉额头的冷汗)

注:本文操作验证基于Oracle 19c(2025年8月版本),其他版本可能存在细微差异,关键操作前切记备份!备份!备份!

发表评论