必须先停日志应用再执行convert命令,否则报ORA-38784或ORA-01153;备库须MOUNT状态且非READ ONLY WITH APPLY;FRA必须配置但无需开启Flashback;转换后需显式open才能读写;切回物理备库前须确保归档日志完整。
必须先停掉日志应用,再执行 alter database convert to snapshot standby,否则会报 ora-38784 或 ora-01153 错误。
物理备库在转换前不能是 READ ONLY WITH APPLY 状态,哪怕只差一秒的延迟也不行。常见错误现象是执行 alter database convert to snapshot standby 时直接报错:ORA-38784: Cannot create restore point... 或 ORA-01153: an incompatible media recovery is active。
正确操作顺序是:
alter database recover managed standby database cancel;
v$database 的 open_mode 必须是 MOUNTED,database_role 是 PHYSICAL STANDBY
OPEN READ ONLY,需先 shutdown immediate 再 startup mount
DB_RECOVERY_FILE_DEST 和 DB_RECOVERY_FILE_DEST_SIZE 是硬性要求,否则转换会失败;但 FLASHBACK_ON = NO 完全不影响 Snapshot Standby 功能——Oracle 内部会自动创建 guaranteed restore point,不依赖你手动开闪回。
检查方式:
show parameter db_recovery_file_dest —— 路径和大小都得非空select FLASHBACK_ON from v$database; —— 返回 NO 没问题MOUNT 后再转换alter database open 才能读写alter database convert to snapshot standby 只改角色和状态,数据库仍停留在 MOUNTED,此时还不能连入或建表。必须紧接着执行 alter database open,才能进入 READ WRITE 模式。
验证是否生效:
select database_role, open_mode from v$database; 应返回 SNAPSHOT STANDBY 和 READ WRITE
ARCHIVED_LOG 会增长),只是不应用(MRP 进程停止)不是简单重启或执行反向命令就行。真正容易被忽略的是:切回前必须确保主库传来的所有归档日志已在备库本地可用,否则恢复过程会卡在“等待缺失日志”上。
推荐步骤:
shutdown immediate
MOUNT 状态:startup mount
alter database convert to physical standby;(此步会自动删除内部 restore point)alter database recover managed standby database using current logfile disconnect;
v$archive_gap 是否为空,v$managed_standby 中 MRP 进程是否 RUNNING如果主库在 Snapshot 期间产生了大量日志,而备库归档目录空间不足或网络中断过,切回时可能需要手动拷贝缺失归档或使用增量备份恢复——这点在生产环境压测前必须预估好归档吞吐和存储余量。