诊断和响应故障_恢复表和表分区

1.从RMAN备份中恢复表和表分区概述

RMAN的RECOVER命令让你从RMAN备份中恢复表和表分区。

1.1.从RMAN备份中恢复表和表分区目的

RMAN让你恢复一个或多个表或表分区到指定的时间点而不影响其余的数据库对象。你可以使用之前创建的RMAN备份恢复表和表分区到指定的时间点。

在以下场景中从RMAN备份中恢复表和表分区是有用的:
1)你需要恢复少量的表到一个特定的时间点。在这个情形中,TSPITR是最有效的解决方法因为它移动表空间中的所有对象到指定的时间点。
2)你需要恢复被逻辑损坏或删除和清空的表。
3)由于期望的时间点比可用的undo旧无法执行闪回表。
4)你想恢复在修改表结构的DDL操作之后丢失的数据。因为在表上运行的DDL的时间是在期望的时间点和当前时间之间,无法执行闪回表。闪回表不能倒回表通过结构性的更改比如清空表操作。


1.2.需要恢复表和表分区的RMAN备份

为恢复表或表分区,你需要undo,SYSTEM,SYSAUX和包含表或表分区的表空间的完全备份。

为了恢复一个表,包含表的依赖对象的所有分区必须包括在恢复集中。如果表空间tbs1中的表的索引或分区被包含在表空间tbs2,那么只有在表空间tbs2也被包括在恢复集中时才可以恢复表。

1.3.从RMAN备份中恢复表和表分区的基本概念

为了从RMAN备份中恢复表和表分区,你需要提供以下信息:
1)必须恢复的表或表分区的名称
2)表或表分区必须恢复到的时间点
3)恢复的表或表分区是否必须导入到目标数据库

RMAN使用这个信息自动化恢复指定表或表分区的过程。作为恢复过程的一部分,RMAN创建一个辅助数据库用来恢复表或表分区到指定的时间点。

如果恢复的表或表分区需要被重命名,映射到一个新表空间或映射到一个新模式,那么你必须指定表,表空间或模式的新名称。


1.3.1.通过RMAN执行恢复表和表分区的步骤

当从RMAN备份自动化恢复表或表分区的过程时,RMAN执行一序列步骤。

这些步骤包括以下:
1)基于指定的恢复时间点,确认哪些备份包含需要恢复的表或表分区。

2)确认目标主机上是否有足够的空间来创建在表或分区恢复过程中使用的辅助实例。
如果要求的空间不可用,那么RMAN显示错误和退出恢复操作。

3)在目标主机上创建辅助数据库和恢复指定的表或表分区到辅助数据库,直到指定的时间点。
你可以指定目标主机上的位置用来存储辅助数据库中的恢复的数据文件。

4)创建一个包含恢复表或表分区的Data Pump的导出dump文件。
可以指定Data Pump导出的dump文件的名称和位置用来存储恢复表或表分区的元数据。

5)(可选)导入Data Pump导出的dump文件到目标实例。
可以选择不导入包含恢复表或表分区的导出的dump文件到目标数据库。如果不导入导出的dump文件作为恢复过程的一部分,你必须在随后使用Data Pump Import工具手动导入它。

6)(可选)重命名目标数据库中的恢复表或表分区。
你也可以导入恢复的对象到与原始存在的不同的表空间或模式。


1.3.2.关于在RMAN表恢复期间辅助数据库文件的位置

RMAN创建它在恢复指定表或表分区期间使用的辅助数据库。多个技术可用于指定辅助数据库文件的位置。

在用来存储辅助数据库的数据文件的目标主机上,使用其中一个以下技术:
1)RECOVER命令中的AUXILIARY DESTINATION
2)SET NEWNAME命令

使用RUN块包含RECOVER命令和要求的重命名数据文件的SET NEWNAME命令。

建议通过使用AUXILIARY DESTINATION子语句提供辅助数据库中的数据文件的位置。当使用SET NEWNAME命令时,如果你忽略即使一个恢复过程要求的数据文件的名称,表或表分区都不能被恢复。


1.3.3.关于RMAN表恢复期间使用的Data Pump Export 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_n是通过RMAN创建的执行恢复的辅助数据库的Oracle SID,n是任意随机生成的数字。如果有一个通过DUMP FILE指定的名称的文件在dump文件必须创建的位置中存在,那么恢复操作失败。


1.3.4.关于导入恢复表和表分区到目标数据库

缺省情况下,RMAN导入存储在导出的dump文件中的恢复表或表分区到目标数据库。然而,你可以通过使用RESTORE命令的NOTABLEIMPORT子语句选择不导入恢复的表或表分区。

当使用NOTABLEIMPORT时,RMAN恢复它们到指定的点,然后创建导出的dump文件。然而,这个dump文件不会被导入到目标数据库。当需要时,你必须手动通过使用Data Pump Import工具导入这个dump文件到你的目标数据库。

如果在导入操作期间发生错误,RMAN在表恢复结束时不会删除导出的dump文件。这让你可以手动导入dump文件。


1.3.5.重命名恢复的表和表分区

使用REMAP TABLE子语句来重命名目标数据库中的恢复的表或表分区。

如果目标数据库包含与恢复的表相同名称的表,RMAN显示错误信息指示你必须使用REMAP TABLE子语句重命名恢复的表。

当你恢复表分区时,每个表分区被恢复到不同的表。使用REMAP TABLE子语句指定每个恢复的分区必须被导入到的表名。如果你不明确指定表名,RMAN通过连接恢复的表名和分区名生成表名。生成的名称是格式tablename_partitioname。如果使用这个名称的表在目标数据库中存在,那么RMAN附加_1到名称。如果这个名称也存在,那么RMAN附加_2到名称,以此类推。

为了导入恢复的表或表分区到与这些对象原始存在的表空间不同的表空间,使用RECOVER命令的REMAP TABLESPACE子语句。只有正在恢复的表或表分区会被重新映射,现存的对象不会更改。

注:当你使用REMAP TABLE子语句时,不能导入被命名的约束和索引。


1.3.6.关于恢复表和分区到新模式

恢复表或表分区到不同的模式让你可以避免由在源模式中已存在的约束,索引或触发器名称引起的名称冲突。

从Oracle数据库12c Release 2(12.2)开始,可以恢复表或表分区到与源模式(它们原始存在的模式)不同的模式。当恢复对象对不同的模式时,可以保留原始名称或重命名它们。可以在一个单一的恢复操作中重命名表和映射模式。例如,可以恢复表HR.EMPLOYEES到NEW_HR.EMPLOYEES,HR.NEW_EMPLOYEES,或NEW_HR.NEW_EMPLOYEES。子语句REMAP TABLE让你重命名对象和恢复它们到不同的模式。

在表恢复期间,使用RECOVER TABLE命令的REMAP TABLE子语句映射源模式到新模式。在执行恢复之前,新模式必须在目标数据库中存在。

注:表恢复在物理备数据库中不被支持。对于逻辑备数据库,在主数据库上恢复的对象会被传播到逻辑备数据库。


1.4.从RMAN备份中恢复表和表分区的限制

通过使用RECOVER命令从RMAN中恢复表和表分区遵从某些限制。

限制包括以下:
1)属于SYS模式的表和表分区不能被恢复。
2)来自SYSTEM和SYSAUX表空间的表和表分区不能被恢复。
3)在备数据库上的表和表分区不能被恢复。
4)具有命名的NOT NULL约束的表不能使用REMAP选项恢复。


2.准备恢复表和表分区

在准备恢复表或表分区之前,你必须执行某些初始的任务。

从RMAN备份中恢复表或表分区的准备工作包括以下步骤:

1)验证满足恢复表或表分区要求的前提条件。

2)确认表或表分区必须恢复到的时间点。

3)决定恢复的表或表分区是否必须导入到目标数据库。
缺省情况下,RMAN导入恢复的表或表分区到目标数据库。然而,你可以指定RMAN必须不导入恢复的对象。

4)决定恢复的表或表分区是否必须要重命名,映射到新的表空间或映射到新的模式。


2.1.从RMAN备份中恢复表和表分区的前提条件

在从RMAN备份恢复表或表分区之前必须满足某些前提条件。

它们包括以下:
1)目标数据库必须在读写模式。
2)目标数据库必须在ARCHIVELOG模式。
3)你必须有你想恢复这些对象到的时间点存在的表或表分区的RMAN备份。
4)为了恢复单一的表分区,目标数据库的初始化参数COMPATIBLE必须设置为11.1.0或更高。


2.2.确认表和表分区必须恢复到的时间点

确认你想恢复表或表分区到的精确的时间点是非常重要的。存在多种方式来指定对象必须恢复到的时间点。

使用以下其中一个方法:
1)SCN
恢复表或表分区到通过SCN指定的时间时它们在的状态
2)时间
恢复表或表分区到指定时间时的状态。使用NLS_LANG和NLS_DATE_FORMAT环境变量中指定的日期格式。你也可以使用数据常量比如SYSDATE来指定时间。
3)序列号
恢复表或表分区到通过日志序列号和线程号指定的时间时它们在的状态。


3.恢复表和表分区

使用RESTORE和RECOVER命令恢复表或表分区。

恢复非CDB中的表或表分区到指定的时间点:
1)执行“准备恢复表和表分区”章节中描述的规划任务。

2)启动RMAN,使用具有SYSBACKUP或SYSDBA权限的用户作为TARGET连接到目标数据库。

3)恢复选择的表或表分区到通过RECOVER TABLE命令指定的时间点。你必须使用AUXILIARY DESTINATION子语句和以下其中一个子语句指定恢复的时间点:UNTIL TIME,UNTIL SCN,或UNTIL SEQUENCE。

可以在RECOVER命令中使用以下额外的子语句:
a.DUMP FILE和DATAPUMP DESTINATION
指定导出的包含恢复表或表分区的dump文件的名称和它必须存储的位置。
b.NOTABLEIMPORT
指示恢复的表或表分区必须不要导入目标数据库。
c.REMAP TABLE
重命名目标数据库中恢复的表或表分区。这个子语句也用来恢复表或表分区到与源模式不同的模式。
d.REMAP TABLESPACE
恢复表或表分区到与这些对象原始存在的表空间不同的表空间。


4.示例:从RMAN中准备恢复表和表分区

4.1.示例:恢复表到指定的时间点

本示例恢复多个表到使用SYSDATE指定的时间点。

假设你想恢复两个表EMP和DEPT到2天前的状态,在某些逻辑损坏发生之前。然而,你不想RMAN导入这些表到目标数据库。RMAN只创建导出的dump文件,名为emp_dept_exp_dump.dat,在位置/tmp/recover/dumpfiles。使用NOTABLEIMPORT指示这些表必须不导入目标数据库。当需要时,你可以通过使用Data Pump Import工具导入这些表。在恢复过程期间使用的辅助目的地是/tmp/oracle/recover。

恢复表EMP和DEPT而不导入它们到目标数据库:
1)执行“准备恢复表和表分区”章节描述的规划任务。
2)启动RMAN会话和作为TARGET连接到目标数据库。
3)使用RECOVER命令的以下子语句恢复表EMP和DEPT:DATAPUMP DESTINATION,DUMP FILE,REMAP TABLE和NOTABLEIMPORT。

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;


4.2.示例:恢复表分区到指定的日志序列号

本示例使用RMAN备份恢复多个表分区。

在这个示例中,表sales在模式sh中,包含以下分区:sales_1998,sales_1999,sales_2000和sales_2001。这个表存储在表空间sale_ts。你需要恢复2个分区sales_1998和sales_1999到通过redo日志序列号指定的时间点。恢复的表必须自动导入到目标数据库和映射到表空间SALES_PRE_2000_TS。

恢复分区sales_1998和sales_1999到指定的日志序列号:
1)执行“准备恢复表和表分区”章节描述的规划任务。
在这个示例中,你需要恢复两个表分区到指定的日志序列号,然后导入这些分区到目标数据库。
2)启动RMAN会话和作为TARGET连接到目标数据库。
3)使用RECOVER命令和子语句REMAP TABLE和REMAP TABLESPACE恢复分区。
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’;

在这个示例中,指定的表分区作为不同的表导入,名为historic_sales_1998和historic_sales_1999,到目标数据库的表空间sales_pre_2000_ts。子语句REMAP TABLE指定导入表使用的名称。在恢复过程中使用的辅助目的地是/tmp/oracle/recover。

如果你忽略REMAP TABLE子语句,RMAN为导入表使用缺省的名称。名称是原始表名称和分区名的组合。


4.3.示例:恢复表到新模式

本示例恢复多个表到一个与源模式不同的新模式。

在这个示例中,表HR.DEPARTMENTS和SH.CHANNELS需要恢复到一天前它们所在的状态,在逻辑损坏发生之前。恢复的表必须被重命名为NEW_DEPARTMENTS和NEW_CHANNELS和导入到EXAMPLE模式。模式EXAMPLE在示例运行时存在。

子语句REMAP TABLE用来指示源模式如何映射到新的目标模式。在恢复过程期间使用的辅助目的地是/tmp/auxdest。

1)执行从RMAN备份中恢复表要求的规划任务。
在这个示例中,你需要还原表到使用SYSDATE的表达式指定的时间点。

2)启动RMAN会话,连接到目标数据库。

3)恢复表HR.DEPARTMENTS和SH.CHANNELS,分别重命名它们到NEW_DEPARTMENTS和NEW_CHANNELS,然后导入它们到模式EXAMPLES。

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;




来源:《Oracle Database Backup and Recovery User’s Guide,19c》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值