12c恢復表到指定時刻

hooca發表於2016-07-01
在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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章