Oracle RMAN的表级和表分区级恢复应用场景

RMAN的表级和表分区级恢复应用场景

如果在某些故障或误操作场景中,需要将单个表恢复到特定的时间点,在这种情况下,TSPITR不是最有效的解决方案,因为它将表空间中的所有对象都移动到指定的时间点。在12c或以上版本的数据库中,可以只通过需要恢复已被逻辑损坏或已被删除和清除的表来完成数据的恢复。
如果在DDL之后导致的表数据丢失,则无法使用Flashback技术来进行表数据的恢复,Flashback表不能通过诸如截断表操作之类的结构更改来恢复表数据。

RMAN的表级和表分区级恢复的限制

  • SYS用户表或分区无法恢复
  • 存储于SYSAUX和SYSTEM表空间下的表和分区无法恢复
  • 在备库上的表和分区表不能恢复
  • 当REMAP选项用来恢复的表包含NOT NULL约束时,恢复此表是不可行的

RMAN的表级和表分区级恢复前提

  • 数据库必须处于读写模式
  • 数据库必须处于归档模式
  • 如果要恢复表或者分区,你必须拥有这些表或者分区存在后的时间的备份
  • 想要恢复单个表分区,COMPATIBLE初始化参数所在的目标库必须设置为11.1.0或以上

表恢复语法:

RECOVER TABLE username.tablename UNTIL TIME 'TIMESTAMP…' 
AUXILIARY DESTINATION '/u01/tablerecovery' 
DATAPUMP DESTINATION '/u01/dumpfile' 
DUMP FILE 'tablename.dmp' 
NOTABLEIMPORT        -- t此选项避免自动导入表)
REMAP TABLE 'username.tablename': 'username.new_table_name';      -- 此选项可以对表重命名

注意:until time 以后,还支持以下3种方式:

SCN号
Sequence number(日志序列号)
Time:根据NLS_LANG和NLS_DATE_FORMAT环境变量中的格式来指定时间,也可以用SYSDATE,比如"SYSDATE-30"、"to_date('2018-04-09:13:51:48','yyyy-mm-dd hh24:mi:ss')"

恢复多张表到多个用户多个表空间

RECOVER TABLE owner1.table1,owner1.table2 OF PLUGGABLE DATABASE HR_PDB
UNTIL TIME 'SYSDATE-4'
AUXILIARY DESTINATION '/tmp/backups/'
REMAP TABLE owner1.table1:owner2.table1_1, owner1.table2:owner2.table2_1;     ---重命名多张表,使用','分开
REMAP TABLESPACE 'tablespace1':'tablespace2'; ---更改表空间

在pdb中进行表的恢复示例:

数据库版本:Oracle Database 19c Production Version 19.3.0.0.0
操作系统: Red Hat Enterprise Linux release 8.0 (Ootpa)

  1. 普通表的恢复:
    查看当前PDB;
SQL> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDKF01                         READ WRITE NO
         4 PDBAPEX                        READ WRITE NO

在PDB中创建测试用的表空间和数据:

SQL> alter session set container=PDKF01;

Session altered.

SQL> create tablespace dkftest;

Tablespace created.

SQL> create user dkf identified by dkf default tablespace dkftest;

User created.

SQL> grant dba to dkf;

Grant succeeded.

SQL> create table dkf.t1(id int,name varchar2(10));

Table created.

SQL> insert into dkf.t1 values(1,'a');
insert into dkf.t1 values(2,'b');
insert into dkf.t1 values(3,'c');
insert into dkf.t1 values(4,'d');
insert into dkf.t1 values(5,'e');

1 row created.

SQL> 
1 row created.

SQL> 
1 row created.

SQL> 
1 row created.

SQL> 

1 row created.

SQL> commit;

Commit complete.

SQL> select * from dkf.t1;

        ID NAME
---------- ------------------------------
         1 a
         2 b
         3 c
         4 d
         5 e

SQL> 

切换当前的日志,并记录当前的时间;

SQL> conn / as sysdba
Connected.
SQL> alter system switch logfile;

System altered.

SQL> 

RMAN> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;

TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS'
-------------------
2023-03-18 12:47:43

进行数据库全备;

CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/awrdump/c-%F';

RMAN> 

RMAN> backup database plus archivelog;


Starting backup at 2023:03:1812:48:44
current log archived
using channel ORA_DISK_1
channel ORA_DISK_1: starting archived log backup set
channel ORA_DISK_1: specifying archived log(s) in backup set
input archived log thread=1 sequence=101 RECID=162 STAMP=1122903529
input archived log thread=1 sequence=102 RECID=163 STAMP=1122957286
input archived log thread=1 sequence=103 RECID=164 STAMP=1123038340
input archived log thread=1 sequence=104 RECID=165 STAMP=1123088442
input archived log thread=1 sequence=105 RECID=166 STAMP=1123135302
input archived log thread=1 sequence=106 RECID=167 STAMP=1123188954
input archived log thread=1 sequence=107 RECID=168 STAMP=1123273236
input archived log thread=1 sequence=108 RECID=169 STAMP=1123344046
input archived log thread=1 sequence=109 RECID=170 STAMP=1123421678
input archived log thread=1 sequence=110 RECID=171 STAMP=1123488043
input archived log thread=1 sequence=111 RECID=172 STAMP=1123552815
input archived log thread=1 sequence=112 RECID=173 STAMP=1123624912
input archived log thread=1 sequence=113 RECID=174 STAMP=1123682808
input archived log thread=1 sequence=114 RECID=175 STAMP=1123711727
input archived log thread=1 sequence=115 RECID=176 STAMP=1123769376
input archived log thread=1 sequence=116 RECID=177 STAMP=1123798249
input archived log thread=1 sequence=117 RECID=178 STAMP=1123879090
input archived log thread=1 sequence=118 RECID=179 STAMP=1123945102
input archived log thread=1 sequence=119 RECID=180 STAMP=1123999263
input archived log thread=1 sequence=120 RECID=181 STAMP=1124013717
input archived log thread=1 sequence=121 RECID=182 STAMP=1124013719
input archived log thread=1 sequence=122 RECID=183 STAMP=1124013722
input archived log thread=1 sequence=123 RECID=184 STAMP=1124013723
input archived log thread=1 sequence=124 RECID=185 STAMP=1124013726
input archived log thread=1 sequence=125 RECID=186 STAMP=1124013726
input archived log thread=1 sequence=126 RECID=187 STAMP=1124013816
input archived log thread=1 sequence=127 RECID=188 STAMP=1124067054
input archived log thread=1 sequence=128 RECID=189 STAMP=1131796618
input archived log thread=1 sequence=129 RECID=190 STAMP=1131796893
input archived log thread=1 sequence=130 RECID=191 STAMP=1131797035
input archived log thread=1 sequence=131 RECID=192 STAMP=1131797063
input archived log thread=1 sequence=132 RECID=193 STAMP=1131797105
input archived log thread=1 sequence=133 RECID=194 STAMP=1131797147
input archived log thread=1 sequence=134 RECID=195 STAMP=1131797212
input archived log thread=1 sequence=135 RECID=196 STAMP=1131797265
input archived log thread=1 sequence=136 RECID=197 STAMP=1131799057
input archived log thread=1 sequence=137 RECID=198 STAMP=1131799057
input archived log thread=1 sequence=138 RECID=199 STAMP=1131799060
input archived log thread=1 sequence=139 RECID=200 STAMP=1131799098
input archived log thread=1 sequence=140 RECID=201 STAMP=1131799099
input archived log thread=1 sequence=141 RECID=202 STAMP=1131799102
input archived log thread=1 sequence=142 RECID=203 STAMP=1131799103
input archived log thread=1 sequence=143 RECID=204 STAMP=1131799124
channel ORA_DISK_1: starting piece 1 at 2023:03:1812:48:45
channel ORA_DISK_1: finished piece 1 at 2023:03:1812:49:00
piece handle=/awrdump/rmanback_251nboik_1_1 tag=TAG20230318T123844 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:15
Finished backup at 2023:03:1812:49:00

Starting backup at 2023:03:1812:49:00
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00013 name=+DATA/DKF006/DATAFILE/test.280.1107398373
input datafile file number=00003 name=+DATA/DKF006/DATAFILE/sysaux.258.1101088521
input datafile file number=00001 name=+DATA/DKF006/DATAFILE/system.257.1101088487
input datafile file number=00004 name=+DATA/DKF006/DATAFILE/undotbs1.259.1101088537
input datafile file number=00007 name=+DATA/DKF006/DATAFILE/users.260.1101088537
channel ORA_DISK_1: starting piece 1 at 2023:03:1812:49:00
channel ORA_DISK_1: finished piece 1 at 2023:03:1812:49:15
piece handle=/awrdump/rmanback_261nboj4_1_1 tag=TAG20230318T123900 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:15
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00010 name=+DATA/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/DATAFILE/sysaux.273.1101089437
input datafile file number=00011 name=+DATA/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/DATAFILE/undotbs1.271.1101089437
input datafile file number=00009 name=+DATA/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/DATAFILE/system.272.1101089437
input datafile file number=00014 name=+DATA/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/DATAFILE/dkftest.281.1131796673
input datafile file number=00012 name=+DATA/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/DATAFILE/users.275.1101089451
channel ORA_DISK_1: starting piece 1 at 2023:03:1812:49:15
channel ORA_DISK_1: finished piece 1 at 2023:03:1812:49:22
piece handle=/awrdump/rmanback_271nbojj_1_1 tag=TAG20230318T123900 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:07
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00006 name=+DATA/DKF006/86B637B62FE07A65E053F706E80A27CA/DATAFILE/sysaux.267.1101088791
input datafile file number=00005 name=+DATA/DKF006/86B637B62FE07A65E053F706E80A27CA/DATAFILE/system.266.1101088791
input datafile file number=00008 name=+DATA/DKF006/86B637B62FE07A65E053F706E80A27CA/DATAFILE/undotbs1.268.1101088791
channel ORA_DISK_1: starting piece 1 at 2023:03:1812:49:22
channel ORA_DISK_1: finished piece 1 at 2023:03:1812:49:25
piece handle=/awrdump/rmanback_281nbojq_1_1 tag=TAG20230318T123900 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:03
Finished backup at 2023:03:1812:49:25

Starting backup at 2023:03:1812:49:25
current log archived
using channel ORA_DISK_1
channel ORA_DISK_1: starting archived log backup set
channel ORA_DISK_1: specifying archived log(s) in backup set
input archived log thread=1 sequence=144 RECID=205 STAMP=1131799166
channel ORA_DISK_1: starting piece 1 at 2023:03:1812:49:26
channel ORA_DISK_1: finished piece 1 at 2023:03:1812:49:27
piece handle=/awrdump/rmanback_291nboju_1_1 tag=TAG20230318T123926 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 2023:03:1812:49:27

Starting Control File and SPFILE Autobackup at 2023:03:1812:49:27
piece handle=/u01/app/oracle/product/19.3.0/dbhome_1/dbs/c-2651711443-20230318-02 comment=NONE
Finished Control File and SPFILE Autobackup at 2023:03:1812:49:28

RMAN> 

检查表数据信息并进行清理;

SQL>  select * from dkf.t1;

        ID NAME
---------- ------------------------------
         1 a
         2 b
         3 c
         4 d
         5 e

SQL> 
SQL> 
SQL> 
SQL> truncate table dkf.t1;

Table truncated.

SQL> 
SQL> drop table dkf.t1 purge;

Table dropped.

SQL> 
SQL> 
SQL> select * from dkf.t1;
select * from dkf.t1
                  *
ERROR at line 1:
ORA-00942: table or view does not exist


SQL> 

创建表恢复需要的目录:

[oracle@dkf ~]$ mkdir /awrdump/dumpfile
[oracle@dkf ~]$ 
[oracle@dkf ~]$ 

恢复单表

RMAN> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;

TO_CHAR(SYSDATE,'YY'
-------------------
2023-03-18 13:27:21

发起单表恢复命令:

RMAN> RECOVER TABLE dkf.t1 OF PLUGGABLE DATABASE pdkf01
UNTIL TIME  "to_date('2023-03-18 13:27:21','yyyy-mm-dd hh24:mi:ss')"
AUXILIARY DESTINATION '/awrdump/dumpfile';

检查主机上的数据库实例,在恢复期间,Oracle会自动启动一个辅助实例来进行所需数据文件的恢复:

[oracle@dkf awrdump]$ ps -ef|grep smon
grid        4474       1  0 11:48 ?        00:00:00 asm_smon_+ASM
oracle      5513       1  0 11:56 ?        00:00:01 ora_smon_dkf006
oracle     15710       1  0 13:30 ?        00:00:00 ora_smon_cnEy
oracle     15760    7668  0 13:30 pts/2    00:00:00 grep --color=auto smon
[oracle@dkf awrdump]$ 

整个恢复的过程如下:

RMAN> RECOVER TABLE dkf.t1 OF PLUGGABLE DATABASE pdkf01
UNTIL TIME  "to_date('2023-03-18 13:27:21','yyyy-mm-dd hh24:mi:ss')"
AUXILIARY DESTINATION '/awrdump/dumpfile';2> 3> 

Starting recover at 2023:03:1813:29:55
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 PDKF01:SYSTEM
Tablespace UNDOTBS1
Tablespace PDKF01:UNDOTBS1

Creating automatic instance, with SID='cnEy'

initialization parameters used for automatic instance:
db_name=DKF006
db_unique_name=cnEy_pitr_pdkf01_DKF006
compatible=19.0.0
db_block_size=8192
db_files=200
diagnostic_dest=/u01/app/oracle
_system_trig_enabled=FALSE
sga_target=1184M
processes=200
db_create_file_dest=/awrdump/dumpfile
log_archive_dest_1='location=/awrdump/dumpfile'
enable_pluggable_database=true
_clone_one_pdb_recovery=true
#No auxiliary parameter file used


starting up automatic instance DKF006

Oracle instance started

Total System Global Area    1241513976 bytes

Fixed Size                     9134072 bytes
Variable Size                318767104 bytes
Database Buffers             905969664 bytes
Redo Buffers                   7643136 bytes
Automatic instance created

contents of Memory Script:
{
# set requested point in time
set until  time "to_date('2023-03-18 13:27:21','yyyy-mm-dd 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 2023:03:1813:30:21
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=39 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 /awrdump/c-c-2651711443-20230318-05
channel ORA_AUX_DISK_1: piece handle=/awrdump/c-c-2651711443-20230318-05 tag=TAG20230318T132622
channel ORA_AUX_DISK_1: restored backup piece 1
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
output file name=/awrdump/dumpfile/DKF006/controlfile/o1_mf_l1cx9nty_.ctl
Finished restore at 2023:03:1813:30:30

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  time "to_date('2023-03-18 13:27:21','yyyy-mm-dd 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  9 to new;
set newname for clone datafile  4 to new;
set newname for clone datafile  11 to new;
set newname for clone datafile  3 to new;
set newname for clone datafile  10 to new;
set newname for clone tempfile  1 to new;
set newname for clone tempfile  3 to new;
# switch all tempfiles
switch clone tempfile all;
# restore the tablespaces in the recovery set and the auxiliary set
restore clone datafile  1, 9, 4, 11, 3, 10;
 
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

renamed tempfile 1 to /awrdump/dumpfile/DKF006/datafile/o1_mf_temp_%u_.tmp in control file
renamed tempfile 3 to /awrdump/dumpfile/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/datafile/o1_mf_temp_%u_.tmp in control file

Starting restore at 2023:03:1813:30:37
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 /awrdump/dumpfile/DKF006/datafile/o1_mf_system_%u_.dbf
channel ORA_AUX_DISK_1: restoring datafile 00004 to /awrdump/dumpfile/DKF006/datafile/o1_mf_undotbs1_%u_.dbf
channel ORA_AUX_DISK_1: restoring datafile 00003 to /awrdump/dumpfile/DKF006/datafile/o1_mf_sysaux_%u_.dbf
channel ORA_AUX_DISK_1: reading from backup piece /awrdump/rmanback_2e1nbral_1_1
channel ORA_AUX_DISK_1: piece handle=/awrdump/rmanback_2e1nbral_1_1 tag=TAG20230318T132541
channel ORA_AUX_DISK_1: restored backup piece 1
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:26
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 00009 to /awrdump/dumpfile/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/datafile/o1_mf_system_%u_.dbf
channel ORA_AUX_DISK_1: restoring datafile 00011 to /awrdump/dumpfile/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/datafile/o1_mf_undotbs1_%u_.dbf
channel ORA_AUX_DISK_1: restoring datafile 00010 to /awrdump/dumpfile/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/datafile/o1_mf_sysaux_%u_.dbf
channel ORA_AUX_DISK_1: reading from backup piece /awrdump/rmanback_2f1nbrb4_1_1
channel ORA_AUX_DISK_1: piece handle=/awrdump/rmanback_2f1nbrb4_1_1 tag=TAG20230318T132541
channel ORA_AUX_DISK_1: restored backup piece 1
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:16
Finished restore at 2023:03:1813:31:20

datafile 1 switched to datafile copy
input datafile copy RECID=10 STAMP=1131802280 file name=/awrdump/dumpfile/DKF006/datafile/o1_mf_system_l1cx9yyb_.dbf
datafile 9 switched to datafile copy
input datafile copy RECID=11 STAMP=1131802280 file name=/awrdump/dumpfile/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/datafile/o1_mf_system_l1cxbs16_.dbf
datafile 4 switched to datafile copy
input datafile copy RECID=12 STAMP=1131802280 file name=/awrdump/dumpfile/DKF006/datafile/o1_mf_undotbs1_l1cx9yyf_.dbf
datafile 11 switched to datafile copy
input datafile copy RECID=13 STAMP=1131802280 file name=/awrdump/dumpfile/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/datafile/o1_mf_undotbs1_l1cxbs15_.dbf
datafile 3 switched to datafile copy
input datafile copy RECID=14 STAMP=1131802280 file name=/awrdump/dumpfile/DKF006/datafile/o1_mf_sysaux_l1cx9yy0_.dbf
datafile 10 switched to datafile copy
input datafile copy RECID=15 STAMP=1131802280 file name=/awrdump/dumpfile/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/datafile/o1_mf_sysaux_l1cxbs0r_.dbf

contents of Memory Script:
{
# set requested point in time
set until  time "to_date('2023-03-18 13:27:21','yyyy-mm-dd hh24:mi:ss')";
# online the datafiles restored or switched
sql clone "alter database datafile  1 online";
sql clone 'PDKF01' "alter database datafile 
 9 online";
sql clone "alter database datafile  4 online";
sql clone 'PDKF01' "alter database datafile 
 11 online";
sql clone "alter database datafile  3 online";
sql clone 'PDKF01' "alter database datafile 
 10 online";
# recover and open database read only
recover clone database tablespace  "SYSTEM", "PDKF01":"SYSTEM", "UNDOTBS1", "PDKF01":"UNDOTBS1", "SYSAUX", "PDKF01":"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  9 online

sql statement: alter database datafile  4 online

sql statement: alter database datafile  11 online

sql statement: alter database datafile  3 online

sql statement: alter database datafile  10 online

Starting recover at 2023:03:1813:31:25
using channel ORA_AUX_DISK_1

starting media recovery

archived log for thread 1 with sequence 146 is already on disk as file /u01/app/oracle/arch/1_146_1101088597.arch
archived log for thread 1 with sequence 147 is already on disk as file /u01/app/oracle/arch/1_147_1101088597.arch
archived log for thread 1 with sequence 148 is already on disk as file /u01/app/oracle/arch/1_148_1101088597.arch
archived log for thread 1 with sequence 149 is already on disk as file /u01/app/oracle/arch/1_149_1101088597.arch
archived log for thread 1 with sequence 150 is already on disk as file /u01/app/oracle/arch/1_150_1101088597.arch
archived log for thread 1 with sequence 151 is already on disk as file /u01/app/oracle/arch/1_151_1101088597.arch
archived log for thread 1 with sequence 152 is already on disk as file /u01/app/oracle/arch/1_152_1101088597.arch
archived log file name=/u01/app/oracle/arch/1_146_1101088597.arch thread=1 sequence=146
archived log file name=/u01/app/oracle/arch/1_147_1101088597.arch thread=1 sequence=147
archived log file name=/u01/app/oracle/arch/1_148_1101088597.arch thread=1 sequence=148
archived log file name=/u01/app/oracle/arch/1_149_1101088597.arch thread=1 sequence=149
archived log file name=/u01/app/oracle/arch/1_150_1101088597.arch thread=1 sequence=150
archived log file name=/u01/app/oracle/arch/1_151_1101088597.arch thread=1 sequence=151
archived log file name=/u01/app/oracle/arch/1_152_1101088597.arch thread=1 sequence=152
media recovery complete, elapsed time: 00:00:01
Finished recover at 2023:03:1813:31:28

sql statement: alter database open read only

contents of Memory Script:
{
sql clone 'alter pluggable database  PDKF01 open read only';
}
executing Memory Script

sql statement: alter pluggable database  PDKF01 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 = 
  ''/awrdump/dumpfile/DKF006/controlfile/o1_mf_l1cx9nty_.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    1241513976 bytes

Fixed Size                     9134072 bytes
Variable Size                318767104 bytes
Database Buffers             905969664 bytes
Redo Buffers                   7643136 bytes

sql statement: alter system set  control_files =   ''/awrdump/dumpfile/DKF006/controlfile/o1_mf_l1cx9nty_.ctl'' comment= ''RMAN set'' scope=spfile

Oracle instance shut down

connected to auxiliary database (not started)
Oracle instance started

Total System Global Area    1241513976 bytes

Fixed Size                     9134072 bytes
Variable Size                318767104 bytes
Database Buffers             905969664 bytes
Redo Buffers                   7643136 bytes

sql statement: alter database mount clone database

contents of Memory Script:
{
# set requested point in time
set until  time "to_date('2023-03-18 13:27:21','yyyy-mm-dd hh24:mi:ss')";
# set destinations for recovery set and auxiliary set datafiles
set newname for datafile  14 to new;
# restore the tablespaces in the recovery set and the auxiliary set
restore clone datafile  14;
 
switch clone datafile all;
}
executing Memory Script

executing command: SET until clause

executing command: SET NEWNAME

Starting restore at 2023:03:1813:33:05
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=47 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 00014 to /awrdump/dumpfile/CNEY_PITR_PDKF01_DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/datafile/o1_mf_dkftest_%u_.dbf
channel ORA_AUX_DISK_1: reading from backup piece /awrdump/rmanback_2f1nbrb4_1_1
channel ORA_AUX_DISK_1: piece handle=/awrdump/rmanback_2f1nbrb4_1_1 tag=TAG20230318T132541
channel ORA_AUX_DISK_1: restored backup piece 1
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:04
Finished restore at 2023:03:1813:33:13

datafile 14 switched to datafile copy
input datafile copy RECID=17 STAMP=1131802394 file name=/awrdump/dumpfile/CNEY_PITR_PDKF01_DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/datafile/o1_mf_dkftest_l1cxgq93_.dbf

contents of Memory Script:
{
# set requested point in time
set until  time "to_date('2023-03-18 13:27:21','yyyy-mm-dd hh24:mi:ss')";
# online the datafiles restored or switched
sql clone 'PDKF01' "alter database datafile 
 14 online";
# recover and open resetlogs
recover clone database tablespace  "PDKF01":"DKFTEST", "SYSTEM", "PDKF01":"SYSTEM", "UNDOTBS1", "PDKF01":"UNDOTBS1", "SYSAUX", "PDKF01":"SYSAUX" delete archivelog;
alter clone database open resetlogs;
}
executing Memory Script

executing command: SET until clause

sql statement: alter database datafile  14 online

Starting recover at 2023:03:1813:33:16
using channel ORA_AUX_DISK_1

starting media recovery

archived log for thread 1 with sequence 146 is already on disk as file /u01/app/oracle/arch/1_146_1101088597.arch
archived log for thread 1 with sequence 147 is already on disk as file /u01/app/oracle/arch/1_147_1101088597.arch
archived log for thread 1 with sequence 148 is already on disk as file /u01/app/oracle/arch/1_148_1101088597.arch
archived log for thread 1 with sequence 149 is already on disk as file /u01/app/oracle/arch/1_149_1101088597.arch
archived log for thread 1 with sequence 150 is already on disk as file /u01/app/oracle/arch/1_150_1101088597.arch
archived log for thread 1 with sequence 151 is already on disk as file /u01/app/oracle/arch/1_151_1101088597.arch
archived log for thread 1 with sequence 152 is already on disk as file /u01/app/oracle/arch/1_152_1101088597.arch
archived log file name=/u01/app/oracle/arch/1_146_1101088597.arch thread=1 sequence=146
archived log file name=/u01/app/oracle/arch/1_147_1101088597.arch thread=1 sequence=147
archived log file name=/u01/app/oracle/arch/1_148_1101088597.arch thread=1 sequence=148
archived log file name=/u01/app/oracle/arch/1_149_1101088597.arch thread=1 sequence=149
archived log file name=/u01/app/oracle/arch/1_150_1101088597.arch thread=1 sequence=150
archived log file name=/u01/app/oracle/arch/1_151_1101088597.arch thread=1 sequence=151
archived log file name=/u01/app/oracle/arch/1_152_1101088597.arch thread=1 sequence=152
media recovery complete, elapsed time: 00:00:01
Finished recover at 2023:03:1813:33:21

database opened

contents of Memory Script:
{
sql clone 'alter pluggable database  PDKF01 open';
}
executing Memory Script

sql statement: alter pluggable database  PDKF01 open

contents of Memory Script:
{
# create directory for datapump import
sql 'PDKF01' "create or replace directory 
TSPITR_DIROBJ_DPDIR as ''
/awrdump/dumpfile''";
# create directory for datapump export
sql clone 'PDKF01' "create or replace directory 
TSPITR_DIROBJ_DPDIR as ''
/awrdump/dumpfile''";
}
executing Memory Script

sql statement: create or replace directory TSPITR_DIROBJ_DPDIR as ''/awrdump/dumpfile''

sql statement: create or replace directory TSPITR_DIROBJ_DPDIR as ''/awrdump/dumpfile''

Performing export of tables...
   EXPDP> Starting "SYS"."TSPITR_EXP_cnEy_swtm":  
   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 "DKF"."T1"                                  5.523 KB       5 rows
   EXPDP> Master table "SYS"."TSPITR_EXP_cnEy_swtm" successfully loaded/unloaded
   EXPDP> ******************************************************************************
   EXPDP> Dump file set for SYS.TSPITR_EXP_cnEy_swtm is:
   EXPDP>   /awrdump/dumpfile/tspitr_cnEy_76326.dmp
   EXPDP> Job "SYS"."TSPITR_EXP_cnEy_swtm" successfully completed at Sat Mar 18 13:35:56 2023 elapsed 0 00:00:51
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_cnEy_Cava" successfully loaded/unloaded
   IMPDP> Starting "SYS"."TSPITR_IMP_cnEy_Cava":  
   IMPDP> Processing object type TABLE_EXPORT/TABLE/TABLE
   IMPDP> Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
   IMPDP> . . imported "DKF"."T1"                                  5.523 KB       5 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_cnEy_Cava" successfully completed at Sat Mar 18 13:36:32 2023 elapsed 0 00:00:27
Import completed


Removing automatic instance
Automatic instance removed
auxiliary instance file /awrdump/dumpfile/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/datafile/o1_mf_temp_l1cxcqbt_.tmp deleted
auxiliary instance file /awrdump/dumpfile/DKF006/datafile/o1_mf_temp_l1cxckcy_.tmp deleted
auxiliary instance file /awrdump/dumpfile/CNEY_PITR_PDKF01_DKF006/onlinelog/o1_mf_3_l1cxh5qh_.log deleted
auxiliary instance file /awrdump/dumpfile/CNEY_PITR_PDKF01_DKF006/onlinelog/o1_mf_2_l1cxh2ql_.log deleted
auxiliary instance file /awrdump/dumpfile/CNEY_PITR_PDKF01_DKF006/onlinelog/o1_mf_1_l1cxh212_.log deleted
auxiliary instance file /awrdump/dumpfile/CNEY_PITR_PDKF01_DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/datafile/o1_mf_dkftest_l1cxgq93_.dbf deleted
auxiliary instance file /awrdump/dumpfile/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/datafile/o1_mf_sysaux_l1cxbs0r_.dbf deleted
auxiliary instance file /awrdump/dumpfile/DKF006/datafile/o1_mf_sysaux_l1cx9yy0_.dbf deleted
auxiliary instance file /awrdump/dumpfile/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/datafile/o1_mf_undotbs1_l1cxbs15_.dbf deleted
auxiliary instance file /awrdump/dumpfile/DKF006/datafile/o1_mf_undotbs1_l1cx9yyf_.dbf deleted
auxiliary instance file /awrdump/dumpfile/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/datafile/o1_mf_system_l1cxbs16_.dbf deleted
auxiliary instance file /awrdump/dumpfile/DKF006/datafile/o1_mf_system_l1cx9yyb_.dbf deleted
auxiliary instance file /awrdump/dumpfile/DKF006/controlfile/o1_mf_l1cx9nty_.ctl deleted
auxiliary instance file tspitr_cnEy_76326.dmp deleted
Finished recover at 2023:03:1813:36:34

RMAN> 

恢复成功,检查现在数据库中PDB中恢复的数据:

SQL> 
SQL> alter session set container=pdkf01;

Session altered.

SQL> select count(1) from dkf.t1;

  COUNT(1)
----------
         5

SQL> 
SQL> 
SQL> 
SQL> select * from dkf.t1;

        ID NAME
---------- ------------------------------
         1 a
         2 b
         3 c
         4 d
         5 e

SQL> 
SQL> 

表及数据已完成恢复,数据也是正确无误。

  1. 分区表恢复:

创建测试用的分区表:

create table dkf.P_T2 (
id int , name varchar2(10) )
partition by range(id)
(partition p1 values less than(3),
partition p2 values less than(5),
partition p3 values less than(8),
partition p4 values less than(maxvalue)
);

insert into dkf.P_T2(id,name) values(1,'a');
insert into dkf.P_T2(id,name) values(2,'b');
insert into dkf.P_T2(id,name) values(3,'c');
insert into dkf.P_T2(id,name) values(5,'d');
insert into dkf.P_T2(id,name) values(7,'e');
insert into dkf.P_T2(id,name) values(10,'f');


SQL> commit;

Commit complete.

SQL> select * from dkf.P_t2;

        ID NAME
---------- ------------------------------
         1 a
         2 b
         3 c
         5 d
         7 e
        10 f

6 rows selected.

SQL> select * from dkf.P_t2 partition(p1);

        ID NAME
---------- ------------------------------
         1 a
         2 b

SQL> 
SQL> 
SQL> select * from dkf.P_t2 partition(p2);

        ID NAME
---------- ------------------------------
         3 c

SQL> select * from dkf.P_t2 partition(p3);

        ID NAME
---------- ------------------------------
         5 d
         7 e

SQL> select * from dkf.P_t2 partition(p4);

        ID NAME
---------- ------------------------------
        10 f

SQL> 
SQL> 

可以看到,每个分区里都是有对应的数据,其中,分区3中有2条数据,5和7,我们将分区3的数据进行删除;

SQL> delete from dkf.P_T2 partition(p3) ;

2 rows deleted.

SQL> commit;

Commit complete.


SQL> select * from dkf.P_T2 partition(p3); 

no rows selected

SQL> 

创建表恢复需要的目录:

[oracle@dkf ~]$ mkdir /awrdump/tbrecory
[oracle@dkf ~]$ mkdir /awrdump/dumpfile
[oracle@dkf ~]$ 
[oracle@dkf ~]$ 
RECOVER TABLE  dkf.p_t2:p3 OF PLUGGABLE DATABASE pdkf01
    UNTIL TIME  "to_date('2023-03-18 13:27:21','yyyy-mm-dd hh24:mi:ss')"
    AUXILIARY DESTINATION '/awrdump/dumpfile/'
    REMAP TABLE 'DKF'.'P_T2':'P3':'P3_PART';

整个恢复的过程如下:

RMAN> RECOVER TABLE  dkf.p_t2:p3 OF PLUGGABLE DATABASE pdkf01
    UNTIL TIME  "to_date('2023-03-18 13:27:21','yyyy-mm-dd hh24:mi:ss')"
    AUXILIARY DESTINATION '/awrdump/dumpfile/'
    REMAP TABLE 'DKF'.'P_T2':'P3':'P3_PART';2> 3> 4> 5> 

Starting recover at 2023:03:1813:48:27
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 PDKF01:SYSTEM
Tablespace UNDOTBS1
Tablespace PDKF01:UNDOTBS1

Creating automatic instance, with SID='jEub'

initialization parameters used for automatic instance:
db_name=DKF006
db_unique_name=jEub_pitr_pdkf01_DKF006
compatible=19.0.0
db_block_size=8192
db_files=200
diagnostic_dest=/u01/app/oracle
_system_trig_enabled=FALSE
sga_target=1184M
processes=200
db_create_file_dest=/awrdump/tbrecory/
log_archive_dest_1='location=/awrdump/tbrecory/'
enable_pluggable_database=true
_clone_one_pdb_recovery=true
#No auxiliary parameter file used


starting up automatic instance DKF006

Oracle instance started

Total System Global Area    1241513976 bytes

Fixed Size                     9134072 bytes
Variable Size                318767104 bytes
Database Buffers             905969664 bytes
Redo Buffers                   7643136 bytes
Automatic instance created

contents of Memory Script:
{
# set requested point in time
set until  time "to_date('2023-03-18 13:27:21','yyyy-mm-dd 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 2023:03:1813:48:49
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=8 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 /awrdump/c-c-2651711443-20230318-05
channel ORA_AUX_DISK_1: piece handle=/awrdump/c-c-2651711443-20230318-05 tag=TAG20230318T132622
channel ORA_AUX_DISK_1: restored backup piece 1
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
output file name=/awrdump/tbrecory/DKF006/controlfile/o1_mf_l1cyd2bv_.ctl
Finished restore at 2023:03:1813:48:51

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  time "to_date('2023-03-18 13:27:21','yyyy-mm-dd 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  9 to new;
set newname for clone datafile  4 to new;
set newname for clone datafile  11 to new;
set newname for clone datafile  3 to new;
set newname for clone datafile  10 to new;
set newname for clone tempfile  1 to new;
set newname for clone tempfile  3 to new;
# switch all tempfiles
switch clone tempfile all;
# restore the tablespaces in the recovery set and the auxiliary set
restore clone datafile  1, 9, 4, 11, 3, 10;
 
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

renamed tempfile 1 to /awrdump/tbrecory/DKF006/datafile/o1_mf_temp_%u_.tmp in control file
renamed tempfile 3 to /awrdump/tbrecory/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/datafile/o1_mf_temp_%u_.tmp in control file

Starting restore at 2023:03:1813:49:02
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 /awrdump/tbrecory/DKF006/datafile/o1_mf_system_%u_.dbf
channel ORA_AUX_DISK_1: restoring datafile 00004 to /awrdump/tbrecory/DKF006/datafile/o1_mf_undotbs1_%u_.dbf
channel ORA_AUX_DISK_1: restoring datafile 00003 to /awrdump/tbrecory/DKF006/datafile/o1_mf_sysaux_%u_.dbf
channel ORA_AUX_DISK_1: reading from backup piece /awrdump/rmanback_2e1nbral_1_1
channel ORA_AUX_DISK_1: piece handle=/awrdump/rmanback_2e1nbral_1_1 tag=TAG20230318T132541
channel ORA_AUX_DISK_1: restored backup piece 1
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:26
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 00009 to /awrdump/tbrecory/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/datafile/o1_mf_system_%u_.dbf
channel ORA_AUX_DISK_1: restoring datafile 00011 to /awrdump/tbrecory/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/datafile/o1_mf_undotbs1_%u_.dbf
channel ORA_AUX_DISK_1: restoring datafile 00010 to /awrdump/tbrecory/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/datafile/o1_mf_sysaux_%u_.dbf
channel ORA_AUX_DISK_1: reading from backup piece /awrdump/rmanback_2f1nbrb4_1_1
channel ORA_AUX_DISK_1: piece handle=/awrdump/rmanback_2f1nbrb4_1_1 tag=TAG20230318T132541
channel ORA_AUX_DISK_1: restored backup piece 1
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:15
Finished restore at 2023:03:1813:49:44

datafile 1 switched to datafile copy
input datafile copy RECID=10 STAMP=1131803385 file name=/awrdump/tbrecory/DKF006/datafile/o1_mf_system_l1cydhxw_.dbf
datafile 9 switched to datafile copy
input datafile copy RECID=11 STAMP=1131803385 file name=/awrdump/tbrecory/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/datafile/o1_mf_system_l1cyf9tb_.dbf
datafile 4 switched to datafile copy
input datafile copy RECID=12 STAMP=1131803385 file name=/awrdump/tbrecory/DKF006/datafile/o1_mf_undotbs1_l1cydhxy_.dbf
datafile 11 switched to datafile copy
input datafile copy RECID=13 STAMP=1131803385 file name=/awrdump/tbrecory/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/datafile/o1_mf_undotbs1_l1cyf9t8_.dbf
datafile 3 switched to datafile copy
input datafile copy RECID=14 STAMP=1131803385 file name=/awrdump/tbrecory/DKF006/datafile/o1_mf_sysaux_l1cydhxf_.dbf
datafile 10 switched to datafile copy
input datafile copy RECID=15 STAMP=1131803385 file name=/awrdump/tbrecory/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/datafile/o1_mf_sysaux_l1cyf9t5_.dbf

contents of Memory Script:
{
# set requested point in time
set until  time "to_date('2023-03-18 13:27:21','yyyy-mm-dd hh24:mi:ss')";
# online the datafiles restored or switched
sql clone "alter database datafile  1 online";
sql clone 'PDKF01' "alter database datafile 
 9 online";
sql clone "alter database datafile  4 online";
sql clone 'PDKF01' "alter database datafile 
 11 online";
sql clone "alter database datafile  3 online";
sql clone 'PDKF01' "alter database datafile 
 10 online";
# recover and open database read only
recover clone database tablespace  "SYSTEM", "PDKF01":"SYSTEM", "UNDOTBS1", "PDKF01":"UNDOTBS1", "SYSAUX", "PDKF01":"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  9 online

sql statement: alter database datafile  4 online

sql statement: alter database datafile  11 online

sql statement: alter database datafile  3 online

sql statement: alter database datafile  10 online

Starting recover at 2023:03:1813:49:50
using channel ORA_AUX_DISK_1

starting media recovery

archived log for thread 1 with sequence 146 is already on disk as file /u01/app/oracle/arch/1_146_1101088597.arch
archived log for thread 1 with sequence 147 is already on disk as file /u01/app/oracle/arch/1_147_1101088597.arch
archived log for thread 1 with sequence 148 is already on disk as file /u01/app/oracle/arch/1_148_1101088597.arch
archived log for thread 1 with sequence 149 is already on disk as file /u01/app/oracle/arch/1_149_1101088597.arch
archived log for thread 1 with sequence 150 is already on disk as file /u01/app/oracle/arch/1_150_1101088597.arch
archived log for thread 1 with sequence 151 is already on disk as file /u01/app/oracle/arch/1_151_1101088597.arch
archived log for thread 1 with sequence 152 is already on disk as file /u01/app/oracle/arch/1_152_1101088597.arch
archived log file name=/u01/app/oracle/arch/1_146_1101088597.arch thread=1 sequence=146
archived log file name=/u01/app/oracle/arch/1_147_1101088597.arch thread=1 sequence=147
archived log file name=/u01/app/oracle/arch/1_148_1101088597.arch thread=1 sequence=148
archived log file name=/u01/app/oracle/arch/1_149_1101088597.arch thread=1 sequence=149
archived log file name=/u01/app/oracle/arch/1_150_1101088597.arch thread=1 sequence=150
archived log file name=/u01/app/oracle/arch/1_151_1101088597.arch thread=1 sequence=151
archived log file name=/u01/app/oracle/arch/1_152_1101088597.arch thread=1 sequence=152
media recovery complete, elapsed time: 00:00:01
Finished recover at 2023:03:1813:49:53

sql statement: alter database open read only

contents of Memory Script:
{
sql clone 'alter pluggable database  PDKF01 open read only';
}
executing Memory Script

sql statement: alter pluggable database  PDKF01 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 = 
  ''/awrdump/tbrecory/DKF006/controlfile/o1_mf_l1cyd2bv_.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    1241513976 bytes

Fixed Size                     9134072 bytes
Variable Size                318767104 bytes
Database Buffers             905969664 bytes
Redo Buffers                   7643136 bytes

sql statement: alter system set  control_files =   ''/awrdump/tbrecory/DKF006/controlfile/o1_mf_l1cyd2bv_.ctl'' comment= ''RMAN set'' scope=spfile

Oracle instance shut down

connected to auxiliary database (not started)
Oracle instance started

Total System Global Area    1241513976 bytes

Fixed Size                     9134072 bytes
Variable Size                318767104 bytes
Database Buffers             905969664 bytes
Redo Buffers                   7643136 bytes

sql statement: alter database mount clone database

contents of Memory Script:
{
# set requested point in time
set until  time "to_date('2023-03-18 13:27:21','yyyy-mm-dd hh24:mi:ss')";
# set destinations for recovery set and auxiliary set datafiles
set newname for datafile  14 to new;
# restore the tablespaces in the recovery set and the auxiliary set
restore clone datafile  14;
 
switch clone datafile all;
}
executing Memory Script

executing command: SET until clause

executing command: SET NEWNAME

Starting restore at 2023:03:1813:51:27
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=47 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 00014 to /awrdump/tbrecory/JEUB_PITR_PDKF01_DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/datafile/o1_mf_dkftest_%u_.dbf
channel ORA_AUX_DISK_1: reading from backup piece /awrdump/rmanback_2f1nbrb4_1_1
channel ORA_AUX_DISK_1: piece handle=/awrdump/rmanback_2f1nbrb4_1_1 tag=TAG20230318T132541
channel ORA_AUX_DISK_1: restored backup piece 1
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:03
Finished restore at 2023:03:1813:51:31

datafile 14 switched to datafile copy
input datafile copy RECID=17 STAMP=1131803492 file name=/awrdump/tbrecory/JEUB_PITR_PDKF01_DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/datafile/o1_mf_dkftest_l1cyk0wn_.dbf

contents of Memory Script:
{
# set requested point in time
set until  time "to_date('2023-03-18 13:27:21','yyyy-mm-dd hh24:mi:ss')";
# online the datafiles restored or switched
sql clone 'PDKF01' "alter database datafile 
 14 online";
# recover and open resetlogs
recover clone database tablespace  "PDKF01":"DKFTEST", "SYSTEM", "PDKF01":"SYSTEM", "UNDOTBS1", "PDKF01":"UNDOTBS1", "SYSAUX", "PDKF01":"SYSAUX" delete archivelog;
alter clone database open resetlogs;
}
executing Memory Script

executing command: SET until clause

sql statement: alter database datafile  14 online

Starting recover at 2023:03:1813:51:32
using channel ORA_AUX_DISK_1

starting media recovery

archived log for thread 1 with sequence 146 is already on disk as file /u01/app/oracle/arch/1_146_1101088597.arch
archived log for thread 1 with sequence 147 is already on disk as file /u01/app/oracle/arch/1_147_1101088597.arch
archived log for thread 1 with sequence 148 is already on disk as file /u01/app/oracle/arch/1_148_1101088597.arch
archived log for thread 1 with sequence 149 is already on disk as file /u01/app/oracle/arch/1_149_1101088597.arch
archived log for thread 1 with sequence 150 is already on disk as file /u01/app/oracle/arch/1_150_1101088597.arch
archived log for thread 1 with sequence 151 is already on disk as file /u01/app/oracle/arch/1_151_1101088597.arch
archived log for thread 1 with sequence 152 is already on disk as file /u01/app/oracle/arch/1_152_1101088597.arch
archived log file name=/u01/app/oracle/arch/1_146_1101088597.arch thread=1 sequence=146
archived log file name=/u01/app/oracle/arch/1_147_1101088597.arch thread=1 sequence=147
archived log file name=/u01/app/oracle/arch/1_148_1101088597.arch thread=1 sequence=148
archived log file name=/u01/app/oracle/arch/1_149_1101088597.arch thread=1 sequence=149
archived log file name=/u01/app/oracle/arch/1_150_1101088597.arch thread=1 sequence=150
archived log file name=/u01/app/oracle/arch/1_151_1101088597.arch thread=1 sequence=151
archived log file name=/u01/app/oracle/arch/1_152_1101088597.arch thread=1 sequence=152
media recovery complete, elapsed time: 00:00:01
Finished recover at 2023:03:1813:51:37

database opened

contents of Memory Script:
{
sql clone 'alter pluggable database  PDKF01 open';
}
executing Memory Script

sql statement: alter pluggable database  PDKF01 open

contents of Memory Script:
{
# create directory for datapump import
sql 'PDKF01' "create or replace directory 
TSPITR_DIROBJ_DPDIR as ''
/awrdump/dumpfile/''";
# create directory for datapump export
sql clone 'PDKF01' "create or replace directory 
TSPITR_DIROBJ_DPDIR as ''
/awrdump/dumpfile/''";
}
executing Memory Script

sql statement: create or replace directory TSPITR_DIROBJ_DPDIR as ''/awrdump/dumpfile/''

sql statement: create or replace directory TSPITR_DIROBJ_DPDIR as ''/awrdump/dumpfile/''

Performing export of tables...
   EXPDP> Starting "SYS"."TSPITR_EXP_jEub_zetl":  
   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 "DKF"."P_T2":"P3"                             5.5 KB       2 rows
   EXPDP> Master table "SYS"."TSPITR_EXP_jEub_zetl" successfully loaded/unloaded
   EXPDP> ******************************************************************************
   EXPDP> Dump file set for SYS.TSPITR_EXP_jEub_zetl is:
   EXPDP>   /awrdump/dumpfile/tspitr_jEub_26604.dmp
   EXPDP> Job "SYS"."TSPITR_EXP_jEub_zetl" successfully completed at Sat Mar 18 13:53:51 2023 elapsed 0 00:00:55
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_jEub_cpva" successfully loaded/unloaded
   IMPDP> Starting "SYS"."TSPITR_IMP_jEub_cpva":  
   IMPDP> Processing object type TABLE_EXPORT/TABLE/TABLE
   IMPDP> Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
   IMPDP> . . imported "DKF"."P3_PART"                               5.5 KB       2 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_jEub_cpva" successfully completed at Sat Mar 18 13:54:20 2023 elapsed 0 00:00:23
Import completed


Removing automatic instance
Automatic instance removed
auxiliary instance file /awrdump/tbrecory/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/datafile/o1_mf_temp_l1cyg7so_.tmp deleted
auxiliary instance file /awrdump/tbrecory/DKF006/datafile/o1_mf_temp_l1cyg21d_.tmp deleted
auxiliary instance file /awrdump/tbrecory/JEUB_PITR_PDKF01_DKF006/onlinelog/o1_mf_3_l1cykf2s_.log deleted
auxiliary instance file /awrdump/tbrecory/JEUB_PITR_PDKF01_DKF006/onlinelog/o1_mf_2_l1cykcb8_.log deleted
auxiliary instance file /awrdump/tbrecory/JEUB_PITR_PDKF01_DKF006/onlinelog/o1_mf_1_l1cykbov_.log deleted
auxiliary instance file /awrdump/tbrecory/JEUB_PITR_PDKF01_DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/datafile/o1_mf_dkftest_l1cyk0wn_.dbf deleted
auxiliary instance file /awrdump/tbrecory/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/datafile/o1_mf_sysaux_l1cyf9t5_.dbf deleted
auxiliary instance file /awrdump/tbrecory/DKF006/datafile/o1_mf_sysaux_l1cydhxf_.dbf deleted
auxiliary instance file /awrdump/tbrecory/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/datafile/o1_mf_undotbs1_l1cyf9t8_.dbf deleted
auxiliary instance file /awrdump/tbrecory/DKF006/datafile/o1_mf_undotbs1_l1cydhxy_.dbf deleted
auxiliary instance file /awrdump/tbrecory/DKF006/DBCEFC8A3ACE81CBE0550A002762E1A4/datafile/o1_mf_system_l1cyf9tb_.dbf deleted
auxiliary instance file /awrdump/tbrecory/DKF006/datafile/o1_mf_system_l1cydhxw_.dbf deleted
auxiliary instance file /awrdump/tbrecory/DKF006/controlfile/o1_mf_l1cyd2bv_.ctl deleted
auxiliary instance file tspitr_jEub_26604.dmp deleted
Finished recover at 2023:03:1813:54:23

RMAN> 

恢复完成,检查恢复的数据:

SQL> select * from dkf.P3_PART;

        ID NAME
---------- ------------------------------
         5 d
         7 e

SQL> 

数据已导入到临时的表中,现在讲临时表数据插入到待恢复表的分区中;

SQL> select * from dkf.p_t2 partition(p3);

no rows selected

SQL> 
SQL> 
SQL> 
SQL> select * from dkf.P3_PART;

        ID NAME
---------- ------------------------------
         5 d
         7 e

SQL> insert into dkf.p_t2 partition(p3) select * from dkf.P3_PART;

2 rows created.

SQL> commit;

Commit complete.

SQL> select * from dkf.p_t2 partition(p3);

        ID NAME
---------- ------------------------------
         5 d
         7 e

SQL> select * from dkf.p_t2;

        ID NAME
---------- ------------------------------
         1 a
         2 b
         3 c
         5 d
         7 e
        10 f

6 rows selected.

SQL> 

至此,数据恢复完毕。

可以看到,现在对于单表的恢复已经变得非常简单,只需一条命令即可完成单表从备份中的自动恢复,不用人工进行繁琐的操作。

如果你的误操作不是drop、truncate,只是增删改了表中的记录,此时你在recover table时候会出现
RMAN-05112: table “XXX”.“XXXX” already exists
此时你可以dump操作,添加notableimport参数不执行导入操作,然后再手工处理

如果遇到如下报错信息,重新备份下归档日志:

Removing automatic instance
shutting down automatic instance 
Oracle instance shut down
Automatic instance removed
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 03/18/2023 13:01:16
RMAN-03015: error occurred in stored script Memory Script
RMAN-06026: some targets not found - aborting restore
RMAN-06024: no backup or copy of the control file found to restore

解决办法,重新备份下归档日志:

RMAN> backup archivelog all;

全文完!

===================================================

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kuifeng.dong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值