在 Oracle 12c 之前,如果误删一张表,常规的方法是 Flashback 闪回或 TSPITR。而开启 flashback 会消耗磁盘空间,且如果被 purge 或者经过 DDL,将无法 flashback。如果需要恢复的表空间过大,TSPITR 会耗时非常久。12c 中提供了Table Recovery 的新特性,可以针对单表(或单个表分区)基于时间点进行恢复,该特性用以直接从 RMAN 备份中恢复表的方法,该特性有以下特点:
-
不影响数据库中的其他数据库对象
-
减少时间和磁盘空间的消耗,和早期的 TSPIRT 工作流程类似
-
从另一个磁盘路径恢复表空间
-
导出想要的表数据
-
导入到原数据库(可选)
recover table 可以将一个或多个表或表分区恢复到指定的时间点,而不会影响其余的数据库对象。可以使用以前创建的 RMAN 备份将表和表分区恢复到指定的时间点。
该表被恢复到一个辅助实例中,并且可以选择:
-
使用 REMAP 选项将恢复的表导入新表或分区
-
仅在恢复的表中创建 expdp dump 文件,以便在其他时间进行导入
RMAN> RECOVER TABLE zyq.t_recover_test
until time "to_date('2018-06-28 23:56:06','yyyy-mm-dd hh24:mi:ss')"
AUXILIARY DESTINATION '/data01'
REMAP TABLE zyq.t_recover_test:t_recover_test_map;2> 3> 4>