Oracle 12c使用RMAN備份對Non-CDB中的表按時間點進行恢復
RMAN使用recover命令來將表或表分割槽恢復到指定的時間點。為了從RMAN備份中恢復表與表分割槽,你必須提供以下資訊:
.要被恢復的表或表分割槽
.表或表分割槽要被恢復到的特定時間點
.被恢復的表或表分割槽是否要被匯入到目標資料庫中
RMAN使用這些資訊來自動對錶或表分割槽執行恢復操作。作為恢復處理的一部分,RMAN會建立一個輔助資料庫用來將表或表分割槽恢復到指定的時間點。如果被恢復的表或表分割槽需要被重新命名,對映到新表空間或對映到新方案中,那麼必須指定新的表名,表空間名或方案名。
當從RMAN備份中自動處理表或表分割槽的恢復操作時RMAN將會執行以下步驟:
1.基於指定的恢復時間點來判斷包含被恢復表或表分割槽的是那個備份檔案。
2.判斷在目標主機上是否有足夠的空間用來建立輔助例項來執行對錶或表分割槽的恢復操作,如果沒有足夠空間,那麼RMAN將會顯示錯誤資訊並且退出恢復操作。
3.在目標主機上建立一個輔助資料庫並且在輔助資料庫中將指定的表或表分割槽恢復到指定的時間點。可以在目標主機上指定儲存輔助資料庫相關恢復資料檔案的目錄。
4.建立對恢復的表或表分割槽使用Data Pump進行匯出。可以指定用來儲存被恢復表或表分割槽後設資料的dump檔案的檔名與儲存目錄。
5.可選操作,將步驟4匯出的表或表分割槽匯入到目標資料庫中。可以選擇不將包含被恢復表或表分割槽匯出dump檔案匯入到目標資料庫中。如果選擇不將匯出dump檔案匯入目標資料庫作為恢復操作的一部分,那麼之後必須使用Data Pump匯入工具進行匯入操作。
6.可選操作,在目標資料庫中重新命名被恢復的表或表分割槽。也可以將被恢復的物件匯入與它原始表空間或方案不同的表空間或方案中。
RMAN表恢復操作時輔助資料庫檔案的儲存目錄
為了恢復指定的表或表分割槽,RMAN會建立一個輔助資料庫在恢復操作時使用。使用以下一種方法來在目標主機上指定用來儲存輔助資料庫檔案的目錄:
.在recover命令中指定auxiliary destination子句。
.使用set newname命令。在run塊中使用recover命令並且使用set newname命令來重新命名資料檔案。
建議透過使用auxiliary destination子句來為輔助資料庫的資料檔案指定儲存目錄。當使用set newname命令時,即使是隻對恢復操作所請求的一個資料檔案沒有執行set newname命令,那麼就不能對錶或表分割槽執行恢復操作。
RMAN恢復表與表分割槽操作中所使用的Data Pump匯出dump檔案
當在輔助資料庫中將表或表分割槽恢復到指定的時間點之後,RMAN會建立包含被恢復物件的Data Pump匯出dump檔案。可以指定dump檔案的檔名與位置或者允許RMAN使用預設的檔名與位置。在recover命令中使用datapump destination子句來指定建立Data Pump匯出dump檔案的儲存目錄。這個目錄通常是作業系統目錄路徑來儲存dump檔案。如果忽略這個子句,dump檔案會被儲存在由auxiliary destination引數所指定的目錄中。如果不指定輔助目錄,那麼dump檔案會被儲存在預設作業系統特定的目錄中。在Linux作業系統中,預設目錄為$ORACLE_HOME/dbs。在Windows作業系統中,預設目錄為%ORACLE_HOME\database。在recover命令中使用dump file子句來指定建立Data Pump匯出dump檔案的儲存目錄。如果忽略這個子句,RMAN使用預設作業系統特定的dump檔名。在Linux與Windows作業系統中,預設的dump檔名為tspitr_SID-of-clone_n.dmp,SID-of-clone是RMAN在執行恢復操作時所建立的輔助資料庫的Oracle SID,其中n是任意隨機生成的數字。如果由dump file所指定的檔名在目錄中已經存在,那麼恢復操作將會失敗。
將被恢復的表與表分割槽匯入到目標資料庫
預設情況下,RMAN會將儲存在dump檔案中的被恢復表或表分割槽匯入到目標資料庫中。然而,可以選擇在recover命令中使用notableimport子句來避免將被恢復的表或表分割槽匯入到目標資料庫中。當notableimport子句被使用時,RMAN會將表或表分割槽恢復到指定的時間點,然後建立匯出dump檔案。然而,這個dump檔案不會被匯入到目標資料庫中。當需要時可以透過手動使用Data Pump匯入工具將dump檔案匯入到目標資料庫。如果在匯入操作時出現了錯誤,RMAN在表恢復操作結束時不會刪除匯出dump檔案。這可以讓你手動匯入dump檔案。
對被恢復的表與表分割槽進行重新命名
當你恢復表或表分割槽時,可以在它們被匯入到目標資料庫後進行重新命名。remap table子句可以用來對目標資料庫中被恢復的表或表分割槽進行重新命名。為了將被恢復的表或表分割槽匯入與原始物件所儲存的不同表空間,可以在recover命令中使用remap tablespace子句。只有被恢復的表或表分割槽會被重新對映,已有的物件不會發生改變。如果目標資料庫中有與被恢復物件同名的物件,RMAN會顯示錯誤資訊指示需要使用remap table子句來重新命名被恢復的表。當恢復表分割槽時,每個表分割槽被恢復成一個單獨的表。使用remap table子句來指定每個被恢復的分割槽在匯入時所使用的表名。如果沒有顯式地指定表名,RMAN會透過組合被恢復的表與分割槽名來生成表名。生成的表名格式為tablename_partitionname。如果表名在目標資料庫中已經存在了,那麼RMAN會在表名後加上_1。如果這個表名也存在了,那麼就在表名後加上_2依此類推。當使用remap選項時,任何命名約束與索引不會被匯入。這可以避免與現有表發生衝突。
將表與分割槽恢復到新使用者方案中
將表或表分割槽恢復到不同的使用者方案中可以避免與原使用者方案中已經存在的約束,索引或觸發器名字發生命名衝突。從Oracle 12.2開始,可以將表或表分割槽恢復到與原使用者方案不同的使用者方案中。當將物件恢復到不同使用者方案中時,可以保留它們的原始名字或重新命名。在單個恢復操作中可以重新命名錶與重新對映使用者方案。例如,可以將hr.employees表恢復成new_hr.employees表,hr.new_employees表或new_hr.new_employees表。remap table子句能讓你重新命名物件並且將它們恢復到不同的使用者方案中。在執行表恢復操作時,對recover table命令使用remap table子句來將原使用者方案對映成新使用者方案。在執行恢復操作之前新使用者方案必須先在目標資料庫中存在。表恢復在物理備庫中不支援。對於邏輯備庫,在主庫中執行的物件恢復也會被同步到邏輯備庫。
使用RMAN備份來恢復表與表分割槽的限制
當使用recover命令與RMAN備份來恢復表或表分割槽時存在以下限制:
.sys使用者方案中的表與表分割槽不能被恢復。
.system與sysaux表空間中的表與表分割槽不能被恢復。
.備庫中的表與表分割槽不能被恢復。
.有not null約束的表在使用remap選項時不能被恢復。
恢復表與表分割槽所需要的準備工作
使用RMAN備份來恢復表或表分割槽所需要的準備工作如下:
.驗證恢復表或表分割槽所需要的條件是否滿足。
.判斷表或表分割槽需要被恢復到的時間點。
.決定是否要將被恢復的表或表分割槽匯入到目標資料庫中。預設情況下,RMAN會將被恢復的表或表分割槽匯入到目標資料庫中。然而可以指定RMAN不志入被恢復的物件。
.決定是否要對被恢復的表或表分割槽進行重新命名,對映到新表空間或對映到新使用者方案。
使用RMAN備份恢復表與表分割槽的先決條件
.目標資料庫必須處於讀寫狀態。
.目標資料庫必須處於歸檔模式。
.對於這些物件所恢復的時間點來說被恢復的表或表分割槽必須有RMAN備份。
.為了恢復單個表分割槽,目標資料庫的compatible引數必須被設定為11.1.0或更高版本。
判斷表與表分割槽所要被恢復到的時間點
判斷表或表分割槽所要被恢復到的時間點是非常重要的。RMAN可以使用以下一種方法來指定恢復時間點:
.SCN,將表或表分割槽恢復到由SCN所指定的時間點。
.Time(時間),將表或表分割槽恢復到指定的時間點。所使用的日期格式是由NLS_LANG與NLS_DATE_FORMAT環境變數所組成的。也可以使用資料常量比如SYSDATE來指定時間,例如SYSDATE-30。
.Sequence number(日誌序列號),將表或表分割槽恢復到由日誌序列號與日誌執行緒號所指定的時間點。
恢復表與表分割槽
下面將描述對Non-CDB中的表或表分割槽恢復到指定時間點的操作步驟。
1.執行恢復表與表分割槽所需要的準備工作
.驗證恢復表或表分割槽所需要的條件是否滿足。
.判斷表或表分割槽需要被恢復到的時間點。
.決定是否要將被恢復的表或表分割槽匯入到目標資料庫中。預設情況下,RMAN會將被恢復的表或表分割槽匯入到目標資料庫中。然而可以指定RMAN不志入被恢復的物件。
.決定是否要對被恢復的表或表分割槽進行重新命名,對映到新表空間或對映到新使用者方案。
2.啟動RMAN並使用有sysbacup或sysdba許可權的使用者連線到目標資料庫。
3.透過使用recover table命令將要被恢復的表或表分割槽恢復到指定的時間點。必須使用auxiliary destination子句與以下子句中的一個用來指定恢復時間點:until time,until scn或until sequence。在recover命令中還
可以使用以下子句:
.dump file與datapump destination,指定包含被恢復表或表分割槽的匯出dump檔案的檔名與儲存位置。
.notableimport,指示被恢復的表或表分割槽不用匯入到目標資料庫。
.remap table,在目標資料庫中將被恢復的表或表分割槽進行重新命名。這個子句也可用來將原使用者方案中的表或表分割槽恢復到新使用者方案中。
.remap tablespace,將表與表分割槽恢復到與原始表空間不同的表空間中。
下面的例子使用RMAN備份對錶t_emp進行按時間點恢復
1.對整個Non-CDB(orcl)生成RMAN備份
RMAN> backup as compressed backupset database format '+data/backup/%d_%I_%U_%t' plus archivelog format 'arc_%d_%T_%U'; Starting backup at 10-JAN-18 current log archived using channel ORA_DISK_1 channel ORA_DISK_1: starting compressed archived log backup set channel ORA_DISK_1: specifying archived log(s) in backup set input archived log thread=1 sequence=13 RECID=1 STAMP=964995986 input archived log thread=1 sequence=14 RECID=2 STAMP=965007422 input archived log thread=1 sequence=15 RECID=3 STAMP=965007493 input archived log thread=1 sequence=16 RECID=4 STAMP=965007542 input archived log thread=1 sequence=17 RECID=5 STAMP=965011311 input archived log thread=1 sequence=18 RECID=6 STAMP=965011687 channel ORA_DISK_1: starting piece 1 at 10-JAN-18 channel ORA_DISK_1: finished piece 1 at 10-JAN-18 piece handle=/u01/app/oracle/product/12.2.0/db/dbs/arc_ORCL_20180110_21so9q78_1_1 tag=TAG20180110T024807 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:15 Finished backup at 10-JAN-18 Starting backup at 10-JAN-18 using channel ORA_DISK_1 channel ORA_DISK_1: starting compressed full datafile backup set channel ORA_DISK_1: specifying datafile(s) in backup set input datafile file number=00004 name=+DATA/orcl/datafile/users01.dbf input datafile file number=00001 name=+DATA/orcl/datafile/system01.dbf input datafile file number=00002 name=+DATA/orcl/datafile/sysaux01.dbf input datafile file number=00003 name=+DATA/orcl/datafile/undotbs01.dbf input datafile file number=00005 name=+DATA/orcl/datafile/usertbs01.dbf channel ORA_DISK_1: starting piece 1 at 10-JAN-18 channel ORA_DISK_1: finished piece 1 at 10-JAN-18 piece handle=+DATA/backup/orcl_1492772871_22so9q7p_1_1_965011705 tag=TAG20180110T024824 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:45 Finished backup at 10-JAN-18 Starting backup at 10-JAN-18 current log archived using channel ORA_DISK_1 channel ORA_DISK_1: starting compressed archived log backup set channel ORA_DISK_1: specifying archived log(s) in backup set input archived log thread=1 sequence=19 RECID=7 STAMP=965011751 channel ORA_DISK_1: starting piece 1 at 10-JAN-18 channel ORA_DISK_1: finished piece 1 at 10-JAN-18 piece handle=/u01/app/oracle/product/12.2.0/db/dbs/arc_ORCL_20180110_23so9q98_1_1 tag=TAG20180110T024912 comment=NONE channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01 Finished backup at 10-JAN-18 Starting Control File and SPFILE Autobackup at 10-JAN-18 piece handle=+DATA/backup/c-1492772871-20180110-01 comment=NONE Finished Control File and SPFILE Autobackup at 10-JAN-18
2.在刪除表t_emp中記錄之前記錄當前scn與時間,在執行恢復時它們被用來指定恢復時間點
SQL> select count(*) from t_emp; COUNT(*) ---------- 107 1 row selected. SQL> select sysdate from dual; SYSDATE ------------------- 2018-01-10 02:50:10 1 row selected. SQL> select current_scn from v$database; CURRENT_SCN ----------- 399411 1 row selected. SQL> delete from t_emp; 107 rows deleted. SQL> commit; Commit complete. SQL> select count(*) from t_emp; COUNT(*) ---------- 0 1 row selected.
3.啟動RMAN並使用有sysbacup或sysdba許可權的使用者連線到目標資料庫。
[oracle@jytest3 ~]$ rman target/ Recovery Manager: Release 12.2.0.1.0 - Production on Wed Jan 10 02:22:13 2018 Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved. connected to target database: ORCL (DBID=1492772871)
4.透過使用recover table命令將要被恢復的表或表分割槽恢復到指定的時間點。 使用auxiliary destination子句(/ora_xtts/recover輔助資料檔案儲存目錄)與until scn來指定恢復時間點,並且在recover命令中使用子句dump file與datapump destination,指定包含被恢復表或表分割槽的匯出dump檔案的檔名(t_emp.dmp)與儲存位置(/ora_xtts/dump)。使用notableimport子句指示被恢復的表或表分割槽不用匯入到目標資料庫。
RMAN> run 2> { 3> recover table hr.t_emp 4> until scn 399411 5> auxiliary destination '/ora_xtts/recover' 6> datapump destination '/ora_xtts/dump' 7> dump file 't_emp.dmp' 8> notableimport; 9> } Starting recover at 10-JAN-18 using channel ORA_DISK_1 RMAN-05026: warning: presuming following set of tablespaces applies to specified point-in-time List of tablespaces expected to have UNDO segments Tablespace SYSTEM Tablespace UNDOTBS1 Creating automatic instance, with SID='fcsj' initialization parameters used for automatic instance: db_name=ORCL db_unique_name=fcsj_pitr_ORCL compatible=12.2.0 db_block_size=8192 db_files=200 diagnostic_dest=/u01/app/oracle _system_trig_enabled=FALSE sga_target=1024M processes=120 db_create_file_dest=/ora_xtts/recover log_archive_dest_1='location=/ora_xtts/recover' #No auxiliary parameter file used starting up automatic instance ORCL Oracle instance started Total System Global Area 1073741824 bytes Fixed Size 8628936 bytes Variable Size 293602616 bytes Database Buffers 763363328 bytes Redo Buffers 8146944 bytes Automatic instance created contents of Memory Script: { # set requested point in time set until scn 399411; # restore the controlfile restore clone controlfile; # mount the controlfile sql clone 'alter database mount clone database'; # archive current online log sql 'alter system archive log current'; } executing Memory Script executing command: SET until clause Starting restore at 10-JAN-18 allocated channel: ORA_AUX_DISK_1 channel ORA_AUX_DISK_1: SID=6 device type=DISK channel ORA_AUX_DISK_1: starting datafile backup set restore channel ORA_AUX_DISK_1: restoring control file channel ORA_AUX_DISK_1: reading from backup piece +DATA/backup/c-1492772871-20180110-01 channel ORA_AUX_DISK_1: piece handle=+DATA/backup/c-1492772871-20180110-01 tag=TAG20180110T024913 channel ORA_AUX_DISK_1: restored backup piece 1 channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:05 output file name=/ora_xtts/recover/ORCL/controlfile/o1_mf_f5b4xmpo_.ctl Finished restore at 10-JAN-18 sql statement: alter database mount clone database sql statement: alter system archive log current contents of Memory Script: { # set requested point in time set until scn 399411; # set destinations for recovery set and auxiliary set datafiles set newname for clone datafile 1 to new; set newname for clone datafile 3 to new; set newname for clone datafile 2 to new; set newname for clone tempfile 1 to new; # switch all tempfiles switch clone tempfile all; # restore the tablespaces in the recovery set and the auxiliary set restore clone datafile 1, 3, 2; switch clone datafile all; } executing Memory Script executing command: SET until clause executing command: SET NEWNAME executing command: SET NEWNAME executing command: SET NEWNAME executing command: SET NEWNAME renamed tempfile 1 to /ora_xtts/recover/ORCL/datafile/o1_mf_tempts1_%u_.tmp in control file Starting restore at 10-JAN-18 using channel ORA_AUX_DISK_1 channel ORA_AUX_DISK_1: starting datafile backup set restore channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set channel ORA_AUX_DISK_1: restoring datafile 00001 to /ora_xtts/recover/ORCL/datafile/o1_mf_system_%u_.dbf channel ORA_AUX_DISK_1: restoring datafile 00003 to /ora_xtts/recover/ORCL/datafile/o1_mf_undotbs1_%u_.dbf channel ORA_AUX_DISK_1: restoring datafile 00002 to /ora_xtts/recover/ORCL/datafile/o1_mf_sysaux_%u_.dbf channel ORA_AUX_DISK_1: reading from backup piece +DATA/backup/orcl_1492772871_22so9q7p_1_1_965011705 channel ORA_AUX_DISK_1: piece handle=+DATA/backup/orcl_1492772871_22so9q7p_1_1_965011705 tag=TAG20180110T024824 channel ORA_AUX_DISK_1: restored backup piece 1 channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:45 Finished restore at 10-JAN-18 datafile 1 switched to datafile copy input datafile copy RECID=4 STAMP=965013098 file name=/ora_xtts/recover/ORCL/datafile/o1_mf_system_f5b4xwvo_.dbf datafile 3 switched to datafile copy input datafile copy RECID=5 STAMP=965013098 file name=/ora_xtts/recover/ORCL/datafile/o1_mf_undotbs1_f5b4xwx2_.dbf datafile 2 switched to datafile copy input datafile copy RECID=6 STAMP=965013098 file name=/ora_xtts/recover/ORCL/datafile/o1_mf_sysaux_f5b4xwwj_.dbf contents of Memory Script: { # set requested point in time set until scn 399411; # online the datafiles restored or switched sql clone "alter database datafile 1 online"; sql clone "alter database datafile 3 online"; sql clone "alter database datafile 2 online"; # recover and open database read only recover clone database tablespace "SYSTEM", "UNDOTBS1", "SYSAUX"; sql clone 'alter database open read only'; } executing Memory Script executing command: SET until clause sql statement: alter database datafile 1 online sql statement: alter database datafile 3 online sql statement: alter database datafile 2 online Starting recover at 10-JAN-18 using channel ORA_AUX_DISK_1 starting media recovery archived log for thread 1 with sequence 19 is already on disk as file +DATA/arch/orcl/1_19_964992135.dbf archived log for thread 1 with sequence 20 is already on disk as file +DATA/arch/orcl/1_20_964992135.dbf archived log file name=+DATA/arch/orcl/1_19_964992135.dbf thread=1 sequence=19 archived log file name=+DATA/arch/orcl/1_20_964992135.dbf thread=1 sequence=20 media recovery complete, elapsed time: 00:00:00 Finished recover at 10-JAN-18 sql statement: alter database open read only contents of Memory Script: { sql clone "create spfile from memory"; shutdown clone immediate; startup clone nomount; sql clone "alter system set control_files = ''/ora_xtts/recover/ORCL/controlfile/o1_mf_f5b4xmpo_.ctl'' comment= ''RMAN set'' scope=spfile"; shutdown clone immediate; startup clone nomount; # mount database sql clone 'alter database mount clone database'; } executing Memory Script sql statement: create spfile from memory database closed database dismounted Oracle instance shut down connected to auxiliary database (not started) Oracle instance started Total System Global Area 1073741824 bytes Fixed Size 8628936 bytes Variable Size 293602616 bytes Database Buffers 763363328 bytes Redo Buffers 8146944 bytes sql statement: alter system set control_files = ''/ora_xtts/recover/ORCL/controlfile/o1_mf_f5b4xmpo_.ctl'' comment= ''RMAN set'' scope=spfile Oracle instance shut down connected to auxiliary database (not started) Oracle instance started Total System Global Area 1073741824 bytes Fixed Size 8628936 bytes Variable Size 293602616 bytes Database Buffers 763363328 bytes Redo Buffers 8146944 bytes sql statement: alter database mount clone database contents of Memory Script: { # set requested point in time set until scn 399411; # set destinations for recovery set and auxiliary set datafiles set newname for datafile 4 to new; # restore the tablespaces in the recovery set and the auxiliary set restore clone datafile 4; switch clone datafile all; } executing Memory Script executing command: SET until clause executing command: SET NEWNAME Starting restore at 10-JAN-18 allocated channel: ORA_AUX_DISK_1 channel ORA_AUX_DISK_1: SID=7 device type=DISK channel ORA_AUX_DISK_1: starting datafile backup set restore channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set channel ORA_AUX_DISK_1: restoring datafile 00004 to /ora_xtts/recover/FCSJ_PITR_ORCL/datafile/o1_mf_users_%u_.dbf channel ORA_AUX_DISK_1: reading from backup piece +DATA/backup/orcl_1492772871_22so9q7p_1_1_965011705 channel ORA_AUX_DISK_1: piece handle=+DATA/backup/orcl_1492772871_22so9q7p_1_1_965011705 tag=TAG20180110T024824 channel ORA_AUX_DISK_1: restored backup piece 1 channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:01:15 Finished restore at 10-JAN-18 datafile 4 switched to datafile copy input datafile copy RECID=8 STAMP=965013242 file name=/ora_xtts/recover/FCSJ_PITR_ORCL/datafile/o1_mf_users_f5b51h8p_.dbf contents of Memory Script: { # set requested point in time set until scn 399411; # online the datafiles restored or switched sql clone "alter database datafile 4 online"; # recover and open resetlogs recover clone database tablespace "USERS", "SYSTEM", "UNDOTBS1", "SYSAUX" delete archivelog; alter clone database open resetlogs; } executing Memory Script executing command: SET until clause sql statement: alter database datafile 4 online Starting recover at 10-JAN-18 using channel ORA_AUX_DISK_1 starting media recovery archived log for thread 1 with sequence 19 is already on disk as file +DATA/arch/orcl/1_19_964992135.dbf archived log for thread 1 with sequence 20 is already on disk as file +DATA/arch/orcl/1_20_964992135.dbf archived log file name=+DATA/arch/orcl/1_19_964992135.dbf thread=1 sequence=19 archived log file name=+DATA/arch/orcl/1_20_964992135.dbf thread=1 sequence=20 media recovery complete, elapsed time: 00:00:01 Finished recover at 10-JAN-18 database opened contents of Memory Script: { # create directory for datapump import sql "create or replace directory TSPITR_DIROBJ_DPDIR as '' /ora_xtts/dump''"; # create directory for datapump export sql clone "create or replace directory TSPITR_DIROBJ_DPDIR as '' /ora_xtts/dump''"; } executing Memory Script sql statement: create or replace directory TSPITR_DIROBJ_DPDIR as ''/ora_xtts/dump'' sql statement: create or replace directory TSPITR_DIROBJ_DPDIR as ''/ora_xtts/dump'' Performing export of tables... EXPDP> Starting "SYS"."TSPITR_EXP_fcsj_pkfh": EXPDP> Processing object type TABLE_EXPORT/TABLE/TABLE_DATA EXPDP> Processing object type TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS EXPDP> Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS EXPDP> Processing object type TABLE_EXPORT/TABLE/STATISTICS/MARKER EXPDP> Processing object type TABLE_EXPORT/TABLE/TABLE EXPDP> Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX EXPDP> . . exported "HR"."T_EMP" 17.08 KB 107 rows EXPDP> Master table "SYS"."TSPITR_EXP_fcsj_pkfh" successfully loaded/unloaded EXPDP> ****************************************************************************** EXPDP> Dump file set for SYS.TSPITR_EXP_fcsj_pkfh is: EXPDP> /ora_xtts/dump/t_emp.dmp EXPDP> Job "SYS"."TSPITR_EXP_fcsj_pkfh" successfully completed at Wed Jan 10 03:15:08 2018 elapsed 0 00:00:32 Export completed Not performing table import after point-in-time recovery Removing automatic instance shutting down automatic instance Oracle instance shut down Automatic instance removed auxiliary instance file /ora_xtts/recover/ORCL/datafile/o1_mf_tempts1_f5b4zhf9_.tmp deleted auxiliary instance file /ora_xtts/recover/FCSJ_PITR_ORCL/onlinelog/o1_mf_3_f5b53yp4_.log deleted auxiliary instance file /ora_xtts/recover/FCSJ_PITR_ORCL/onlinelog/o1_mf_2_f5b53yol_.log deleted auxiliary instance file /ora_xtts/recover/FCSJ_PITR_ORCL/onlinelog/o1_mf_1_f5b53ynw_.log deleted auxiliary instance file /ora_xtts/recover/FCSJ_PITR_ORCL/datafile/o1_mf_users_f5b51h8p_.dbf deleted auxiliary instance file /ora_xtts/recover/ORCL/datafile/o1_mf_sysaux_f5b4xwwj_.dbf deleted auxiliary instance file /ora_xtts/recover/ORCL/datafile/o1_mf_undotbs1_f5b4xwx2_.dbf deleted auxiliary instance file /ora_xtts/recover/ORCL/datafile/o1_mf_system_f5b4xwvo_.dbf deleted auxiliary instance file /ora_xtts/recover/ORCL/controlfile/o1_mf_f5b4xmpo_.ctl deleted Finished recover at 10-JAN-18
如果會使用remap table子句將hr.t_emp恢復成jy.t_emp_recvr。使用remap tablespace子句將表t_emp從users表空間恢復到usertbs表空間。那麼可以執行下面的命令來進行恢復就不需要執行步驟5
RMAN> run 2> { 3> recover table hr.t_emp 4> until scn 399411 5> auxiliary destination '/ora_xtts/recover' 6> datapump destination '/ora_xtts/dump' 7> dump file 't_emp_recvr.dmp' 8> remap table 'HR'.'T_EMP':'JY'.'T_EMP_NEW' 9> remap tablespace 'USERS':'USERTBS'; 10> } Starting recover at 10-JAN-18 current log archived using channel ORA_DISK_1 RMAN-05026: warning: presuming following set of tablespaces applies to specified point-in-time List of tablespaces expected to have UNDO segments Tablespace SYSTEM Tablespace UNDOTBS1 Creating automatic instance, with SID='jzdF' initialization parameters used for automatic instance: db_name=ORCL db_unique_name=jzdF_pitr_ORCL compatible=12.2.0 db_block_size=8192 db_files=200 diagnostic_dest=/u01/app/oracle _system_trig_enabled=FALSE sga_target=1024M processes=120 db_create_file_dest=/ora_xtts/recover log_archive_dest_1='location=/ora_xtts/recover' #No auxiliary parameter file used starting up automatic instance ORCL Oracle instance started Total System Global Area 1073741824 bytes Fixed Size 8628936 bytes Variable Size 293602616 bytes Database Buffers 763363328 bytes Redo Buffers 8146944 bytes Automatic instance created contents of Memory Script: { # set requested point in time set until scn 399411; # restore the controlfile restore clone controlfile; # mount the controlfile sql clone 'alter database mount clone database'; # archive current online log sql 'alter system archive log current'; } executing Memory Script executing command: SET until clause Starting restore at 10-JAN-18 allocated channel: ORA_AUX_DISK_1 channel ORA_AUX_DISK_1: SID=6 device type=DISK channel ORA_AUX_DISK_1: starting datafile backup set restore channel ORA_AUX_DISK_1: restoring control file channel ORA_AUX_DISK_1: reading from backup piece +DATA/backup/c-1492772871-20180110-02 channel ORA_AUX_DISK_1: piece handle=+DATA/backup/c-1492772871-20180110-02 tag=TAG20180110T200959 channel ORA_AUX_DISK_1: restored backup piece 1 channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:04 output file name=/ora_xtts/recover/ORCL/controlfile/o1_mf_f5d2402v_.ctl Finished restore at 10-JAN-18 sql statement: alter database mount clone database sql statement: alter system archive log current contents of Memory Script: { # set requested point in time set until scn 399411; # set destinations for recovery set and auxiliary set datafiles set newname for clone datafile 1 to new; set newname for clone datafile 3 to new; set newname for clone datafile 2 to new; set newname for clone tempfile 1 to new; # switch all tempfiles switch clone tempfile all; # restore the tablespaces in the recovery set and the auxiliary set restore clone datafile 1, 3, 2; switch clone datafile all; } executing Memory Script executing command: SET until clause executing command: SET NEWNAME executing command: SET NEWNAME executing command: SET NEWNAME executing command: SET NEWNAME renamed tempfile 1 to /ora_xtts/recover/ORCL/datafile/o1_mf_tempts1_%u_.tmp in control file Starting restore at 10-JAN-18 using channel ORA_AUX_DISK_1 channel ORA_AUX_DISK_1: starting datafile backup set restore channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set channel ORA_AUX_DISK_1: restoring datafile 00001 to /ora_xtts/recover/ORCL/datafile/o1_mf_system_%u_.dbf channel ORA_AUX_DISK_1: restoring datafile 00003 to /ora_xtts/recover/ORCL/datafile/o1_mf_undotbs1_%u_.dbf channel ORA_AUX_DISK_1: restoring datafile 00002 to /ora_xtts/recover/ORCL/datafile/o1_mf_sysaux_%u_.dbf channel ORA_AUX_DISK_1: reading from backup piece +DATA/backup/orcl_1492772871_26sobn77_1_1_965074151 channel ORA_AUX_DISK_1: piece handle=+DATA/backup/orcl_1492772871_26sobn77_1_1_965074151 tag=TAG20180110T200911 channel ORA_AUX_DISK_1: restored backup piece 1 channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:45 Finished restore at 10-JAN-18 datafile 1 switched to datafile copy input datafile copy RECID=4 STAMP=965075765 file name=/ora_xtts/recover/ORCL/datafile/o1_mf_system_f5d248q8_.dbf datafile 3 switched to datafile copy input datafile copy RECID=5 STAMP=965075766 file name=/ora_xtts/recover/ORCL/datafile/o1_mf_undotbs1_f5d248r7_.dbf datafile 2 switched to datafile copy input datafile copy RECID=6 STAMP=965075766 file name=/ora_xtts/recover/ORCL/datafile/o1_mf_sysaux_f5d248qv_.dbf contents of Memory Script: { # set requested point in time set until scn 399411; # online the datafiles restored or switched sql clone "alter database datafile 1 online"; sql clone "alter database datafile 3 online"; sql clone "alter database datafile 2 online"; # recover and open database read only recover clone database tablespace "SYSTEM", "UNDOTBS1", "SYSAUX"; sql clone 'alter database open read only'; } executing Memory Script executing command: SET until clause sql statement: alter database datafile 1 online sql statement: alter database datafile 3 online sql statement: alter database datafile 2 online Starting recover at 10-JAN-18 using channel ORA_AUX_DISK_1 starting media recovery archived log for thread 1 with sequence 24 is already on disk as file +DATA/arch/orcl/1_24_964992135.dbf archived log for thread 1 with sequence 25 is already on disk as file +DATA/arch/orcl/1_25_964992135.dbf archived log file name=+DATA/arch/orcl/1_24_964992135.dbf thread=1 sequence=24 archived log file name=+DATA/arch/orcl/1_25_964992135.dbf thread=1 sequence=25 media recovery complete, elapsed time: 00:00:01 Finished recover at 10-JAN-18 sql statement: alter database open read only contents of Memory Script: { sql clone "create spfile from memory"; shutdown clone immediate; startup clone nomount; sql clone "alter system set control_files = ''/ora_xtts/recover/ORCL/controlfile/o1_mf_f5d2402v_.ctl'' comment= ''RMAN set'' scope=spfile"; shutdown clone immediate; startup clone nomount; # mount database sql clone 'alter database mount clone database'; } executing Memory Script sql statement: create spfile from memory database closed database dismounted Oracle instance shut down connected to auxiliary database (not started) Oracle instance started Total System Global Area 1073741824 bytes Fixed Size 8628936 bytes Variable Size 293602616 bytes Database Buffers 763363328 bytes Redo Buffers 8146944 bytes sql statement: alter system set control_files = ''/ora_xtts/recover/ORCL/controlfile/o1_mf_f5d2402v_.ctl'' comment= ''RMAN set'' scope=spfile Oracle instance shut down connected to auxiliary database (not started) Oracle instance started Total System Global Area 1073741824 bytes Fixed Size 8628936 bytes Variable Size 293602616 bytes Database Buffers 763363328 bytes Redo Buffers 8146944 bytes sql statement: alter database mount clone database contents of Memory Script: { # set requested point in time set until scn 399411; # set destinations for recovery set and auxiliary set datafiles set newname for datafile 4 to new; # restore the tablespaces in the recovery set and the auxiliary set restore clone datafile 4; switch clone datafile all; } executing Memory Script executing command: SET until clause executing command: SET NEWNAME Starting restore at 10-JAN-18 allocated channel: ORA_AUX_DISK_1 channel ORA_AUX_DISK_1: SID=7 device type=DISK channel ORA_AUX_DISK_1: starting datafile backup set restore channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set channel ORA_AUX_DISK_1: restoring datafile 00004 to /ora_xtts/recover/JZDF_PITR_ORCL/datafile/o1_mf_users_%u_.dbf channel ORA_AUX_DISK_1: reading from backup piece +DATA/backup/orcl_1492772871_26sobn77_1_1_965074151 channel ORA_AUX_DISK_1: piece handle=+DATA/backup/orcl_1492772871_26sobn77_1_1_965074151 tag=TAG20180110T200911 channel ORA_AUX_DISK_1: restored backup piece 1 channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:55 Finished restore at 10-JAN-18 datafile 4 switched to datafile copy input datafile copy RECID=8 STAMP=965075892 file name=/ora_xtts/recover/JZDF_PITR_ORCL/datafile/o1_mf_users_f5d27wvd_.dbf contents of Memory Script: { # set requested point in time set until scn 399411; # online the datafiles restored or switched sql clone "alter database datafile 4 online"; # recover and open resetlogs recover clone database tablespace "USERS", "SYSTEM", "UNDOTBS1", "SYSAUX" delete archivelog; alter clone database open resetlogs; } executing Memory Script executing command: SET until clause sql statement: alter database datafile 4 online Starting recover at 10-JAN-18 using channel ORA_AUX_DISK_1 starting media recovery archived log for thread 1 with sequence 24 is already on disk as file +DATA/arch/orcl/1_24_964992135.dbf archived log for thread 1 with sequence 25 is already on disk as file +DATA/arch/orcl/1_25_964992135.dbf archived log file name=+DATA/arch/orcl/1_24_964992135.dbf thread=1 sequence=24 archived log file name=+DATA/arch/orcl/1_25_964992135.dbf thread=1 sequence=25 media recovery complete, elapsed time: 00:00:00 Finished recover at 10-JAN-18 database opened contents of Memory Script: { # create directory for datapump import sql "create or replace directory TSPITR_DIROBJ_DPDIR as '' /ora_xtts/dump''"; # create directory for datapump export sql clone "create or replace directory TSPITR_DIROBJ_DPDIR as '' /ora_xtts/dump''"; } executing Memory Script sql statement: create or replace directory TSPITR_DIROBJ_DPDIR as ''/ora_xtts/dump'' sql statement: create or replace directory TSPITR_DIROBJ_DPDIR as ''/ora_xtts/dump'' Performing export of tables... EXPDP> Starting "SYS"."TSPITR_EXP_jzdF_fxiC": EXPDP> Processing object type TABLE_EXPORT/TABLE/TABLE_DATA EXPDP> Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS EXPDP> Processing object type TABLE_EXPORT/TABLE/STATISTICS/MARKER EXPDP> Processing object type TABLE_EXPORT/TABLE/TABLE EXPDP> . . exported "HR"."T_EMP" 17.08 KB 107 rows EXPDP> Master table "SYS"."TSPITR_EXP_jzdF_fxiC" successfully loaded/unloaded EXPDP> ****************************************************************************** EXPDP> Dump file set for SYS.TSPITR_EXP_jzdF_fxiC is: EXPDP> /ora_xtts/dump/t_emp_recvr.dmp EXPDP> Job "SYS"."TSPITR_EXP_jzdF_fxiC" successfully completed at Wed Jan 10 20:39:09 2018 elapsed 0 00:00:32 Export completed contents of Memory Script: { # shutdown clone before import shutdown clone abort } executing Memory Script Oracle instance shut down Performing import of tables... IMPDP> Master table "SYS"."TSPITR_IMP_jzdF_BDce" successfully loaded/unloaded IMPDP> Starting "SYS"."TSPITR_IMP_jzdF_BDce": IMPDP> Processing object type TABLE_EXPORT/TABLE/TABLE IMPDP> Processing object type TABLE_EXPORT/TABLE/TABLE_DATA IMPDP> . . imported "JY"."T_EMP_NEW" 17.08 KB 107 rows IMPDP> Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS IMPDP> Processing object type TABLE_EXPORT/TABLE/STATISTICS/MARKER IMPDP> Job "SYS"."TSPITR_IMP_jzdF_BDce" successfully completed at Wed Jan 10 20:39:47 2018 elapsed 0 00:00:31 Import completed Removing automatic instance Automatic instance removed auxiliary instance file /ora_xtts/recover/ORCL/datafile/o1_mf_tempts1_f5d25tp8_.tmp deleted auxiliary instance file /ora_xtts/recover/JZDF_PITR_ORCL/onlinelog/o1_mf_3_f5d29sj0_.log deleted auxiliary instance file /ora_xtts/recover/JZDF_PITR_ORCL/onlinelog/o1_mf_2_f5d29shf_.log deleted auxiliary instance file /ora_xtts/recover/JZDF_PITR_ORCL/onlinelog/o1_mf_1_f5d29sgs_.log deleted auxiliary instance file /ora_xtts/recover/JZDF_PITR_ORCL/datafile/o1_mf_users_f5d27wvd_.dbf deleted auxiliary instance file /ora_xtts/recover/ORCL/datafile/o1_mf_sysaux_f5d248qv_.dbf deleted auxiliary instance file /ora_xtts/recover/ORCL/datafile/o1_mf_undotbs1_f5d248r7_.dbf deleted auxiliary instance file /ora_xtts/recover/ORCL/datafile/o1_mf_system_f5d248q8_.dbf deleted auxiliary instance file /ora_xtts/recover/ORCL/controlfile/o1_mf_f5d2402v_.ctl deleted auxiliary instance file t_emp_recvr.dmp deleted Finished recover at 10-JAN-18
5.透過t_emp.dmp檔案將表t_emp中的資料匯入
[oracle@jytest3 dump]$ impdp hr/hr@orcl dumpfile=dump_dir:t_emp.dmp Import: Release 12.2.0.1.0 - Production on Wed Jan 10 03:23:34 2018 Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved. Connected to: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production Master table "HR"."SYS_IMPORT_FULL_01" successfully loaded/unloaded Starting "HR"."SYS_IMPORT_FULL_01": hr/********@orcl dumpfile=dump_dir:t_emp.dmp Processing object type TABLE_EXPORT/TABLE/TABLE ORA-39151: Table "HR"."T_EMP" exists. All dependent metadata and data will be skipped due to table_exists_action of skip Processing object type TABLE_EXPORT/TABLE/TABLE_DATA Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX Processing object type TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS Processing object type TABLE_EXPORT/TABLE/STATISTICS/MARKER Job "HR"."SYS_IMPORT_FULL_01" completed with 1 error(s) at Wed Jan 10 03:23:51 2018 elapsed 0 00:00:10
報錯是因為表t_emp已經存在,impdp的預設操作就是跳過對這張表進行匯入操作,所以需要使用選項table_exists_action=truncate來進行匯入。
[oracle@jytest3 dump]$ impdp hr/hr@orcl dumpfile=dump_dir:t_emp.dmp table_exists_action=truncate Import: Release 12.2.0.1.0 - Production on Wed Jan 10 03:29:10 2018 Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved. Connected to: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production Master table "HR"."SYS_IMPORT_FULL_01" successfully loaded/unloaded Starting "HR"."SYS_IMPORT_FULL_01": hr/********@orcl dumpfile=dump_dir:t_emp.dmp table_exists_action=truncate Processing object type TABLE_EXPORT/TABLE/TABLE Table "HR"."T_EMP" exists and has been truncated. Data will be loaded but all dependent metadata will be skipped due to table_exists_action of truncate Processing object type TABLE_EXPORT/TABLE/TABLE_DATA . . imported "HR"."T_EMP" 17.08 KB 107 rows Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX Processing object type TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS Processing object type TABLE_EXPORT/TABLE/STATISTICS/MARKER Job "HR"."SYS_IMPORT_FULL_01" successfully completed at Wed Jan 10 03:29:30 2018 elapsed 0 00:00:18
6.驗證表t_emp中的記錄,可以看到已經成功恢復到被刪了記錄之前的狀態。
SQL> select count(*) from t_emp; COUNT(*) ---------- 107
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26015009/viewspace-2150032/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle 12C使用UNTIL SEQUENCE子句對Non-CDB中的表執行按時間點恢復Oracle
- RMAN中使用until time子句對Non-CDB中的表執行按時間點恢復
- 使用RMAN對PDB執行按時間點恢復
- 使用RMAN對CDB執行按時間點恢復
- 執行RMAN表空間及時點恢復——使用者管理備份和恢復手冊
- 對read only表空間進行熱備份和使用備份的controlfile進行恢復時的一點總結!
- ORACLE利用STANDBY端RMAN備份進行資料恢復Oracle資料恢復
- 【RMAN】使用RMAN備份將資料庫不完全恢復到指定時間點資料庫
- [RMAN]使用RMAN備份將資料庫不完全恢復到指定時間點資料庫
- Oracle 12C RMAN備份佔用大量臨時表空間Oracle
- oracle實驗記錄 (恢復-表空間基於時間點恢復(rman))Oracle
- oracle rman備份恢復的例子Oracle
- Oracle rman 備份與恢復 臨時表空間的檔案問題解決Oracle
- 使用mysqldump對mysql進行備份和恢復MySql
- 使用xtrabackup對mysql進行備份和恢復MySql
- Oracle 10g備份與恢復高階使用者指南--第八章 RMAN表空間時間點恢復(TSPITR)Oracle 10g
- Oracle 12C使用RMAN將Non-CDB中分表的多個分割槽恢復到新使用者方案中Oracle
- 用RMAN執行表空間及時點恢復——RMAN使用者手冊
- 刪除表空間,有rman全備的恢復(使用dbms_backup_restore來進行恢復)REST
- 使用NetBackup進行oracle備份和恢復Oracle
- 【RMAN】表空間基於時間點的RMAN恢復-TSPITR
- 【恢復】基於使用者管理的熱備份對非系統表空間的損壞進行恢復
- oracle rman備份驗證和備份/恢復進度監控Oracle
- mongodb使用備份後的oplog做時間點恢復MongoDB
- oracle RMAN 備份恢復總結Oracle
- oracle RMAN 備份恢復總結Oracle
- 備份&恢復系列之二:在linux中對oracle進行熱備份的指令碼!LinuxOracle指令碼
- Oracle RMAN 表空間恢復Oracle
- SQL Server中使用臨時表進行資料備份與恢復SQLServer
- Oracle 12c 備份與恢復Oracle
- 循序漸進oracle第7章:備份與恢復之RMAN的簡單備份與恢復Oracle
- 獲取rman備份/恢復執行進度資訊
- 非系統表空間損壞,rman備份恢復
- 備份&恢復系列之三:在linux中對oracle用rman指令碼備份!LinuxOracle指令碼
- Oracle 12C新特性-RMAN恢復表Oracle
- Oracle的RMAN備份恢復,先從進入RMAN開始總結Oracle
- Oracle 12C使用RMAN將Non-CDB中多個使用者方案中的多個表或表分割槽恢復到新使用者方案中Oracle
- 使用logmnr,在RMAN備份檔案中恢復備份的歸檔日誌檔案進行分析