日期:2014-05-16  浏览次数:20369 次

TSPITR(基于时间点的表空间恢复)

TSPITR(Tablespace Point-In-TIme Recovery)介绍


   TSPITR(表空间时间点恢复)用于将一个或多个表空间恢复到过去某个时间点的状态,而其他表空间仍然保持现有状态。
   (1) TSPITR(Tablespace Point-In-Time Recovery),只适用于ARCHIVELOG模式。
   (2) TSPITR实现方法,建议使用RMAN实现表空间时间点恢复。
   (3) DBPITR(Database Point-In-TIme Recovery),数据库时间点恢复;表示将数据库的所有表空间恢复到过去时间颠倒俄状态,只适用于ARCHIVELOG模式。
   (4) 主数据库(Primary Database),用于存放应用系统数据的Oracle数据库。当执行TSPITR时,主数据库是指包含有被恢复表空间的数据库。
   (5) 恢复集(Recovery Set),是指在主数据库上需要执行TSPITR的表空间集合。注意,当在恢复集的表空间上执行TSPITR时,要求这些表空间必须是自包含的.
   (6) 辅助数据库(Auxiliary Database),是主数据库的一个副本数据库。当执行TSPITR时,辅助数据库用于将恢复集表空间恢复到过去时间点。注意,辅助数据库的所有物理文件都是从主数据库备份中取得,并且辅助数据库必须包含SYSTEM表空间、UNDO表空间、恢复集表空间的备份文件。
   (7) 辅助集(Auxiliary Set),是指辅助数据库所需要的、除了恢复集表空间文件之外地饿其他文件集合。当执行TSPITR时,辅助数据库除了需要恢复表空间的备份文件之外,还需要备份控制文件、SYSTEM表空间的备份文件、UNDO表空间的备份文件。

注意:恢复集表空间必须为自包含,违反自包含表空间集合的常见情况如下:
       1,表空间集合包含有SYS方案对象
       2,表空间集合包含了索引所在的表空间,但没有包含索引基表所在的表空间
       3,表空间集合没有包含分区表的所有分区
       4,表空间集合包含了表所在的表空间,但没有包含其LOB列所在的表空间


下面是具体的实验步骤:

创建auxiliary destination
[oracle@even ~]$ mkdir /u01/tspitr

创建测试表空间tspitr_tbs
SQL> create tablespace tspitr_tbs datafile '/u01/app/oracle/oradata/test/tspitr_tbs01.dbf' size 10M;

Tablespace created.

测试表空间创建一个表
SQL> conn hr/hr
Connected.
SQL> create table tspitr tablespace tspitr_tbs as select * from dba_objects;

Table created.

SQL> select count(*)from tspitr;

  COUNT(*)
----------
     50324

确定要不完全恢复到的时间点:
SQL> select sysdate from dual;

SYSDATE
-------------------
2013-01-01 10:42:25

切换日志:
SQL> alter system switch logfile;

System altered.

SQL> alter system switch logfile;

System altered.

SQL> alter system switch logfile;

System altered.

SQL> alter system switch logfile;

System altered.

测试把tspitr表truncate掉
SQL> truncate table tspitr;

Table truncated.

数据记录为空了
SQL> select count(*)from tspitr;

  COUNT(*)
----------
         0

 

检查表空间是否为自我包含:
注意:只有自包含的表空间,才能基于单独不完全恢复。所谓自包含,是指该表空间中的对象不依赖于其它表空间中的对象,如该表空间中索引的基本在其它表

空间,该表中某些表的lob列放在其它表空间。

SQL> conn / as sysdba
Connected.
SQL> exec DBMS_TTS.TRANSPORT_SET_CHECK('tspitr_tbs',true,true);

PL/SQL procedure successfully completed.

SQL> SELECT * FROM TRANSPORT_SET_VIOLATIONS;

no rows selected
说明tspitr是自包含表空间。