您好,登錄后才能下訂單哦!
小編給大家分享一下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
以上是“Oracle 12c如何使用RMAN備份對Non-CDB中的表按時間點進行恢復”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。