ora-01153本质是恢复状态残留而非数据文件损坏,根本原因是mrp进程未彻底退出、v$database.recovery_status仍为active或控制文件残留恢复标记,导致激活或重启mrp时发生上下文冲突。

ORA-01153报错本质是恢复状态残留,不是文件损坏
这个错误不是数据文件出问题,而是 Oracle 内部认为“媒体恢复还在进行中”,但你要执行的操作(比如 ALTER DATABASE ACTIVATE STANDBY DATABASE 或再次启动 MRP)和当前恢复上下文冲突。典型表现是刚执行过 RECOVER MANAGED STANDBY DATABASE CANCEL,立刻激活或重启应用就报错。
根本原因在于:MRP 进程没真正退出、V$DATABASE.RECOVERY_STATUS 仍为 ACTIVE、或者控制文件里还带着未清理的恢复标记。它不看你有没有 kill -9 进程,而看 Oracle 内核状态是否已重置。
必须先确认并清除残留恢复状态
别急着重启实例,先查清楚卡在哪:
-
SELECT PROCESS, STATUS, THREAD#, SEQUENCE#, BLOCK# FROM V$MANAGED_STANDBY;—— 如果MRP0的STATUS是APPLYING_LOG或WAIT_FOR_LOG,说明 MRP 没停干净 -
SELECT RECOVERY_STATUS FROM V$DATABASE;—— 返回ACTIVE就代表内核仍认为恢复在运行 -
ps -ef | grep mrp(Linux)或tasklist | findstr mrp(Windows)—— 看 OS 层是否还有mrp0进程活着
实操建议:
- 如果
MRP0还在运行,执行ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;,等 10 秒后立刻查V$MANAGED_STANDBY,确认状态变成NOT APPLYING - 如果进程已消失但
V$DATABASE.RECOVERY_STATUS仍是ACTIVE,直接SHUTDOWN IMMEDIATE+STARTUP MOUNT,这是最稳妥的上下文重置方式 - 绝对不要在
OPEN状态下尝试激活 ——ALTER DATABASE ACTIVATE STANDBY DATABASE要求数据库必须处于MOUNT状态
激活前必须校验的三个硬性条件
ORA-01153 往往是前置检查漏掉导致的“伪错误”。这三个点一个都不能跳过:
-
SELECT OPEN_MODE, DATABASE_ROLE FROM V$DATABASE;必须返回MOUNTED和PHYSICAL STANDBY;如果是READ ONLY,得先SHUTDOWN IMMEDIATE再STARTUP MOUNT - 归档日志必须全部应用:对比
SELECT MAX(SEQUENCE#) FROM V$ARCHIVED_LOG WHERE APPLIED = 'YES';和SELECT MAX(SEQUENCE#) FROM V$ARCHIVED_LOG WHERE DEST_ID = 1;,两个值必须严格相等 - 控制文件必须最新:如果之前用
CREATE CONTROLFILE或从旧备份恢复过,CONTROLFILE_TYPE可能还是STANDBY,但内部 SCN 已脱节,此时需重建 standby 控制文件
重复执行 cancel + start 导致报错的典型场景
很多人遇到 ORA-01153 是因为连续两次执行了 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;,中间只做了一次 CANCEL。Oracle 对恢复会话有状态缓存,一次 cancel 不一定立即释放所有上下文。
正确做法是:
- 执行
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; - 等待至少 10 秒,再查
V$MANAGED_STANDBY确认无 MRP 进程 - 如果仍报 ORA-01153,不要反复 cancel/start,直接
SHUTDOWN IMMEDIATE+STARTUP MOUNT,再重新启动 MRP - 启动时优先用
USING CURRENT LOGFILE,避免因日志切换间隙引发新冲突
最容易被忽略的是:即使你看到告警日志里写了 “Media Recovery Cancelled”,也不能代表内核状态已同步 —— 必须以 V$DATABASE.RECOVERY_STATUS 和 V$MANAGED_STANDBY 为准。











