ora-01126或ora-01507报错表明数据库未处于mount状态,归档模式切换必须在mount状态下执行:先shutdown immediate,再startup mount,最后alter database archivelog;open或nomount状态均会失败。
ora-01126 或 ora-01507 报错:数据库没在 mount 状态
切换归档模式必须在 mount 状态下执行,open 或 nomount 都会失败。常见错误是直接连上就敲 alter database archivelog,结果报 ora-01126: database must be mounted... 或 ora-01507: database not mounted。
正确顺序只有三步:
-
shutdown immediate—— 强制关闭,别用abort(否则可能触发ORA-00265) -
startup mount—— 注意不是startup;如果这里卡住或报ORA-12514,说明监听没识别实例名,得先检查tnsnames.ora和listener.ora中的SERVICE_NAME/SID是否匹配 - 确认状态:
archive log list返回Database log mode No Archive Mode后,再执行alter database archivelog
归档路径未设置或空间不足导致备份失败
DBS 备份预检失败,90% 是因为归档路径不可写、空间满,或压根没配 log_archive_dest_1。Oracle 默认用 db_recovery_file_dest,但这个目录常只有几 GB,不够撑几天归档日志。
关键操作不是“设了就行”,而是验证是否生效:
- 查当前配置:
show parameter db_recovery_file_dest和show parameter log_archive_dest_1 - 手动建目录并赋权(Linux):
mkdir -p /u01/arch,然后chown oracle:oinstall /u01/arch - 设路径(立即生效+持久化):
alter system set log_archive_dest_1='LOCATION=/u01/arch' scope=both - 验证可写:
!ls -ld /u01/arch(SQL*Plus 里用!调系统命令),确保 oracle 用户有读写权限 - 查空间:
select * from V$FLASH_RECOVERY_AREA_USAGE;,若ARCHIVED LOG行的percent_space_used接近 100%,就得清理或扩容
ORA-00265:异常关闭后无法切归档模式
执行 startup mount 后立刻 alter database archivelog 报 ORA-00265: instance recovery required...,说明上次是 shutdown abort 或崩溃关机,控制文件和数据文件 SCN 不一致。
不能跳过恢复强行切归档。必须:
- 先
alter database open—— 让 Oracle 自动做实例恢复(会花点时间,取决于重做日志量) - 等
open成功后,再shutdown immediate→startup mount→alter database archivelog - 如果
open阶段报错(如文件丢失),就得走介质恢复流程,不能硬切
备份前必须手动归档一次再验证
很多用户设完路径、切完模式就去跑 DBS 备份,结果还是失败——因为刚切完归档模式,当前重做日志还没被归档,ARCHIVELOG 进程可能还没真正启动。
安全做法是:
- 切完归档后,立即执行:
alter system switch logfile(强制切一组新日志) - 再执行:
alter system archive log current(把刚切出来的这组日志归档掉) - 最后
archive log list看Next log sequence to archive是否大于Current log sequence,且Automatic archival显示Enabled - 这时再跑 DBS 预检,基本不会挂
归档模式本身不难切,难的是状态干净、路径可用、日志已归档这三个条件同时满足。漏掉任意一个,备份工具都会拒绝接手。











