Oracle DB 执行表空间时间点恢复

• 列出在执行表空间时间点恢复(TSPITR) 时会发生的操作
• 阐释TSPITR 使用的术语的定义
• 确定适合将TSPITR 用作解决方案的情况
• 确定时间点恢复的正确目标时间
• 确定不能使用TSPITR 的情况以及解决方法
• 执行自动TSPITR
 
  • 表空间时间点恢复(TSPITR):概念
• 通过执行TSPITR 可将一个或多个表空间快速恢复到以前的某个时间。
• 执行TSPITR 不会影响数据库中其它表空间或对象的状态。
使用RMAN 自动表空间时间点恢复(TSPITR) 可将Oracle DB 中的一个或多个表空间快速恢复到以前的某个时间,而不会影响数据库中其它表空间和对象的状态。
 
  • 表空间时间点恢复(TSPITR):术语
• 目标时间:表空间恢复到的时间点或SCN
• 恢复集:组成要恢复的表空间的数据文件
• 辅助集:对恢复集执行TSPITR 时所必需的,但不属于恢复集的数据文件。辅助集通常包括:
– SYSTEM表空间
– 还原段表空间
– 临时表空间
• 辅助目标:存储文件的磁盘位置
 
讨论TSPITR 时使用了以下术语:
• 目标时间:执行TSPITR 期间表空间将恢复到的时间点或系统更改号(SCN)。
• 恢复集:组成要恢复的表空间的数据文件。
• 辅助集:对恢复集执行TSPITR 时所必需的,但本身不属于恢复集的数据文件。辅助集通常包括:
- SYSTEM表空间的副本
- 包含来自目标实例的还原段的数据文件
- 某些情况下从辅助实例导出数据库对象期间使用的临时表空间
• 辅助目标:执行TSPITR 期间在磁盘上存储辅助实例的任何辅助集数据文件、控制文件和联机日志的位置。执行完TSPITR 之后可删除辅助目标中存储的文件。
 
  • 表空间时间点恢复:体系结构
Oracle DB 执行表空间时间点恢复
图表中显示了下列TSPITR 实体:
• 目标数据库:包含要恢复的表空间
• 控制文件:向RMAN 提供备份信息
• 备份集:来自目标数据库,用作重建表空间的来源
• 归档重做日志:来自目标数据库,用作重建表空间的来源
• 辅助实例:在恢复过程中用来执行恢复的Oracle DB 实例
RMAN 在执行表空间时间点恢复期间会执行下列步骤:
1.将目标时间之前某个时间点的备份控制文件还原到辅助实例。将恢复集的数据文件还原到目标数据库,将辅助集的数据文件还原到辅助实例。
2.将还原的数据文件恢复到指定的时间点。
 
 
Oracle DB 执行表空间时间点恢复
3.将已恢复表空间中对象的字典元数据导出到目标数据库。
4.在目标数据库上发出SWITCH命令,以使目标数据库控制文件指向辅助实例上已恢复的恢复集中的数据文件。
5.将辅助实例中的字典元数据导入目标实例,以便能访问已恢复对象。
 
  • 何时使用TSPITR
• TSPITR 可在下列情况下使用:
– 恢复因错误的TRUNCATE TABLE语句而丢失的数据
– 从表逻辑损坏中恢复
– 撤消只影响部分数据库的批作业或DML 语句的结果
– 将逻辑方案恢复到与物理数据库其余部分不同的时间点
• TSPITR 使用可移动表空间和数据泵,提供了以下新功能和特性:
– TSPITR 可用于恢复已删除的表空间
– 可反复执行TSPITR 恢复到表空间联机之前的多个时间点,而无需使用恢复目录
 
RMAN TSPITR 可用来:
• 恢复因错误的TRUNCATE TABLE语句而丢失的数据
• 从表逻辑损坏中恢复
• 撤消只对数据库子集有影响的不正确批处理作业或其它数据操纵语言(DML) 语句的结果
• 将逻辑方案恢复到与物理数据库其它部分不同的时间点
在Oracle Database 11g发行版2 之前,TSPITR 使用 导出和导入进行处理。TSPITR 现在使用 可移动表空间和数据泵。由于底层技术的这一变化,现在可使用TSPITR 来恢复已删除的表空间。此外,可反复执行TSPITR 恢复到不同的时间点,而无需使用恢复目录。
 
  • 为TSPITR 做准备
要为TSPITR 做准备,请执行以下步骤:
• 确定正确的目标时间。
• 确定恢复集中需要的内容。
• 确定并保留执行TSPITR 之后会丢失的对象。
 
在执行TSPITR 之前,需要确定恢复的正确目标时间。需要确定恢复集中是否还需要其它表空间。应估计哪些对象会在执行TSPITR 操作后丢失,然后确定如何保留这些对象。
 
  • 确定正确的目标时间
• 除非使用了恢复目录,否则不能再次执行TSPITR。
• 执行TSPITR 并使表空间联机以后,就不能使用更早时间的备份。
• 请使用下列方法确定正确的目标时间:
– 闪回查询
– 闪回事务处理查询
– 闪回版本查询
• TSPITR 的简单替代方法:闪回数据(如果仍然可用作还原数据)。
 
选择执行TSPITR 时的正确目标时间或SCN 极为重要。执行TSPITR 并使表空间联机后,就不能使用早于表空间联机时的任何备份。实际上,这意味着第一次选择了错误的目标时间后就不能再次尝试执行TSPITR,除非使用了恢复目录。但是,如果使用了恢复目录,就可通过执行重复的TSPITR 操作来恢复到不同的目标时间。
如果不使用恢复目录,当前控制文件就不会包含已恢复表空间的旧原型记录。使用包含表空间的当前控制文件进行恢复时,不能使用在表空间联机之前创建的备份。但是,通过将数据库恢复到早于或等于表空间联机时的任何时间点,可以对整个数据库执行不完全恢复,前提是能够从早于该时刻的时间点还原备份控制文件。
可以使用Oracle 闪回查询、Oracle 闪回事务处理查询和Oracle 闪回版本查询来查看对数据库进行的更改,帮助确定TSPITR 的正确目标时间。
注:有了闪回工具和仍然可用作还原数据的数据,使用闪回工具来还原不满意的更改比使用TSPITR 进行还原更为简单。
 
  • 确定恢复集的表空间
• 使用 TS_PITR_CHECK视图来识别跨越恢复集边界的关系。
• 如果要恢复表空间中的对象与其它表空间中的对象有关系,则可以:
– 将包含相关对象的表空间添加到相应的恢复集中
– 在执行TSPITR 期间挂起该关系
– 删除该关系
• 使用DBMS_TTS.TRANSPORT_SET_CHECK过程来确定恢复集中的表空间是否是自包含的。
如果不能确定是否已考虑了与要执行TSPITR 操作的表空间中的对象有关系的所有对象,可以使用TS_PITR_CHECK视图来识别任何其它对象。查询这个视图时,会显示阻止继续执行TSPITR 的任何对象的信息。表空间时间点恢复不能继续进行的原因显示在TS_PITR_CHECK视图的“REASON(原因)”列中。
例如,如果打算对USERS和EXAMPLE表空间执行TSPITR,请通过执行以下查询来确定是否还存在未考虑的、与其它表空间中的对象的关系:
SELECT * FROM SYS.TS_PITR_CHECK WHERE (TS1_NAME IN ('USERS','EXAMPLE') AND TS2_NAME NOT IN ('USERS','EXAMPLE'))
OR (TS1_NAME NOT IN ('USERS','EXAMPLE') AND TS2_NAME IN ('USERS','EXAMPLE'));
 
  • 确定对象之间跨越恢复集边界的关系
执行TSPITR 之前,必须确定恢复集。如果要恢复的表空间中的对象与其它表空间中的对象存在关联,则需要对这些对象进行预配。
在Oracle Database 11g发行版2 之前的版本中,使用SYS.TS_PITR_CHECK视图来确定对象之间跨越恢复集边界的关系。
现在你应使用DBMS_TTS.TRANSPORT_SET_CHECK过程并查询TRANSPORT_SET_VIOLATIONS视图。
DBMS_TTS.TRANSPORT_SET_CHECK ('USERS', 'EXAMPLE');
SELECT * FROM TRANSPORT_SET_VIOLATIONS;
 
注:RMAN TSPITR 自动为恢复集表空间执行DBMS_TTS.TRANSPORT_SET_CHECK过程,并验证针对TRANSPORT_SET_VIOLATIONS的查询是否未返回行。如果该查询返回行,RMAN 会停止TSPITR 处理,必须先解决所有违反表空间封闭性要求的问题,才能继续执行TSPITR。也可以作为一项预防性措施来按如上所述执行该过程并查询视图。
 
 
  • 确定将丢失的对象
• 目标恢复时间之后在表空间中创建的对象会丢失。
• 查询TS_PITR_OBJECTS_TO_BE_DROPPED,确定哪些对象在执行TSPITR 之后会丢失。
• 在执行TSPITR 前后分别使用导出和导入来保留并重新创建丢失的对象。
 
查询TS_PITR_OBJECTS_TO_BE_DROPPED视图,确定是否存在执行表空间时间点恢复后会丢失的对象。
例如,要对USERS和EXAMPLE表空间执行TSPITR,目标时间为2006 年4 月3 日上午8:30:00。
请通过发出以下查询,确定是否存在执行TSPITR 后会丢失的任何对象:
SELECT OWNER, NAME, TABLESPACE_NAME,
TO_CHAR(CREATION_TIME, 'YYYY-MM-DD:HH24:MI:SS')
FROM TS_PITR_OBJECTS_TO_BE_DROPPED
WHERE TABLESPACE_NAME IN ('USERS','EXAMPLE')
AND CREATION_TIME >
TO_DATE('2006-APR-03:08:30:00','YY-MON-DD:HH24:MI:SS')
ORDER BY TABLESPACE_NAME, CREATION_TIME;
 
 
  • 执行基本RMAN TSPITR
• 完全自动执行的TSPITR
– 指定辅助目标。
– RMAN 会管理TSPITR 的所有方面。
– 这是推荐的方法。
• 使用自动辅助实例的定制TSPITR
– 这是在完全自动执行TSPITR 的基础上进行的。
– 定制文件位置。
– 指定初始化参数。
– 指定通道配置。
• 使用您自己辅助实例的TSPITR
– 配置并管理辅助实例。
 
执行TSPITR 时有下列选项:
• 完全自动执行的TSPITR:指定辅助目标,RMAN 会管理TSPITR 操作的所有方面。这是最简单的执行TSPITR 的方法,建议采用这种方法,除非明确指出需要在执行
TSPITR 之后控制恢复集的位置,或者在执行TSPITR 期间控制辅助集文件的位置,或者需要控制辅助实例的通道配置或其它某个方面。
• 使用自动辅助实例的定制TSPITR:TSPITR 基于完全自动执行的TSPITR 的行为,可能仍使用辅助目标。可以自定义其行为的一个或多个方面,如辅助集文件或恢复集
文件的位置。可以为RMAN 创建并管理的辅助实例指定初始化参数或通道配置。
• 使用你自己辅助实例的TSPITR:设置、启动、停止和清除在TSPITR 中使用的辅助实例。另外,可以借助使用自动辅助实例的定制TSPITR 中的一些方法来管理TSPITR 过程。
 
  • 执行完全自动执行的TSPITR
1. 配置在目标实例上执行TSPITR 所需的通道。
2. 使用 AUXILIARY DESTINATION选项指定辅助目标。
RMAN> CONNECT TARGET
RMAN> RECOVER TABLESPACE users, example
> UNTIL TIME '2007-06-29:08:00:00'
> AUXILIARY DESTINATION
> '/u01/app/oracle/oradata/aux';
3. 备份恢复的表空间并使它们联机。
 
执行完全自动执行的TSPITR 时,还必须:
• 配置在目标实例上执行TSPITR 所需的任何通道
• 指定RMAN 用于数据文件辅助集和其它辅助实例文件的目标
在TSPITR 完成之后,备份恢复的表空间并使它们联机。执行TSPITR 之后,不能使用TSPITR 之前创建的参与执行TSPITR 的表空间的备份。
注:此时间格式假定NLS_DATE_FORMAT设置为'yyyy-mm-dd:hh24:mi:ss'且NLS_LANG设置为AMERICAN_AMERICA.WE8MSWIN1252。
 
  • 使用映像副本提高RMAN TSPITR 性能
CONFIGURE AUXNAME由恢复集数据文件的 SET NEWNAME替换:
RUN
{
SET NEWNAME FOR DATAFILE
'$ORACLE_BASE/oradata/orcl/users01.dbf'
TO '/backup/users01.dbf';
RECOVER TABLESPACE users UNTIL SEQUENCE 1300 THREAD 1;
}

可以通过指示RMAN 使用恢复集和辅助集数据文件的现有映像副本来提升TSPITR 的性能。此项技术使RMAN 可以跳过从备份中恢复数据文件这一步骤。

在Oracle Database 11g发行版2 之前的版本中,使用下列技术来指定数据文件现有的映像副本:
• 对恢复集数据文件或辅助集数据文件的映像副本,使用CONFIGURE AUXNAME命令
• 对辅助集数据文件的映像副本,使用SET NEWNAME命令
现在,你仅应该对辅助集数据文件的映像副本使用CONFIGURE AUXNAME命令。应该对恢复集数据文件或辅助集数据文件的映像副本使用SET NEWNAME命令。
 
  • 使用Oracle Enterprise Manager 执行TSPITR
还可以使用Oracle Enterprise Manager 执行TSPITR。导航至“Availability > Perform Recovery(可用性> 执行恢复)”。在“User Directed Recovery(用户执行的恢复)”部分,从“Recovery Scope(恢复范围)”下拉菜单中选择“Tablespaces(表空间)”。
可以对表空间执行三种操作:
• 恢复到当前时间或过去某一时间点:如果需要,还原表空间的数据文件。此操作会通过重做来恢复到指定的时间:当前时间或过去某一时间。此操作是下列两个操作
的组合。
• 还原表空间:仅还原表空间的数据文件。不执行恢复操作。
• 从以前还原的表空间恢复:仅对表空间数据文件执行恢复(重做应用程序)。
 
  • RMAN TSPITR 处理
RMAN 执行TSPITR 的步骤:
1. 创建辅助实例,启动该实例,然后连接到该实例
2. 使要恢复的表空间脱机
3. 将目标时间之前某个时间点的备份控制文件还原到辅助实例
4. 将恢复集和辅助集的数据文件还原到辅助实例
5. 将已还原数据文件恢复到指定时间
6. 使用RESETLOGS选项打开辅助数据库
7. 将已恢复表空间中对象的字典元数据导出到目标数据库
8. 关闭辅助实例
9. 将辅助实例中的字典元数据导入目标实例
10.删除所有辅助集文件
 
恢复集数据文件会恢复到指定目标时间所处的状态。
 
  • 使用RMAN 管理的辅助实例
执行RMAN TSPITR
• 重命名或重定位恢复集数据文件。
• 为部分或全部辅助集数据文件指定不同于辅助目标的位置。
• 在执行TSPITR 之前创建数据文件的映像副本备份。
• 对辅助实例使用不同的通道配置。
• 为RMAN 管理的辅助实例指定不同的初始化参数。
 
如果要自定义RMAN TSPITR,则可以使用RMAN 管理的辅助实例并进行下列更改:
• 使用SET NEWNAME重命名恢复集数据文件,以便不在原始位置还原和恢复它们。
• 通过使用SET NEWNAME为各个文件指定新名称,并使用DB_FILE_NAME_CONVERT提供用于将目标数据库中的数据文件名转换为辅助数据库的数据文件名的规则,控制辅助集数据文件的位置。
• 为了提高RMAN TSPITR 的性能,使用磁盘上的恢复集数据文件和辅助集数据文件的现有映像副本,而不是从备份中还原它们。
 
 
  • 使用你自己的辅助实例执行RMAN TSPITR
• 不推荐,但支持
• 请执行以下步骤:
1. 创建辅助实例的Oracle 口令文件。
2. 创建辅助实例的初始化参数文件。
3. 验证到辅助实例的Oracle Net 连接。
4. 在NOMOUNT模式下启动辅助实例。
5. 将RMAN 客户机连接到目标实例和辅助实例。
6. 执行RECOVER TABLESPACE命令。
 
Oracle 建议通过RMAN 来管理在执行RMAN TSPITR 期间使用的辅助实例的创建和删除。但是,我们也支持创建并使用自己的辅助实例。
要创建适合用作辅助实例的Oracle 实例,请执行以下步骤:
1.使用orapwd实用程序创建辅助实例的Oracle 口令文件。
2.创建辅助实例的文本初始化参数文件。
3.使用有效的网络服务名验证到辅助实例的Oracle Net 连接。
要执行TSPITR,请完成下列步骤:
4.在NOMOUNT模式下启动辅助实例。
5.将RMAN 客户机连接到目标实例和辅助实例。
6.执行RECOVER TABLESPACE命令。
 
  • RMAN TSPITR 故障排除
• 文件名冲突:确保使用SET NEWNAME、CONFIGURE AUXNAME和DB_FILE_NAME_CONVERT时没有文件名冲突。
• RMAN 不能识别包含还原段的表空间:请使用UNDO TABLESPACE子句。
• 发生TSPITR 故障后重新启动手动辅助实例:在NOMOUNT模式下关闭并重新启动。
 
文件名冲突:如果因使用SET NEWNAME、CONFIGURE AUXNAME和DB_FILE_NAME_CONVERT导致辅助集或恢复集中的多个文件同名,则在执行TSPITR
期间会收到错误。要纠正问题,需要为这些参数指定不同的值以避免出现重复名称。
RMAN 不能识别包含还原段的表空间:在执行TSPITR 期间,RMAN 需要有关哪些表空间包含TSPITR 目标时间还原段的信息。这种信息通常位于恢复目录中(如果使用了恢复目录)。如果没有恢复目录,或者如果恢复目录中没有这种信息,则RMAN 会继续执行操作,而且假设包含目标时间还原段的表空间集与包含当前时间还原段的表空间集相同。如果此假定不正确,TSPITR 操作就会失败,同时报告错误。为防止此类错误发生,请在UNDO TABLESPACE子句中提供包含目标时间还原段的表空间列表。
发生TSPITR 故障后重新启动手动辅助实例:如果管理自己的辅助实例并且TSPITR 出现故障,则在重试TSPITR 之前,必须关闭辅助实例、更正问题并将辅助实例重新置于NOMOUNT模式。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
上一篇:09-移动端开发教程-Sass入门


下一篇:C语言中的字符串截取函数