rman单表恢复本质是自动拉起临时库导出再导入,必须连cdb$root、显式指定until scn和auxiliary destination,且恢复后需手动重建索引、约束与触发器。

不能跳过辅助实例直接恢复单张表——所谓“单表恢复”,本质是 RMAN 自动拉起一个临时库(auxiliary instance),导出再导入。你必须为它准备好空间、归档和权限,否则命令静默失败或报错。
必须连 CDB$ROOT 才能执行 RECOVER TABLE
哪怕你要恢复的是某个 PDB 里的表,RMAN 也必须连接到 CDB$ROOT,不能直接连进 PDB。误连 PDB 时,RECOVER TABLE 不会报错,但实际不触发任何恢复流程。
- 验证当前连接位置:
SELECT SYS_CONTEXT('USERENV', 'CON_NAME') FROM DUAL;返回值必须是CDB$ROOT - 正确连接方式:
rman target /(确保 OS 用户是oracle,且ORACLE_SID指向 CDB 实例名) - 错误连接常见报错:
ORA-19554、ORA-65096
UNTIL SCN 必须显式指定,不能省略
RMAN 不支持恢复到“最新状态”,漏写时间点会报 RMAN-06571: no recoverable copy of datafile found。目标 SCN 必须早于 DROP/TRUNCATE 的 SCN,且归档日志链不能断。
- 查误操作前一刻的 SCN:
SELECT CURRENT_SCN FROM V$DATABASE;(执行前先做一次快照) - 优先用 SCN 而非时间字符串,避免 NLS 或时区导致偏移
- 若用
UNTIL TIME,格式必须严格为"TO_DATE('20260514 153000','yyyymmdd hh24miss')",少空格或大小写错就解析失败 - 归档缺失关键序列号(比如 DDL 前后那几个)会卡在
ORA-19921: no arc
AUXILIARY DESTINATION 路径必须可写且空间充足
不指定该参数,RMAN 会在 DB_CREATE_FILE_DEST 下建临时文件,极易因空间不足卡死,错误却只显示 ORA-19809 或 RMAN-03002,不提“磁盘满”。
- 路径需满足:有足够空间(建议为被恢复 PDB 数据文件总大小的 2–3 倍)、Oracle 用户有读写权限(
chown oracle:oinstall /u01/oradata/aux、chmod 755 /u01/oradata/aux) - 辅助实例默认日志存于
$ORACLE_BASE/admin/<sid>/adump</sid>,也要确保该目录可写 - 检查恢复区剩余空间:
SELECT NAME, SPACE_LIMIT/1024/1024/1024 GB_LIMIT, SPACE_USED/1024/1024/1024 GB_USED FROM V$RECOVERY_FILE_DEST;
恢复后索引、约束、触发器不会自动重建
RECOVER TABLE 只导出数据行,不导出表结构定义、索引、外键、CHECK 约束或触发器。即使表能查到数据,业务可能已悄然失效。
- 主键缺失会导致重复插入,NOT NULL 约束未启用会破坏数据完整性
- 若用
REMAP TABLE恢复为新表名,且原表含显式命名的 NOT NULL 约束(如CONSTRAINT emp_name_nn CHECK (name IS NOT NULL)),会报ORA-39083 - 稳妥做法:恢复后手动补约束、重建索引、重置触发器,并验证逻辑一致性
最容易被忽略的是:恢复成功 ≠ 数据可用。表能查出数据,不代表主键存在、外键生效、触发器已启用——这些都得人工核对,否则上线后问题才暴露。











