快照备库需严格按闪回路径操作:先确认FRA空间充足(SPACE_USED/SPACE_LIMIT≤0.85)、停MRP进程(查V$MANAGED_STANDBY确保MRP0为空或IDLE)、执行CONVERT TO SNAPSHOT STANDBY后必须OPEN,否则报ORA-01033;FRA须用本地文件系统或ASM,禁用NFS。

快照备库不是“打开读写就能压测”的快捷开关,它是一次性隔离环境,必须严格按闪回机制路径走;跳过FRA空间检查、没停MRP、漏掉ALTER DATABASE OPEN,压测还没开始就卡在MOUNTED或报ORA-38705。
确认FRA空间是否撑得住压测流量
压测期间的redo生成量远超日常归档——插入100万行、批量更新订单表、建索引等操作都会快速填满快速恢复区(FRA)。FRA不足会导致RVWR进程失败,后续所有闪回动作都失效。
-
SELECT NAME, SPACE_LIMIT, SPACE_USED FROM V$RECOVERY_FILE_DEST必须执行,SPACE_USED / SPACE_LIMIT > 0.85 就得清理或扩容 - FRA路径不能是NFS挂载点,只接受本地文件系统或ASM磁盘组;否则
CONVERT TO SNAPSHOT STANDBY会静默失败 - 建议预估压测2小时归档量 + 备库自身DML产生的redo(例如:每行200字节 × 100万行 ≈ 200MB),FRA总空间至少留出1.5倍余量
-
ALTER SYSTEM SET db_recovery_file_dest_size=... SCOPE=BOTH漏掉SCOPE=BOTH,实例重启后配置丢失,压测中途可能突然报ORA-19809
停日志应用不是发CANCEL就完事
物理备库在READ ONLY WITH APPLY模式下无法直接转快照;ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL只是下发指令,MRP进程未必立刻退出。强行下一步,大概率触发ORA-16139: media recovery required并hang住。
- 必须轮询查:
SELECT PROCESS, STATUS, CLIENT_PROCESS FROM V$MANAGED_STANDBY WHERE PROCESS = 'MRP0' - 返回空行,或
STATUS = 'IDLE'才算真正停止;若仍是APPLYING_LOG,等3–5秒再查 - 三步不可省:
SHUTDOWN IMMEDIATE→STARTUP MOUNT→ 再执行转换;仅ALTER DATABASE RECOVER ... CANCEL后直接CONVERT,90%失败
转换后不OPEN,压测连连接都建立不了
ALTER DATABASE CONVERT TO SNAPSHOT STANDBY只改控制文件标记,数据库仍处于MOUNTED状态。此时用sqlplus / as sysdba连会报ORA-01033: ORACLE initialization or shutdown in progress,根本没法建表、插数据、跑脚本。
- 顺序铁律:
ALTER DATABASE CONVERT TO SNAPSHOT STANDBY→ALTER DATABASE OPEN - 验证是否生效:
SELECT DATABASE_ROLE, OPEN_MODE FROM V$DATABASE,结果必须是SNAPSHOT STANDBY+READ WRITE - 压测前顺手建个测试表:
CREATE TABLE t_load_test AS SELECT * FROM dual CONNECT BY LEVEL ,能成功说明环境已就绪
压测结束切回物理备库前,别忘了关JOB和清理临时对象
压测过程创建的表、索引、分区、甚至临时用户,会在切回物理备库时被彻底擦除——但JOB不会自动停,如果job_queue_processes还开着,切回途中可能触发作业执行,干扰MRP进程启动。
- 压测完毕,先停作业:
ALTER SYSTEM SET job_queue_processes = 0 - 手动清理压测专用对象(如
DROP TABLE t_load_test),避免切换后残留元数据影响监控 - 切回命令是
ALTER DATABASE CONVERT TO PHYSICAL STANDBY,执行后必须SHUTDOWN IMMEDIATE+STARTUP MOUNT,再ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT - 最易忽略的一点:切回后要等MRP真正开始应用日志(
STATUS = 'APPLYING_LOG'),再查V$DATAGUARD_STATS确认延迟归零,才算压测闭环完成


















