合 12c RMAN新特性之recover table(表级别恢复)
Tags: Oraclerecover table表级别恢复
- 12c中的RECOVER TABLE
- Oracle 12c 新特性:RMAN Recover Table 详解
- 1. Recover Table 和 Table Partitions概述
- 2 PDB操作示例
- 2.1 准备测试环境
- 2.2 RMAN 备份CDB
- 2.3 恢复数据
- 3 注意事项
- 3.1 说明1:PDB操作恢复的数据还在原PDB中生成
- 3.2 说明2: RMAN-05112: table "LOTUS"."CNDBA" already exists
- 3.3 说明3:ORA-01516: nonexistent log file 问题
- 3.4 说明4:non-CDB与PDB的区别
- Oracle 12C 新特性之 恢复表
- 参考
12c中的RECOVER TABLE
在RMAN中提供了表级别恢复(RECOVER TABLE)。在Oracle 12c中,在发生drop或truncate的情况下,可以从RMAN备份种将一个特定的表或分区恢复到某个时间点、SCN或归档序列号,并且可以有下面的选择:
l 使用REMAP选项将表恢复为一个新表或者分区中,也可以恢复到其他用户中。
l 只生成一个需要被恢复表的expdp格式的dump文件,选择后期再进行恢复。
Oracle 12c的Recover Table新特性是利用创建辅助临时实例加数据泵工具来实现的。通常在进行Recover Table之前应该准备好两个目录(AUXILIARY DESTINATION和DATAPUMP DESTINATION),AUXILIARY DESTINATION用来临时存放辅助实例的数据文件,DATAPUMP DESTINATION用来临时存放数据泵导出的文件。
只要之前创建了RMAN备份,那么就可以根据指定的的时间来进行表级和表分区级的恢复操作,而且不影响其他的数据库对象。RMAN的表级和表分区级恢复可以使用在如下场景:
① 在恢复小表或数据库中的某几张表时,但发现使用Restore Database或Tablespace的代价很高而且效率很低。也可以使用TSPITR(表空间基于时间点的恢复)的方法,但该方法效率很低,因为需要移动表空间中的所有对象。
② 恢复有逻辑损坏或者被删除的表。
③ Flashback Table不可用,例如Undo数据已经被覆盖的情况。
④ DDL操作后需要恢复数据。Flashback Table不支持表结构发生改变后的回退,例如TRUNCATE TABLE。
RMAN从备份中自动处理恢复表或者表分区时会执行如下步骤:
1.判断哪些备份包含需要恢复的表或表分区,然后根据指定的时间来进行恢复。
2.判断目标主机上是否有足够的空间来创建auxiliary instance,该实例用于处理表或分区的恢复。如果需要的空间不足,那么RMAN会报错并退出恢复操作。
3.创建auxiliary database,并根据指定的时间来恢复指定的表或表分区到auxiliary database中。辅助数据库的数据文件位置可以在命令中指定。
4.创建包含恢复表或表分区的数据泵文件(expdp dump file)。数据泵的名称和位置也可以在命令中指定。
5.(可选操作)将上一步生产的数据泵文件导入到目标实例中。当然也可以选择不导入,如果选择不导入就必须使用impdp手工导入。
6.(可选操作)在目标数据库中rename恢复表或表分区。
关于RECOVER TABLE需要注意的几个问题:
l 目标数据库必须被置于读写模式。
l 目标数据库必须被置于归档模式。
l 如果要恢复表或者分区,你必须拥有这些表或者分区存在后的时间的备份。
l 想要恢复单个表分区,COMPATIBLE初始化参数所在的目标库必须设置为11.1.0或以上。
l SYS用户下的表或分区无法恢复。
l 存储于SYSAUX和SYSTEM表空间下的表和分区无法恢复。
l Standby数据库上的表或表分区不能进行恢复。
l 在使用REMAP的情况下,有NOT NULL 约束的表不能进行恢复。
l 确保对于辅助数据库在文件系统下有足够的可用空间,同时对数据泵文件也有同样保证。
l 必须要存在一份完整的数据库备份,至少要有SYSTEM、UNDO、SYSAUX和表所在表空间相关的备份。表误操作可以在数据库备份之前也可以在数据库备份之后。如果恢复的表在PDB中,那么需要备份Root Container的SYSTEM,SYSAUX、UNDO和PDB的SYSTEM、SYSAUX以及包含了要恢复的表的表空间。
l 在存在CDB的情况下,在执行RECOVER TABLE时必须使用sys用户登录,而不能使用“rman target /”进行登录。
在执行“RECOVER TABLE”命令时,可以根据需要在以下三种级别指定时间:
(1)SCN号
(2)Sequence number(日志序列号)
(3)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”命令的一般格式为:
1 2 3 4 5 6 7 8 9 10 11 12 13 | RMAN> connect target "username/password as SYSBACKUP"; RMAN> RECOVER TABLE username.tablename UNTIL TIME 'TIMESTAMP…' AUXILIARY DESTINATION '/u01/tablerecovery' DATAPUMP DESTINATION '/u01/dpump' DUMP FILE 'tablename.dmp' NOTABLEIMPORT -- this option avoids importing the table automatically.(此选项避免自动导入表) REMAP TABLE 'username.tablename': 'username.new_table_name'; -- can rename table with this option.(此选项可以对表重命名) |
示例1:在PDB中恢复表HR.PDB_EMP,恢复后的表命名为EMP_RECVR
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | RECOVER TABLE HR.PDB_EMP OF PLUGGABLE DATABASE HR_PDB UNTIL TIME 'SYSDATE-4' AUXILIARY DESTINATION '/tmp/backups' REMAP TABLE 'HR'.'PDB_EMP':'EMP_RECVR'; RECOVER TABLE DB12C.T UNTIL SCN 1932621 AUXILIARY DESTINATION '/tmp/oracle/recover' REMAP TABLE 'DB12C'.'T':'T_HISTORY_20130717'; RECOVER TABLE LHR.TEST_RT UNTIL TIME "to_date('2018-04-09:13:51:48','yyyy-mm-dd hh24:mi:ss')" AUXILIARY DESTINATION '/tmp' REMAP TABLE 'LHR'.'TEST_RT':'TEST_RT_LHR'; 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; |
示例2:从RMAN备份中恢复表SCOTT.EMP,SCOTT.DEPT,并以数据泵格式导出emp_dept_exp_dump.dat,并不进行表的导入
1 2 3 4 5 6 7 8 9 10 11 | RECOVER TABLE SCOTT.EMP, SCOTT.DEPT UNTIL TIME 'SYSDATE-1' AUXILIARY DESTINATION '/tmp/oracle/recover' DATAPUMP DESTINATION '/tmp/recover/dumpfiles' DUMP FILE 'emp_dept_exp_dump.dat' NOTABLEIMPORT; |
示例3:恢复表的两个分区,恢复后表分区重新命名并且放置于SALES_PRE_2000_TS表空间
1 2 3 4 5 6 7 8 9 10 11 12 | 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'; |
Oracle 12c 新特性:RMAN Recover Table 详解
1. Recover Table 和 Table Partitions概述
Oracle 从12c开始支持在RMAN 中进行表级的恢复操作,即对单表进行recover。官方文档链接如下:
http://docs.oracle.com/database/122/BRADV/rman-recovering-tables-partitions.htm
RMAN的表级和表分区级恢复可以使用在如下场景:
\1. 恢复小表时。也可以使用TSPITR 的方法,但该方法效率很低,因为需要移动表空间中的所有对象。
\2. 恢复有逻辑损坏或者被删除的表。
\3. Flashback Table 不可用,比如undo 数据已经被覆盖。
\4. DDL 操作后需要恢复数据。Flashback Table 不支持表结构发生改变后的回退。 比如truncate table。
只要之前创建了RMAN 备份,就可以根据指定的的时间来进行表级和表分区级的恢复操作,而且不影响其他的数据库对象。
可以根据在以下三种级别指定时间:
(1) SCN
(2) Sequence number