ITPub博客

首页 > 数据库 > Oracle > 12c恢复表到指定时刻

12c恢复表到指定时刻

原创 Oracle 作者:hooca 时间:2016-07-01 13:51:41 0 删除 编辑
在12c之前,TSPITR 只能恢复表空间,对于其中的schema对象则无能为力。比如一个表空间中有多个schema,如果想还原其中一个schema到之前的状态,则整个表空间内的其他schema也要还原到以前的状态。

从12c开始,可以通过recover table,只对部分表恢复到早前状态,不影响其他对象。

其工作原理是:先创建一个辅助实例,然后restore表空间SYSTEM, SYSAUX, UNDO和所需恢复对象所在的表空间,recover到指定的时刻。接下来通过Data Pump导出辅助库中的表,导入到主库。最后自动关闭辅助实例。

前提条件:
1)必须有早前的备份,备份时间要早于期望恢复的时刻;
2)必须处于归档模式,且有完整的备份之后的归档日志;
3)备份的对象要包括SYSTEM, SYSAUX, UNDO表空间,PDB的话还需要同时包含CDB的上述3个表空间的备份。一般对CDB做一次全备即可全部包含。

下例中对PDB1里,SH用户下的CUSTOMERS表做恢复测试:

首先,对CDB做全备。然后记下时间。

点击(此处)折叠或打开

  1. SQL> select sysdate from dual;

  2. SYSDATE
  3. -------------------
  4. 2016-07-01 12:08:46
接下来尝试破坏表CUSTOMERS

点击(此处)折叠或打开

  1. SQL> truncate table customers;
创建即将用作辅助库的目录/u01/aux

然后就可以进入RMAN开始恢复了,注意:虽然要恢复的是PDB中的数据,但RMAN必须连接到CDB

点击(此处)折叠或打开

  1. recover table sh.customers of pluggable database pdb1
  2. until time "to_date('2016-07-01 12:08:46','yyyy-mm-dd hh24:mi:ss')"
  3. auxiliary destination '/u01/aux'
  4. remap table sh.customers:customers_recvr;
等到全部完成后,就可以在schema下看到customers_recvr这个表,也可以选择直接恢复到customers,前提是原库中已删除这个表。

补充:如果要恢复多个表,命令如下:

点击(此处)折叠或打开

  1. RECOVER TABLE SCOTT.EMP, SCOTT.DEPT
  2.       UNTIL TIME "TO_CHAR('12/23/2012 12:00:00','mm/dd/yyyy hh24:mi:ss')"
  3.       AUXILIARY DESTINATION '/tmp/oracle/recover'
  4.       REMAP TABLESPACE 'EXAMPLE':'MY_TBS';


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22621861/viewspace-2121327/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-09-29

  • 博文量
    210
  • 访问量
    378343