前言:
Oracle12c退出了新功能基于时间点的recover table,可以从备份里面基于时间快速恢复表或者表分区,并且支持通过remap将恢复的表更换为其他表名或者将恢复的表通过expdp导出为dmp,这个功能可以使我们更加快速的进行表数据的恢复。
recover table:
能够将一个或多个表或表分区恢复到指定的时间点,而不影响其余的数据库对象。可以使用以前创建的RMAN备份将表和表分区恢复到指定的时间点。
在以下场景中非常有用:
需要将非常少量的表恢复到特定的时间点。在这种情况下,TSPITR不是最有效的解决方案,因为它将表空间中的所有对象恢复到指定的时间点。
需要恢复逻辑损坏或已经删除和清除的表。
无法进行flashback table,因为所需的时间点的undo已经过期。
恢复DDL操作修改表结构后丢失的数据。无法使用flashback table,flashback table无法对结构更改的表(如截断表操作)进行闪回数据。
recover table的前提:
目标数据库必须是读写模式
目标数据库必须开启归档模式
要恢复时间点的表或者表分区要有恢复时间点的备份文件
如果要恢复单个表分区,目标数据库的参数 COMPATIBLE需要11.1.0或以上
辅助实例的数据文件存储空间要足够,需要存放system,sysaux,undo以及需要恢复表所在的表空间
需要对undo、SYSTEM、SYSAUX和包含表或表分区的表空间进行完全备份,包含表的依赖对象的所有分区都必须包含在恢复集中。如果表空间tbs1中的表的索引或分区包含在表空间tbs2中,那么只有当表空间tbs2也包含在恢复集中时,才能恢复该表
要恢复PDB中的表,需要root,pdb$seed以及恢复PDB的SYSTEM、SYSAUX和undo表空间以及包含pdb表或分区的表空间
恢复可以基于time,scn,或者log sequence number
如果要从cdb里面恢复,需要通过cdb的服务名连接rman,否则可能出现以下错误
- The ROOT container SYSTEM and UNDO tablespaces are restored to the auxiliary therefore RECOVER TABLE has to be run after a direct connection to ROOT CDB. If a service_name is not used, RMAN will fail during export:
-
- % rman target / log /tmp/recover_table.log
- RMAN> RECOVER TABLE SMEDS."RECTEST" OF PLUGGABLE DATABASE T12CPDB1
- UNTIL SEQUENCE 48 THREAD 1
- AUXILIARY DESTINATION '/testcases/rectbl/'
- REMAP TABLE 'SMEDS'.'RECTEST':'TEST_RECTEST';
-
- RMAN-00571: ===========================================================
- RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
- RMAN-00571: ===========================================================
- RMAN-03002: failure of recover command at 01/21/2013 15:24:19
- RMAN-06962: Error received during export of metadata
- RMAN-06960: EXPDP> ORA-31626: job does not exist
- ORA-31633: unable to create master table "SYSBACKUP.TSPITR_EXP_xoxr_CDcd"
- ORA-01552: cannot use system rollback segment for non-system tablespace 'USERS'
recover table恢复的步骤:
根据恢复指定的时间点,确定哪个备份包含需要恢复的表或表分区。
确定目标主机上是否有足够的空间来创建恢复过程中使用的辅助实例。如果所需的空间不足,则RMAN显示错误并退出恢复操作。
在目标主机上创建一个辅助数据库,并根据时间点以及表或表分区恢复到这个辅助数据库中。可以指定恢复的数据文件存储在辅助数据库中的目标主机上的位置。
创建Data Pump导出dmp文件,其中包含恢复的表或表分区。可以指定Data Pump导出dmp文件的名称和位置,该文件用于存储恢复的表或表分区的元数据。
(可选)导入恢复的表或表分区dmp文件到目标实例中。也可以选择不导入到目标数据库。如果在恢复过程中不导入dmp文件,则需要使用Data Pump import手动导入它。
(可选)重命名目标数据库中恢复的表或表分区。还可以将恢复的对象导入不同于它们最初存在的表空间或者用户或者表名之下
recover table的测试:
模拟误删除场景
- ---在PDB ebsdb里面创建测试数据
- alter session set container=ebsdb;
- alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
- create tablespace tbstest1 datafile size 100M;
- create tablespace tbstest2 datafile size 100M;
- create tablespace tbstest3 datafile size 100M;
- create tablespace tbstest4 datafile size 100M;
- create table test.test_part
- (id number ,
- insertdate date
- )
- partition by range(id)
- (partition p_10 values less than (10) tablespace tbstest1,
- partition p_20 values less than (20) tablespace tbstest2,
- partition p_30 values less than (30) tablespace tbstest3,
- partition p_40 values less than (40) tablespace tbstest4
- );
- insert into test.test_part values(1,sysdate);
- insert into test.test_part values(11,sysdate);
- insert into test.test_part values(21,sysdate);
- insert into test.test_part values(31,sysdate);
- commit;
-
- ---进行全量备份
- run{
- allocate channel c1 type disk;
- allocate channel c2 type disk;
- allocate channel c3 type disk;
- backup as compressed backupset database format='/backup/%d_full_%s_%p.bak';
- backup archivelog all format='/backup/%d_arch_%s_%p.bak' delete all input;
- release channel c1;
- release channel c2;
- release channel c3;
- }
- ---再插入数据
- alter session set container=ebsdb;
- alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
- insert into test.test_part values(22,sysdate);
- commit;
- ---模拟误删除drop p_20分区数据
- alter session set container=ebsdb;
- alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
- select sysdate from dual;
- select * from test.test_part;
-
- SQL> select sysdate from dual;
-
- SYSDATE
- -------------------
- 2022-11-09 15:18:11
-
- SQL> select * from test.test_part;
-
- ID INSERTDATE
- ---------- -------------------
- 1 2022-11-09 15:15:24
- 11 2022-11-09 15:15:25
- 21 2022-11-09 15:15:25
- 22 2022-11-09 15:18:00
- 31 2022-11-09 15:15:25
-
- SQL>
- alter table test.test_part drop partition p_20;
-
- ---再插入数据,用于验证表数据恢复会不会影响表空间里面的其他数据
- alter session set container=ebsdb;
- alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
- insert into test.test_part values(12,sysdate);
- commit;
- create table test.test_recover(insertdate date) tablespace tbstest2;
- insert into test.test_recover values(sysdate);
- commit;
- ---在备份归档
- run{
- allocate channel c1 type disk;
- allocate channel c2 type disk;
- allocate channel c3 type disk;
- backup archivelog all format='/backup/%d_arch_%s_%p.bak' delete all input;
- release channel c1;
- release channel c2;
- release channel c3;
- }
测试从备份里面恢复时间点表分区数据
由于恢复操作都在辅助实例上,除了导入数据到目标数据库,其他操作没有在目标数据库上进行,所以目标数据库在整个恢复的操作过程中基本没有影响的,
但在实际的生产恢复中,为了最大化的不影响误删数据现场以及减少数据库的运行,在条件允许的情况下,还是建议在备库进行操作,以确保整个恢复的安全以下演示环境也在备库进行操作
- ---关闭主库的mrp进程
- alter database recover managed standby database cancel;
- ---failover激活备库,因为恢复需要在open write模式下进行,并且控制文件的类型不能为standby control,不能创建检查点
- #RMAN-05010: target database must be opened in READ WRITE mode for Tablespace Point-in-Time Recovery
- ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;
- ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
- alter database open;
- alter pluggable database all open instances=all;
-
- ---将备份发生到备库主机
- scp -rp /backup oracle@xxxxx:/
- ---并注册备份到控制文件,确保数据库可以访问到备份文件
- rman target /
- crosscheck backup
- catalog start with '/backup'
- ---在备库执行recover table恢复命令,恢复EBSDB PDB里面的表test_part的分区p20
- ---until time 恢复的时间点
- ---AUXILIARY DESTINATION 辅助实例的数据文件路径
- ---DATAPUMP DESTINATION 导出dmp文件的路径
- ---DATAPUMP FILE 导出的dmp文件名
- ---NOTABLEIMPORT 不导入目标数据库
- rman target sys/oracle@racpdg log /tmp/recover_table.log
- RECOVER TABLE "TEST"."TEST_PART":"P_20" OF PLUGGABLE DATABASE ebsdb
- UNTIL time "to_date('11/09/2022 15:18:11','MM/DD/YYYY HH24:MI:SS')"
- AUXILIARY DESTINATION '/u01/app/oracle/auxinstance'
- DATAPUMP DESTINATION '/tmp'
- DUMP FILE 'test_part_p20.dmp'
- NOTABLEIMPORT;
recover table日志解析
- RMAN> RECOVER TABLE "TEST"."TEST_PART":"P_20" OF PLUGGABLE DATABASE ebsdb
- 2> UNTIL time "to_date('11/09/2022 15:18:11','MM/DD/YYYY HH24:MI:SS')"
- 3> AUXILIARY DESTINATION '/u01/app/oracle/auxinstance'
- 4> DATAPUMP DESTINATION '/tmp'
- 5> DUMP FILE 'test_part_p20.dmp'
- 6> NOTABLEIMPORT;
-
- Starting recover at 2022/11/13 14:50:02
- using target database control file instead of recovery catalog
- allocated channel: ORA_DISK_1
- channel ORA_DISK_1: SID=14 device type=DISK
- 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 EBSDB:SYSTEM
- Tablespace UNDOTBS1
- Tablespace EBSDB:UNDOTBS1
- Tablespace EBSDB:UNDO_2
- ##############################创建辅助实例
- Creating automatic instance, with SID='helw'
-
- initialization parameters used for automatic instance:
- db_name=RACPDB
- db_unique_name=helw_pitr_ebsdb_RACPDB
- compatible=19.0.0
- db_block_size=8192
- db_files=200
- diagnostic_dest=/u01/app/oracle
- _system_trig_enabled=FALSE
- sga_target=2320M
- processes=200
- db_create_file_dest=/u01/app/oracle/auxinstance
- log_archive_dest_1='location=/u01/app/oracle/auxinstance'
- enable_pluggable_database=true
- _clone_one_pdb_recovery=true
- #No auxiliary parameter file used
-
-
- starting up automatic instance RACPDB
-
- Oracle instance started
-
- Total System Global Area 2432695632 bytes
-
- Fixed Size 9137488 bytes
- Variable Size 536870912 bytes
- Database Buffers 1879048192 bytes
- Redo Buffers 7639040 bytes
- Automatic instance created
- ##############################辅助实例上恢复控制文件
- contents of Memory Script:
- {
- # set requested point in time
- set until time "to_date('11/09/2022 15:18:11','MM/DD/YYYY HH24:MI:SS')";
- # 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 2022/11/13 14:50:15
- allocated channel: ORA_AUX_DISK_1
- channel ORA_AUX_DISK_1: SID=162 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 /backup/backup/c-2010038303-20221109-06
- channel ORA_AUX_DISK_1: piece handle=/backup/backup/c-2010038303-20221109-06 tag=TAG20221109T151657
- channel ORA_AUX_DISK_1: restored backup piece 1
- channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
- output file name=/u01/app/oracle/auxinstance/RACPDG/controlfile/o1_mf_kq14x83o_.ctl
- Finished restore at 2022/11/13 14:50:17
-
- sql statement: alter database mount clone database
-
- sql statement: alter system archive log current
- ##############################辅助实例上恢复root,pdb的数据文件undo,system,sysaux(不包括要恢复的表空间)
- contents of Memory Script:
- {
- # set requested point in time
- set until time "to_date('11/09/2022 15:18:11','MM/DD/YYYY HH24:MI:SS')";
- # set destinations for recovery set and auxiliary set datafiles
- set newname for clone datafile 1 to new;
- set newname for clone datafile 16 to new;
- set newname for clone datafile 5 to new;
- set newname for clone datafile 18 to new;
- set newname for clone datafile 19 to new;
- set newname for clone datafile 3 to new;
- set newname for clone datafile 17 to new;
- set newname for clone tempfile 1 to new;
- set newname for clone tempfile 5 to new;
- # switch all tempfiles
- switch clone tempfile all;
- # restore the tablespaces in the recovery set and the auxiliary set
- restore clone datafile 1, 16, 5, 18, 19, 3, 17;
-
- 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
-
- executing command: SET NEWNAME
-
- executing command: SET NEWNAME
-
- executing command: SET NEWNAME
-
- executing command: SET NEWNAME
-
- executing command: SET NEWNAME
-
- renamed tempfile 1 to /u01/app/oracle/auxinstance/RACPDG/datafile/o1_mf_temp_%u_.tmp in control file
- renamed tempfile 5 to /u01/app/oracle/auxinstance/RACPDG/ECDB7CD71FEB9A44E053DC01A8C0E647/datafile/o1_mf_temp_%u_.tmp in control file
-
- Starting restore at 2022/11/13 14:50:23
- 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 /u01/app/oracle/auxinstance/RACPDG/datafile/o1_mf_system_%u_.dbf
- channel ORA_AUX_DISK_1: restoring datafile 00003 to /u01/app/oracle/auxinstance/RACPDG/datafile/o1_mf_sysaux_%u_.dbf
- channel ORA_AUX_DISK_1: reading from backup piece /backup/backup/RACPDB_full_337_1.bak
- channel ORA_AUX_DISK_1: piece handle=/backup/backup/RACPDB_full_337_1.bak tag=TAG20221109T151547
- channel ORA_AUX_DISK_1: restored backup piece 1
- channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:25
- 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 00016 to /u01/app/oracle/auxinstance/RACPDG/ECDB7CD71FEB9A44E053DC01A8C0E647/datafile/o1_mf_system_%u_.dbf
- channel ORA_AUX_DISK_1: reading from backup piece /backup/backup/RACPDB_full_343_1.bak
- channel ORA_AUX_DISK_1: piece handle=/backup/backup/RACPDB_full_343_1.bak tag=TAG20221109T151547
- channel ORA_AUX_DISK_1: restored backup piece 1
- channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:15
- 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 00005 to /u01/app/oracle/auxinstance/RACPDG/datafile/o1_mf_undotbs1_%u_.dbf
- channel ORA_AUX_DISK_1: reading from backup piece /backup/backup/RACPDB_full_339_1.bak
- channel ORA_AUX_DISK_1: piece handle=/backup/backup/RACPDB_full_339_1.bak tag=TAG20221109T151547
- channel ORA_AUX_DISK_1: restored backup piece 1
- channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
- 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 00018 to /u01/app/oracle/auxinstance/RACPDG/ECDB7CD71FEB9A44E053DC01A8C0E647/datafile/o1_mf_undotbs1_%u_.dbf
- channel ORA_AUX_DISK_1: restoring datafile 00019 to /u01/app/oracle/auxinstance/RACPDG/ECDB7CD71FEB9A44E053DC01A8C0E647/datafile/o1_mf_undo_2_%u_.dbf
- channel ORA_AUX_DISK_1: reading from backup piece /backup/backup/RACPDB_full_338_1.bak
- channel ORA_AUX_DISK_1: piece handle=/backup/backup/RACPDB_full_338_1.bak tag=TAG20221109T151547
- channel ORA_AUX_DISK_1: restored backup piece 1
- channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:03
- 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 00017 to /u01/app/oracle/auxinstance/RACPDG/ECDB7CD71FEB9A44E053DC01A8C0E647/datafile/o1_mf_sysaux_%u_.dbf
- channel ORA_AUX_DISK_1: reading from backup piece /backup/backup/RACPDB_full_342_1.bak
- channel ORA_AUX_DISK_1: piece handle=/backup/backup/RACPDB_full_342_1.bak tag=TAG20221109T151547
- channel ORA_AUX_DISK_1: restored backup piece 1
- channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:15
- Finished restore at 2022/11/13 14:51:22
-
- datafile 1 switched to datafile copy
- input datafile copy RECID=8 STAMP=1120661483 file name=/u01/app/oracle/auxinstance/RACPDG/datafile/o1_mf_system_kq14xhqd_.dbf
- datafile 16 switched to datafile copy
- input datafile copy RECID=9 STAMP=1120661483 file name=/u01/app/oracle/auxinstance/RACPDG/ECDB7CD71FEB9A44E053DC01A8C0E647/datafile/o1_mf_system_kq14y8rr_.dbf
- datafile 5 switched to datafile copy
- input datafile copy RECID=10 STAMP=1120661483 file name=/u01/app/oracle/auxinstance/RACPDG/datafile/o1_mf_undotbs1_kq14yqt3_.dbf
- datafile 18 switched to datafile copy
- input datafile copy RECID=11 STAMP=1120661483 file name=/u01/app/oracle/auxinstance/RACPDG/ECDB7CD71FEB9A44E053DC01A8C0E647/datafile/o1_mf_undotbs1_kq14yrv9_.dbf
- datafile 19 switched to datafile copy
- input datafile copy RECID=12 STAMP=1120661483 file name=/u01/app/oracle/auxinstance/RACPDG/ECDB7CD71FEB9A44E053DC01A8C0E647/datafile/o1_mf_undo_2_kq14yrvq_.dbf
- datafile 3 switched to datafile copy
- input datafile copy RECID=13 STAMP=1120661483 file name=/u01/app/oracle/auxinstance/RACPDG/datafile/o1_mf_sysaux_kq14xhqs_.dbf
- datafile 17 switched to datafile copy
- input datafile copy RECID=14 STAMP=1120661483 file name=/u01/app/oracle/auxinstance/RACPDG/ECDB7CD71FEB9A44E053DC01A8C0E647/datafile/o1_mf_sysaux_kq14yvwc_.dbf
-
- contents of Memory Script:
- {
- # set requested point in time
- set until time "to_date('11/09/2022 15:18:11','MM/DD/YYYY HH24:MI:SS')";
- # online the datafiles restored or switched
- sql clone "alter database datafile 1 online";
- sql clone 'EBSDB' "alter database datafile
- 16 online";
- sql clone "alter database datafile 5 online";
- sql clone 'EBSDB' "alter database datafile
- 18 online";
- sql clone 'EBSDB' "alter database datafile
- 19 online";
- sql clone "alter database datafile 3 online";
- sql clone 'EBSDB' "alter database datafile
- 17 online";
- # recover and open database read only
- recover clone database tablespace "SYSTEM", "EBSDB":"SYSTEM", "UNDOTBS1", "EBSDB":"UNDOTBS1", "EBSDB":"UNDO_2", "SYSAUX", "EBSDB":"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 16 online
-
- sql statement: alter database datafile 5 online
-
- sql statement: alter database datafile 18 online
-
- sql statement: alter database datafile 19 online
-
- sql statement: alter database datafile 3 online
-
- sql statement: alter database datafile 17 online
-
- Starting recover at 2022/11/13 14:51:23
- using channel ORA_AUX_DISK_1
- ##############################辅助实例上对已经恢复的表空间undo,system,sysaux(不包括要恢复的表空间)recover到指定时间点
- starting media recovery
-
- archived log for thread 1 with sequence 99 is already on disk as file /u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch1_99_1120132767.dbf
- archived log for thread 1 with sequence 100 is already on disk as file /u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch1_100_1120132767.dbf
- archived log file name=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch1_99_1120132767.dbf thread=1 sequence=99
- archived log file name=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch1_100_1120132767.dbf thread=1 sequence=100
- media recovery complete, elapsed time: 00:00:00
- Finished recover at 2022/11/13 14:51:24
-
- sql statement: alter database open read only
-
- contents of Memory Script:
- {
- sql clone 'alter pluggable database EBSDB open read only';
- }
- executing Memory Script
-
- sql statement: alter pluggable database EBSDB open read only
- ##############################关闭辅助实例,然后重新启动到mount
- contents of Memory Script:
- {
- sql clone "create spfile from memory";
- shutdown clone immediate;
- startup clone nomount;
- sql clone "alter system set control_files =
- ''/u01/app/oracle/auxinstance/RACPDG/controlfile/o1_mf_kq14x83o_.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 2432695632 bytes
-
- Fixed Size 9137488 bytes
- Variable Size 536870912 bytes
- Database Buffers 1879048192 bytes
- Redo Buffers 7639040 bytes
-
- sql statement: alter system set control_files = ''/u01/app/oracle/auxinstance/RACPDG/controlfile/o1_mf_kq14x83o_.ctl'' comment= ''RMAN set'' scope=spfile
-
- Oracle instance shut down
-
- connected to auxiliary database (not started)
- Oracle instance started
-
- Total System Global Area 2432695632 bytes
-
- Fixed Size 9137488 bytes
- Variable Size 536870912 bytes
- Database Buffers 1879048192 bytes
- Redo Buffers 7639040 bytes
-
- sql statement: alter database mount clone database
- ##############################辅助实例上恢复表与表分区所在的表空间tbstest2
- contents of Memory Script:
- {
- # set requested point in time
- set until time "to_date('11/09/2022 15:18:11','MM/DD/YYYY HH24:MI:SS')";
- # set destinations for recovery set and auxiliary set datafiles
- set newname for datafile 65 to new;
- # restore the tablespaces in the recovery set and the auxiliary set
- restore clone datafile 65;
-
- switch clone datafile all;
- }
- executing Memory Script
-
- executing command: SET until clause
-
- executing command: SET NEWNAME
-
- Starting restore at 2022/11/13 14:52:30
- allocated channel: ORA_AUX_DISK_1
- channel ORA_AUX_DISK_1: SID=18 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 00065 to /u01/app/oracle/auxinstance/HELW_PITR_EBSDB_RACPDB/ECDB7CD71FEB9A44E053DC01A8C0E647/datafile/o1_mf_tbstest2_%u_.dbf
- channel ORA_AUX_DISK_1: reading from backup piece /backup/backup/RACPDB_full_343_1.bak
- channel ORA_AUX_DISK_1: piece handle=/backup/backup/RACPDB_full_343_1.bak tag=TAG20221109T151547
- channel ORA_AUX_DISK_1: restored backup piece 1
- channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
- Finished restore at 2022/11/13 14:52:31
-
- datafile 65 switched to datafile copy
- input datafile copy RECID=16 STAMP=1120661551 file name=/u01/app/oracle/auxinstance/HELW_PITR_EBSDB_RACPDB/ECDB7CD71FEB9A44E053DC01A8C0E647/datafile/o1_mf_tbstest2_kq151gpp_.dbf
-
- contents of Memory Script:
- {
- # set requested point in time
- set until time "to_date('11/09/2022 15:18:11','MM/DD/YYYY HH24:MI:SS')";
- # online the datafiles restored or switched
- sql clone 'EBSDB' "alter database datafile
- 65 online";
- # recover and open resetlogs
- recover clone database tablespace "EBSDB":"TBSTEST2", "SYSTEM", "EBSDB":"SYSTEM", "UNDOTBS1", "EBSDB":"UNDOTBS1", "EBSDB":"UNDO_2", "SYSAUX", "EBSDB":"SYSAUX" delete archivelog;
- alter clone database open resetlogs;
- }
- executing Memory Script
-
- executing command: SET until clause
-
- sql statement: alter database datafile 65 online
-
- Starting recover at 2022/11/13 14:52:31
- using channel ORA_AUX_DISK_1
- ##############################辅助实例上恢复表空间tbstest2到指定的时间点
- starting media recovery
-
- archived log for thread 1 with sequence 99 is already on disk as file /u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch1_99_1120132767.dbf
- archived log for thread 1 with sequence 100 is already on disk as file /u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch1_100_1120132767.dbf
- archived log file name=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch1_99_1120132767.dbf thread=1 sequence=99
- archived log file name=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch1_100_1120132767.dbf thread=1 sequence=100
- media recovery complete, elapsed time: 00:00:01
- Finished recover at 2022/11/13 14:52:33
-
- database opened
-
- contents of Memory Script:
- {
- sql clone 'alter pluggable database EBSDB open';
- }
- executing Memory Script
-
- sql statement: alter pluggable database EBSDB open
-
- contents of Memory Script:
- {
- # create directory for datapump import
- sql 'EBSDB' "create or replace directory
- TSPITR_DIROBJ_DPDIR as ''
- /tmp''";
- # create directory for datapump export
- sql clone 'EBSDB' "create or replace directory
- TSPITR_DIROBJ_DPDIR as ''
- /tmp''";
- }
- executing Memory Script
- ##############################expdp导出分区到指定的路径下
- sql statement: create or replace directory TSPITR_DIROBJ_DPDIR as ''/tmp''
-
- sql statement: create or replace directory TSPITR_DIROBJ_DPDIR as ''/tmp''
-
- Performing export of tables...
- EXPDP> Starting "SYS"."TSPITR_EXP_helw_jFyq":
- 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/TABLE
- EXPDP> . . exported "TEST"."TEST_PART":"P_20" 5.484 KB 1 rows
- EXPDP> Master table "SYS"."TSPITR_EXP_helw_jFyq" successfully loaded/unloaded
- EXPDP> ******************************************************************************
- EXPDP> Dump file set for SYS.TSPITR_EXP_helw_jFyq is:
- EXPDP> /tmp/test_part_p20.dmp
- EXPDP> Job "SYS"."TSPITR_EXP_helw_jFyq" successfully completed at Sun Nov 13 14:53:11 2022 elapsed 0 00:00:21
- 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 /u01/app/oracle/auxinstance/RACPDG/ECDB7CD71FEB9A44E053DC01A8C0E647/datafile/o1_mf_temp_kq14zgc5_.tmp deleted
- auxiliary instance file /u01/app/oracle/auxinstance/RACPDG/datafile/o1_mf_temp_kq14zdz6_.tmp deleted
- auxiliary instance file /u01/app/oracle/auxinstance/HELW_PITR_EBSDB_RACPDB/onlinelog/o1_mf_3_kq151k9b_.log deleted
- auxiliary instance file /u01/app/oracle/auxinstance/HELW_PITR_EBSDB_RACPDB/onlinelog/o1_mf_2_kq151k84_.log deleted
- auxiliary instance file /u01/app/oracle/auxinstance/HELW_PITR_EBSDB_RACPDB/onlinelog/o1_mf_1_kq151k7n_.log deleted
- auxiliary instance file /u01/app/oracle/auxinstance/HELW_PITR_EBSDB_RACPDB/ECDB7CD71FEB9A44E053DC01A8C0E647/datafile/o1_mf_tbstest2_kq151gpp_.dbf deleted
- auxiliary instance file /u01/app/oracle/auxinstance/RACPDG/ECDB7CD71FEB9A44E053DC01A8C0E647/datafile/o1_mf_sysaux_kq14yvwc_.dbf deleted
- auxiliary instance file /u01/app/oracle/auxinstance/RACPDG/datafile/o1_mf_sysaux_kq14xhqs_.dbf deleted
- auxiliary instance file /u01/app/oracle/auxinstance/RACPDG/ECDB7CD71FEB9A44E053DC01A8C0E647/datafile/o1_mf_undo_2_kq14yrvq_.dbf deleted
- auxiliary instance file /u01/app/oracle/auxinstance/RACPDG/ECDB7CD71FEB9A44E053DC01A8C0E647/datafile/o1_mf_undotbs1_kq14yrv9_.dbf deleted
- auxiliary instance file /u01/app/oracle/auxinstance/RACPDG/datafile/o1_mf_undotbs1_kq14yqt3_.dbf deleted
- auxiliary instance file /u01/app/oracle/auxinstance/RACPDG/ECDB7CD71FEB9A44E053DC01A8C0E647/datafile/o1_mf_system_kq14y8rr_.dbf deleted
- auxiliary instance file /u01/app/oracle/auxinstance/RACPDG/datafile/o1_mf_system_kq14xhqd_.dbf deleted
- auxiliary instance file /u01/app/oracle/auxinstance/RACPDG/controlfile/o1_mf_kq14x83o_.ctl deleted
- Finished recover at 2022/11/13 14:53:14
-
- RMAN>
其他恢复场景:
直接将恢复的数据导入目标数据库(恢复最快)
- RECOVER TABLE "TEST"."TEST_PART":"P_20" OF PLUGGABLE DATABASE ebsdb
- UNTIL time "to_date('11/09/2022 15:18:11','MM/DD/YYYY HH24:MI:SS')"
- AUXILIARY DESTINATION '/u01/app/oracle/auxinstance';
- ---会执行导入操作,导入目标库的表为表名_分区
- Performing import of tables...
- IMPDP> Master table "SYS"."TSPITR_IMP_lAng_oigD" successfully loaded/unloaded
- IMPDP> Starting "SYS"."TSPITR_IMP_lAng_oigD":
- IMPDP> Processing object type TABLE_EXPORT/TABLE/TABLE
- IMPDP> Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
- IMPDP> . . imported "TEST"."TEST_PART_P_20" 5.484 KB 1 rows
- IMPDP> Job "SYS"."TSPITR_IMP_lAng_oigD" successfully completed at Sun Nov 13 15:15:50 2022 elapsed 0 00:00:06
- Import completed
- ---不会影响表空间里面的其他表数据
- SQL> select * from "TEST"."TEST_PART_P_20" ;
-
- ID INSERTDATE
- ---------- -------------------
- 11 2022-11-09 15:15:25
-
- SQL> select * from "TEST".test_recover;
-
- INSERTDATE
- -------------------
- 2022-11-09 15:23:08
-
- SQL>
基于日志序列号恢复多个分区表,并remap恢复的表空间,表名
- RECOVER TABLE SH.SALES:SALES_1998, SH.SALES:SALES_1999
- UNTIL SEQUENCE 354
- AUXILIARY DESTINATION '/tmp/oracle/recover'
- REMAP TABLE 'SH'.'SALES':'SALES_1998':'HISTORIC_SALES_1998',
- 'SH'.'SALES':'SALES_1999':'HISTORIC_SALES_1999'
- REMAP TABLESPACE 'SALES_TS':'SALES_PRE_2000_TS';
恢复多个表,并remap恢复的用户,表名
- RECOVER TABLE HR.DEPARTMENTS, SH.CHANNELS
- UNTIL TIME 'SYSDATE – 1'
- AUXILIARY DESTINATION '/tmp/auxdest'
- REMAP TABLE hr.departments:example.new_departments, sh.channels:example.new_channels;
总结:
recover table相比于之前的表空间基于时间点的恢复(TSPITR)更适合对表数据的恢复,恢复更加的快速简单,并且恢复不会对目标数据库进行offline表空间的操作,对目标数据库几乎无影响。