[转]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 以后可删除辅助目标中存储的文件。
 
  • 表空间时间点恢复:体系结构
图表中显示了下列TSPITR 实体:
• 目标数据库:包含要恢复的表空间
• 控制文件:向RMAN 提供备份信息
• 备份集:来自目标数据库,用做重建表空间的来源
• 归档重作日志:来自目标数据库,用做重建表空间的来源
• 辅助实例:在恢复过程当中用来执行恢复的Oracle DB 实例
RMAN 在执行表空间时间点恢复期间会执行下列步骤:
1.将目标时间以前某个时间点的备份控制文件还原到辅助实例。将恢复集的数据文件还原到目标数据库,将辅助集的数据文件还原到辅助实例。
2.将还原的数据文件恢复到指定的时间点。
 
 
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. 备份恢复的表空间并使它们联机。
RMAN>BACKUP TABLESPACE users, example;
RMAN> SQL "ALTER TABLESPACE users, example ONLINE"; 
 
执行彻底自动执行的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模式。

 

来源:http://blog.csdn.net/rlhua/article/details/12659769数据库

相关文章
相关标签/搜索