表空间时点恢复,是Oracle在基于冷备,热备恢复以外的一种以表空间为粒度的,不完全恢复的形式来将表空间恢复到过去某个特定的时间点的一种恢复方式。它整合了RMAN以及DataPump这2个备份恢复工具来实现时点恢复。那它具体的过程和逻辑是怎样的?下文是其具体的描述。
  一、什么是表空间时点恢复
  Oracle表空间时点恢复有2个需要理解的概念。
  · 恢复粒度
  表空间级别,也是说恢复的粒度是以表空间为单位
  · 时点恢复
  时点恢复意味着是一个不完全恢复。也是说可以把某个或几个表空间恢复到过去的特定时间点,进行视点恢复的表空间可以与数据库中现有的其他表空间不在同一个时间线上。
  二、适用场景
  表空间时点恢复适用用以下场景:
  错误的批处理作业或数据操作语言DML
  恢复数据定义语言(DDL)后丢失的数据操作,改变表的结构。不能使用闪回表将表倒回结构更改点之前,例如截断表(truncate)操作。
  恢复drop时使用了purge选项的表
  恢复存在逻辑错误的表
  恢复被删除的表空间,RMAN可以在被drop的表空间上面执行TSPITR
  与全库级别闪回相比,表空间时点恢复停留在表空间级别,影响较全库闪回较小。其次,数据库闪回功能需要承担维护闪回日志开启的相关性能开销。
  三、实现表空间时点恢复的前提及限制
  要实现表空间的时点恢复有以下前提,同时也存在一些限制,如下:
  1.存在有效可用的备份
  2.数据库处于归档模式
  3.表空间上存在约束关系(依赖)表的情形,依赖关系所在的表空间也需要一同做时点恢复(如外键参照,不在同一时点,则违反参照约束)
  4.对于索引与数据分离的表空间在时点恢复时,应先删除索引
  5.不能恢复数据库当前的缺省表空间
  6.不能恢复以下对象:
  存在依赖关系的物化视图,分区表等(如果要恢复,先解决依赖)
  undo表空间,undo段
  sys模式下的对象(如PL/SQL,views, synonyms, users…)
  四、表空间时点恢复的相关术语
  Target instance
  目标实例,即需要恢复的表空间的实例
  Target time
  要恢复的目标时间点或者scn
  Auxiliary instance
  是一个Oracle实例,用来完成各种恢复表空间工作的实例。辅助实例需要有其关联的文件。
  Auxiliary destination
  用来临时存储辅助实例相关文件的辅助目录。
  Recovery set
  恢复集合,需要恢复的表空间中的数据文件
  Auxiliary set
  辅助实例的其他文件集合。如system,sysaux,undo,临时表空间,原数据库控制文件,归档日志文件,联机重做日志文件等
  (不包括参数文件,密码文件,网络文件)
  五、表空间时点恢复TSPITR 结构图

 

  六、表空间时点恢复的几种模式
  全自动(缺省)
  在这个模式中,RMAN管理整个不完全恢复过程包括辅助实例。默认的模式是省事的。除非你特别需要在TSPITR过程中可以有更多控制,诸如控制恢复集文件目录,通道设置、参数或辅助实例实例相关设置。如下示例:
  rman target /
  RMAN> recover tablespace users, tools
  until logseq 1300 thread 1
  -- until time "to_date( '2017-04-18 16:05:07', 'yyyy-mm-dd hh24:mi:ss')"
  auxiliary destination '/disk1/auxdest';
  半自动(辅助实例使用用户自定义的设置)
  run
  {
  set newname for datafile '?/oracle_home/oradata/trgt/users01.dbf'
  to '/newfs/users01.dbf';
  ...other set newname commands...
  recover tablespace users, tools until sequence 1300 thread 1;
  }
  如可以设置辅助集位置,恢复集文件
  初始化参数
  手动
  该方式需要人为管理整个TSPITR的方方面。比如需要为用户托管的辅助实例分配不同数量的通道或更改通道参数,则使用此模式。
run
{
# specify newname for recovery set data files
set newname for tablespace clients
to '?/oradata/prod/rec/%b';
# specify newnames for some auxiliary set
# data files that have a valid image copy to avoid restores:
set newname for datafile '?/oradata/prod/system01.dbf'
to '/backups/prod/system01_monday_noon.dbf';
set newname for datafile '?/oradata/prod/system02.dbf'
to '/backups/prod/system02_monday_noon.dbf';
set newname for datafile '?/oradata/prod/sysaux01.dbf'
to '/backups/prod/sysaux01_monday_noon.dbf';
set newname for datafile '?/oradata/prod/undo01.dbf'
to '/backups/prod/undo01_monday_noon.dbf';
# specify the types of channels to use
allocate auxiliary channel c1 device type disk;
allocate auxiliary channel t1 device type sbt;
# recover the clients tablespace to 24 hours ago:
recover tablespace clients until time 'sysdate-1';
}
  七、表空间时点恢复TSPITR原理及步骤
  1.自包含检查,也是检查是否存在依赖性。执行DBMS_TTS.TRANSPORT_SET_CHECK后,查看视图TRANSPORT_SET_VIOLATIONS,如果有记录被返回,则需要先解决依赖。
  2.检查是否连接到一个用户管理的辅助实例,否则RMAN将创建一个辅助实例,启动并连接到辅助实例。
  3.在目标数据库中将要被恢复的表空间置于脱机状态。
  4.对辅助实例使用恢复目标时间之前的控制文件备份来还原控制文件。
  5.从恢复集和辅助集中将数据文件还原到辅助实例。还原的数据文件可以存储在你指定的目录中或者是文件的原始目录中(对于恢复集文件)或者在辅助目录中(对于辅助集文件,如果你使用了有auxliary destination参数的recover tablespace命令)。
  6.在辅助实例中将数据文件还原和恢复到指定的目标时间点。
  7.使用resetlogs选项将辅助实例打开
  8.将辅助实例上恢复集表空间置为只读模式
  9.使用DataPump从辅助实例导出恢复集表空间产生一个传输表空间dump文件
  10.关闭辅助实例
  11.从目标实例删除恢复集表空间(即需要进行时点还原的表空间)
  12.DataPump程序将使用传输表空间方式将dump文件导入到目标数据库
  13.将导入到目标数据库的表空间置为读/写并立即离线
  14.删除所有辅助集数据文件