上一篇
场景还原 👨💻
凌晨3点,你正美滋滋地吃着泡面追剧,突然监控系统狂闪红光——生产库归档日志罢工了!告警信息赫然显示:
ORA-19905: log_archive_format参数必须包含%s、%t和%r占位符
手里的老坛酸菜面突然不香了...别慌!这份"急救指南"能让你10分钟内满血复活!
查症状
SELECT name, value FROM v$parameter WHERE name = 'log_archive_format';
如果返回结果缺少%s
(日志序列号)、%t
(线程号)或%r
(RESETLOGS标识),恭喜你中奖了💣
看影响
翻旧账
最近是否有人手贱执行了类似操作?
ALTER SYSTEM SET log_archive_format='arch_%d.log' SCOPE=SPFILE;
-- 先记下当前值防翻车 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)方便识别 如果暂时不能重启,可以暴力重建控制文件:
-- 生成控制文件脚本 ALTER DATABASE BACKUP CONTROLFILE TO TRACE; -- 在udump目录找到跟踪文件,修改log_archive_format后执行重建
💣 风险提示:此操作相当于给数据库做"开颅手术",非骨灰级玩家请呼叫援军!
当客户现场没DBA时,可以这样远程指导:
让运维小哥执行
# 先用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
优雅重启数据库
# RAC环境要额外注意 srvctl stop database -d orcl srvctl start database -d orcl
验证疗效
ARCHIVE LOG LIST; -- 查看归档状态 SELECT sequence#, archived FROM v$archived_log; -- 检查最新归档
为什么Oracle这么执着于这三个参数?
%s
:保证日志序列号连续(就像书的页码) %t
:RAC环境中区分不同实例(多作者合著时的署名) %r
:防止恢复时用错日志(相当于文件"版本号") 配置检查脚本(每月自动巡检)
SELECT name, value FROM v$parameter WHERE name IN ('log_archive_format','log_archive_dest');
变更管控
ALTER SYSTEM
(用SPFILE更安全) 备库同步检查
DG环境中主备库参数必须保持一致,否则会出现"精神分裂"症状
最后彩蛋 🥚
下次再遇到ORA-19905,你可以优雅地说:"小问题,这是Oracle在提醒我们该换归档日志命名规范了~" (然后默默擦掉额头的冷汗)
注:本文操作验证基于Oracle 19c(2025年8月版本),其他版本可能存在细微差异,关键操作前切记备份!备份!备份!
本文由 袭煜祺 于2025-08-03发表在【云服务器提供商】,文中图片由(袭煜祺)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/525176.html
发表评论