Chinaunix首页 | 论坛 | 博客
  • 博客访问: 92898
  • 博文数量: 46
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 470
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-15 03:05
文章分类

全部博文(46)

文章存档

2011年(1)

2008年(45)

我的朋友

分类: Oracle

2008-08-16 21:36:11

表空间时间点恢复(TSPITR)

一 TSPITR 的基本步骤是:
       (0) 检查需要恢复的表空间的数据文件备份和控制文件备份是否存在
       (1) 验证表空间的可传输性
       (2) 准备辅助实例
       (3) 执行实际的 TSPITR
       (4) 在目标数据库上执行 TSPITR 后的操作。
       
   1.验证表空间的可传输性
    RMAN 使用 Oracle 可传送的表空间特性来执行 TSPITR,因此表空间本身必须是可传送的。许多因素都导致表空间不可传送。
      TSPITR 限制
           不能还原包含 SYS 用户对象
           不能执行 TSPITR 恢复具有复制主表的表空间
           不支持使用快照日志的表空间
           不能还原含有回滚段的表空间
           不能还原含有分区对象(该对象的分区跨越多个表空间)的表空间
           表空间中不能含有 VARRAY、嵌套表、外部表对象
          不能用于恢复删除的表空间。
 
     可以通过 TS_PITR_CHECK 视图来判断表空间是否可传送。如果表空间不可传送,那
么执行 TSPITR 时就会失败。下面是查询 USERS 表空间是否可传送的语句:
    

     SELECT OBJ1_OWNER,OBJ1_NAME,OBJ1_TYPE,TS1_NAME,REASON
     FROM TS_PITR_CHECK
     WHERE TS1_NAME='USERS';
             如果未选定行,说明 USERS 表空间可传输。
  
SQL> select obj1_name,ts1_name,obj2_name,ts2_name from sys.ts_pitr_check
  2  where obj1_owner='HR';

OBJ1_NAME                      TS1_NAME
------------------------------ ------------------------------
OBJ2_NAME                      TS2_NAME
------------------------------ ------------------------------
REGIONS                        EXAMPLE
COUNTRIES                      SYSTEM

REGIONS                        EXAMPLE
COUNTRIES                      SYSTEM

REGIONS                        EXAMPLE
COUNTRIES                      SYSTEM

3 rows selected.

SQL> select obj1_name,ts1_name,obj2_name,ts2_name from sys.ts_pitr_check
  2  where ts2_name='USERS';

OBJ1_NAME                      TS1_NAME
------------------------------ ------------------------------
OBJ2_NAME                      TS2_NAME
------------------------------ ------------------------------
LINEITEM_TABLE                 SYSTEM
SYS_IL0000052391C00010$$       USERS

LINEITEM_TABLE                 SYSTEM
SYS_IL0000052391C00005$$       USERS

ACTION_TABLE                   SYSTEM
SYS_IL0000052386C00004$$       USERS


SQL> 这里说明不可传输,要是硬是往下作恢复就会得到
About to export Tablespace Point-in-time Recovery objects...
EXP-00008: ORACLE error 29308 encountered
ORA-29308: view TS_PITR_CHECK failure
ORA-06512: at "SYS.DBMS_PITR", line 887
ORA-06512: at line 1



2.准备 TSPITR 的辅助实例 (AUXILIARY INSTANCE)
     
      启动 TSPITR之前,需要准备辅助实例。这是一个不需要 RMAN参与的手工过程。执行下面的步骤来创建辅助实例:
               创建口令文件
               创建辅助实例的参数文件:
       编辑辅助实例参数文件的一个简单方法是把目标数据库的参数文件改一下即可。  如果目标数据库用的是 SPFILE,那么在 SQLPLUS 中执行 CREATE PFILE FROM SPFILE 就可以生成参数文件。
               注意:
               DB_UNIQUE_NAME=aux
               CONTROL_FILES=/u01/oracle/oradata/aux/control01.ctl
               DB_FILE_NAME_CONVERT=('/opt/ora10g/oradata/rgsong/','/opt/ora10g/oradata/aux')
               LOG_FILE_NAME_CONVERT=('/opt/ora10g/oradata/rgsong/','/opt/ora10g/oradata/aux')
               db_name = 目标实例
               instance_name service_names 取一新名,如 AUX
                                        注释掉 log_archive_start 参数
                                如果在 Windows NT 上运行 Oracle,需要使用 oradim 来添加数据库服务
                                启动辅助实例,如有必要,配置 tnsnames.ora,测试是否连通。
3.执行实际的 TSPITR
      例子: 恢复用户误删除的某个重要的表。将实例 rgsong 的 USERS 表空间恢复到 SCN 是 3818161 的时候。 启动辅助实例:
         [oracle@localhost ~]$ export ORACLE_SID=aux
         [oracle@localhost ~]$ sqlplus / as sysdba
         SQL> STARTUP NOMOUNT;
    
         [oracle@localhost ~]$ RMAN TARGET / AUXILIARY sys/rgsong@aux
          RMAN> RECOVER TABLESPACE USERS UNTIL SCN 233646;
            ...
          等待完成表空间的恢复。当然也可以用 UNTIL TIME 或者 UNTIL SEQUENCE 子
      句,例:
         RMAN> run {
                        allocate auxiliary channel c1 device type disk;
                        recover tablespace user02 until logseq 9;
                                }
        
                       run{
                      allocate auxiliary channel c1 type disk;
                      recover tablespace 'TEST' until time
                      "to_date('08/15/2008 18:51:41','mm/dd/yyyy hh24:mi:ss')"     
                       AUXILIARY DESTINATION '/opt/ora10g/oradata/aux/';
                       release channel c1;
                       }

    
                      可以改变辅助集/恢复集数据文件的位置和名称:
        set newname for datafile 5 to 'c:\demo\user01.dbf';
        configure auxname for datafile 1 to '/backup/xxx.dbf’;
         在初始化参数文件中用 DB_FILE_NAME_CONVERT 进行转换
        10g 中增加了 auxiliary destination ,更方便
    
4.执行 TSPITR 后的操作
    首先应该重新连接 RMAN 与目标数据库,并且备份刚恢复的表空间。完成备份后,
需要将表空间联机(RMAN 在 TSPITR 后使表空间脱机)。最后,我们还要关闭或删除辅
助数据库。

  检查TSPITR之后丢失的对象,被丢失对象信息的获取:
       SQL> Select owner, name
              From TS_PITR_OBJECTS_TO_BE_DROPPED
              Where tablespace_name = 'USER01' And creation_time >
                    to_date( '2004-09-27 11:25:21', 'yyyy-mm-dd hh24:mi:ss' );
 
阅读(523) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~