log_archive_dest参数必须使用完整绝对路径,如/u01/arch,不可用相对路径、裸目录名或末尾斜杠;log_archive_dest_1为强制本地归档目标,未配置将导致数据库hang住;归档空间不足时会卡住再报ORA-00257,不自动fallback至FRA。
log_archive_dest 参数必须用完整路径,不能只写目录名
oracle 归档日志路径配置错在 log_archive_dest 上是最常见的启动失败原因。这个参数不接受相对路径或裸目录名,比如 /u01/arch 是合法的,但 arch、./arch 或空值都会导致实例无法启动(报错 ora-16018 或 ora-16019)。
实操建议:
- 确认路径存在且 Oracle 用户有读写权限:
ls -ld /u01/arch+touch /u01/arch/test && rm /u01/arch/test - 路径末尾不要加斜杠:
/u01/arch✅,/u01/arch/❌(部分版本会静默截断或拼接出错) - 避免使用 NFS 挂载点作主归档路径,除非明确启用
log_archive_dest_n并配OPTION=NO_DELAY - 若用 ASM,必须写成
+DATA/archivelog格式,不能用别名或未挂载的磁盘组
log_archive_dest_1 和 log_archive_dest_2 的角色不能互换
log_archive_dest_1 是强制启用的本地归档目标,Oracle 启动时必须可写;log_archive_dest_2 默认是远程 standby 用的,如果只配了它而没配 log_archive_dest_1,归档会卡住,LGWR 线程挂起,最终数据库 hang 住(现象:ARCH 进程状态为 WAITING,v$archive_dest 中 STATUS 显示 ERROR)。
实操建议:
- 单机环境只需配
log_archive_dest_1,其他log_archive_dest_n留空或设LOCATION=USE_DB_RECOVERY_FILE_DEST - 如果要双写本地+远程,
log_archive_dest_1必须指向本地路径,log_archive_dest_2配SERVICE=standby_db,并加VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) - 禁用某个 dest 不要用
''或NULL,而是用LOCATION='' VALID_FOR=(NONE,NONE)
归档空间不够时,不是立刻报错,而是先卡住再崩溃
Oracle 不会在归档前检查剩余空间,而是在写入最后一块归档文件时才触发校验。这意味着你可能看到 ORA-00257: archiver error. Connect internal only, until freed,此时数据库已拒绝新事务(LOG_SWITCH_WAIT 等待),但旧连接还能查数据——容易误判为“只是警告”。
实操建议:
- 监控不是看
df -h,而是查v$recovery_file_dest(如果用了 FRA)或直接du -sh /u01/arch/*+find /u01/arch -name "*.arc" -mtime +7 -delete(谨慎!) - 设置
log_archive_min_succeed_dest=1可防止因次要 dest 失败导致主归档阻塞 - 归档路径所在文件系统预留至少 20% 空间,因为归档文件大小波动大(受日志切换频率、DML 量影响),不是按日志文件大小线性增长
log_archive_dest 和 db_recovery_file_dest 冲突时,优先级很隐蔽
当同时设置了 log_archive_dest_1 和 db_recovery_file_dest,Oracle 会把归档日志写到 log_archive_dest_1,但 RMAN 备份和闪回日志仍走 FRA。问题在于:如果 log_archive_dest_1 空间满,FRA 不会自动接管归档——它只管自己那块,不会“救火”。
实操建议:
- 生产环境尽量避免混用:要么全用
log_archive_dest_n手动管理路径,要么全用db_recovery_file_dest并关闭log_archive_dest_1 - 如果必须共存,确保
log_archive_dest_1路径独立挂盘,不与 FRA 共享同一文件系统 - 检查冲突的最简方法是执行
archive log list,看输出里Archive destination显示的是哪个路径,而不是依赖参数值
归档路径配置真正难的不是语法,而是理解 Oracle 在归档失败时“不立即报错、不主动清理、不跨路径 fallback”的行为惯性。空间评估永远要按峰值日志生成量 × 24 小时来算,而不是平均值。

















