ALTER DATABASE ARCHIVELOG必须在MOUNT状态执行,否则报ORA-01126;默认归档至DB_RECOVERY_FILE_DEST(FRA),易致空间不足,应显式设置LOG_ARCHIVE_DEST_1并验证v$archived_log与文件系统。
alter database archivelog 必须在 mount 状态下执行,否则会报 ora-01126;路径配置若未显式指定,oracle 12c 默认写入 db_recovery_file_dest(即 fra),但该行为常导致空间不足或与备份策略冲突,需主动干预。
确认当前归档状态并进入 MOUNT 状态
先用 archive log list 查看是否已是 ARCHIVELOG 模式。若显示 No archive log 或 Database log mode: No Archive Mode,说明未开启。
关闭数据库后必须以 MOUNT 方式启动,不能直接 OPEN:
shutdown immediate-
startup mount—— 这步不可跳过,ALTER DATABASE ARCHIVELOG只接受MOUNT状态
如果误执行 startup(即自动 OPEN),需先 shutdown immediate 再重来。强行在 OPEN 状态下运行该语句会触发 ORA-01126: database must be mounted in this instance。
执行 ALTER DATABASE ARCHIVELOG 并验证
在 MOUNT 状态下运行:
ALTER DATABASE ARCHIVELOG;
成功后立即执行 archive log list,应看到:
Database log mode: Archive ModeAutomatic archival: Enabled-
Archive destination: USE_DB_RECOVERY_FILE_DEST(默认指向 FRA)
注意:ALTER DATABASE ARCHIVELOG 不会自动启动归档进程,首次日志切换(如 ALTER SYSTEM SWITCH LOGFILE)才会真正生成第一个归档文件。别等“马上看到文件”——得手动切一次日志。
设置归档路径:优先用 LOG_ARCHIVE_DEST_1,慎用 DB_RECOVERY_FILE_DEST
Oracle 12c 中,LOG_ARCHIVE_DEST_1 和 DB_RECOVERY_FILE_DEST 同时存在时,前者优先级更高;若只设了后者,归档就进 FRA,但 FRA 空间被 RMAN 备份、控制文件快照等共享,容易撑满导致数据库挂起(ORA-00257: archiver error)。
推荐做法是显式指定本地路径,并设为 MANDATORY 保证可靠性:
ALTER SYSTEM SET log_archive_dest_1='LOCATION=/u01/oradata/archivelog MANDATORY' SCOPE=BOTH;
关键点:
- 路径必须真实存在且 Oracle 用户有读写权限,否则后续日志切换会失败
-
MANDATORY表示该路径归档失败时,对应重做日志不能被覆盖 —— 避免丢日志,但也会卡库;生产环境建议配两个路径,一个MANDATORY+ 一个OPTIONAL - 不要用
LOG_ARCHIVE_DEST(已废弃),它在 12c 中不生效,仅保留兼容性
检查归档是否真正工作:别只信 archive log list
archive log list 只反映配置状态,不代表归档已实际运行。要确认归档文件真实生成,需:
- 执行
ALTER SYSTEM SWITCH LOGFILE强制触发一次日志切换 - 查
v$archived_log:运行SELECT sequence#, name, dest_id FROM v$archived_log WHERE first_time > SYSDATE - 1/24 ORDER BY sequence# DESC;,看是否有新记录 - 去文件系统确认:用
ls -lt /u01/oradata/archivelog(按你设的路径)看是否有刚生成的.arc文件
常见假成功:配置完就以为 OK,但没切日志、没检查 v$archived_log,结果某天磁盘满才发现归档根本没动 —— 这个坑在升级或灾备演练中高频出现。


















