必须用ARCHIVE LOG LIST确认归档状态,它同时显示Database log mode、Automatic archival和Archive destination;切换需在MOUNT状态下执行SHUTDOWN IMMEDIATE→STARTUP MOUNT→ALTER DATABASE ARCHIVELOG→ALTER DATABASE OPEN;归档路径须显式配置log_archive_dest_1并设SCOPE=SPFILE,目录权限为750且由oracle用户拥有。

确认当前归档状态必须用 ARCHIVE LOG LIST
别信别人说“开了”,也别只查 V$DATABASE.LOG_MODE。ARCHIVE LOG LIST 才是唯一可信的命令,它会同时告诉你三件事:Database log mode(是否 ARCHIVELOG)、Automatic archival(是否启用自动归档)、Archive destination(当前归档路径)。如果输出里出现 No Archive Mode 和 Disabled,说明还没开,必须继续操作。
切换归档模式只能在 MOUNT 状态下执行
数据库不能在 OPEN 状态下改归档模式,否则报错 ORA-01126。正确顺序是:
-
SHUTDOWN IMMEDIATE—— 强制关闭,不等事务提交完 -
STARTUP MOUNT—— 启动到挂载态,控制文件已读入,数据文件未打开 -
ALTER DATABASE ARCHIVELOG—— 这一步才真正切换模式 -
ALTER DATABASE OPEN—— 重新开放业务访问
注意:STARTUP MOUNT 后千万别漏掉 ALTER DATABASE ARCHIVELOG,否则 OPEN 会失败,报 ORA-00265(实例恢复无法确定)。
归档路径必须提前配置且权限正确
默认归档位置(如 $ORACLE_HOME/dbs)绝对不能用于生产环境——空间小、无冗余、易被清理误删。必须显式设置:
- 用
log_archive_dest_1指向独立文件系统,比如'LOCATION=/u01/arch/orcl' - 目录需由
oracle用户拥有,权限设为750,不能是777(ORA-16014报错常见于此) - RAC 环境必须用 ASM 路径(如
'+DATA'),不能用本地路径,否则节点间归档不一致 - 多路复用建议加
log_archive_dest_2,但至少一个目标要带MANDATORY,否则归档失败时日志组无法重用,最终卡死(ORA-00257)
SCOPE=SPFILE 是重启生效的关键
所有 ALTER SYSTEM SET ... SCOPE=SPFILE 的参数(如 log_archive_dest_1)只写入服务器参数文件,下次启动才加载。如果只用 SCOPE=BOTH 或没指定 scope,数据库重启后归档路径丢失,立刻报 ORA-16018。验证方式很简单:SHUTDOWN IMMEDIATE → STARTUP → 再跑一次 ARCHIVE LOG LIST,看 Archive destination 是否还是你设的路径。
归档模式不是“开完就完事”,后续归档日志增长、空间监控、RMAN 清理策略都得跟上,否则第一个填满的归档目录会让整个库 hang 住。


















