• Oracle TSPITR


    TSPITR介绍
       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列所在的表空间
    检查自包含方式:
        SQL> connect sys/oracle@demo as sysdba
        SQL> execute dbms_tts.transport_set_check('user01',true);
        SQL> Select * From transport_set_violations;



    测试

    环境 10.2.0.1 + WinXp

    --创建表空间
    CREATE TABLESPACE "DATACNT_TEST"
      LOGGING
      DATAFILE 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DATACNT_TEST.ora' SIZE 50M
      EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;
     

     
    -- create table

    create table ttest (i_id integer, c_name varchar2(10)) tablespace datacnt_test;
    create index itest on ttest(i_id) tablespace DATACNT_TEST;

    insert into ttest(i_id,c_name) values (1, '1');
    insert into ttest(i_id,c_name) values (2, '2');
    insert into ttest(i_id,c_name) values (3, '3');
    insert into ttest(i_id,c_name) values (4, '4');
    insert into ttest(i_id,c_name) values (5, '5');
    insert into ttest(i_id,c_name) values (6, '6');
    insert into ttest(i_id,c_name) values (7, '7');
    insert into ttest(i_id,c_name) values (8, '8');
    insert into ttest(i_id,c_name) values (8, '9');
    insert into ttest(i_id,c_name) values (10, '10');
    insert into ttest(i_id,c_name) values (11, '11');


    select * from ttest;

    --check
    SELECT *
      FROM SYS.TS_PITR_CHECK
    WHERE (
            TS1_NAME IN ('DATACNT_TEST')
            AND TS2_NAME NOT IN ('DATACNT_TEST')  
           )
        OR (     
            TS1_NAME NOT IN ('DATACNT_TEST') 
            AND TS2_NAME IN ('DATACNT_TEST')    
           );
          
    --记住时间点

    select sysdate from dual;

    --执行rman备份
    run{
      allocate channel d1 type disk;
      backup tag ts_test
      format 'C:\temp\TS_t%t_s%s.bkp'
      tablespace DATACNT_TEST,UNDOTBS1,SYSTEM;
      backup current controlfile;
      release channel d1;
    }

    --模拟操作 修改ttest的表

    delete from ttest where c_name like '%1%';
    commit;


    RMAN> run {
    2>   recover tablespace DATACNT_TEST until time "to_date('2010-3-18 13:31:48','yyyy-mm-dd hh24:mi:ss')" auxiliary destination 'C:\auxiliary';
    3> }

    启动 recover 于 18-3月 -10
    分配的通道: ORA_DISK_1
    通道 ORA_DISK_1: sid=148 devtype=DISK
    RMAN-05026: 警告: 假定以下表空间集适用于指定的时间点

    表空间列表要求具有 UNDO 段
    表空间 SYSTEM
    表空间 UNDOTBS1

    使用 SID='yaxj' 创建自动实例

    供自动实例使用的初始化参数:
    db_name=ORCL
    compatible=10.2.0.1.0
    db_block_size=8192
    db_files=200
    db_unique_name=tspitr_ORCL_yaxj
    large_pool_size=1M
    shared_pool_size=110M
    #No auxiliary parameter file used
    db_create_file_dest=C:\auxiliary
    control_files=C:\auxiliary/cntrl_tspitr_ORCL_yaxj.f


    启动自动实例 ORCL

    Oracle 实例已启动

    系统全局区域总计     201326592 字节

    Fixed Size                     1248092 字节
    Variable Size                146801828 字节
    Database Buffers              50331648 字节
    Redo Buffers                   2945024 字节
    自动实例已创建

    内存脚本的内容:
    {
    # set the until clause
    set until  time "to_date('2010-3-18 13:31:48','yyyy-mm-dd hh24:mi:ss')";
    # restore the controlfile
    restore clone controlfile;
    # mount the controlfile
    sql clone 'alter database mount clone database';
    # archive current online log for tspitr to a resent until time
    sql 'alter system archive log current';
    # avoid unnecessary autobackups for structural changes during TSPITR
    sql 'begin dbms_backup_restore.AutoBackupFlag(FALSE); end;';
    }
    正在执行内存脚本

    正在执行命令: SET until clause

    启动 restore 于 18-3月 -10
    分配的通道: ORA_AUX_DISK_1
    通道 ORA_AUX_DISK_1: sid=37 devtype=DISK

    通道 ORA_AUX_DISK_1: 正在开始恢复数据文件备份集
    通道 ORA_AUX_DISK_1: 正在复原控制文件
    通道 ORA_AUX_DISK_1: 正在读取备份段 C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA
    \ORCL\AUTOBACKUP\2010_03_18\O1_MF_S_713971810_5T3GM4G6_.BKP
    通道 ORA_AUX_DISK_1: 已恢复备份段 1
    段句柄 = C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\AUTOBACKUP\2010_03_18
    \O1_MF_S_713971810_5T3GM4G6_.BKP 标记 = TAG20100318T133010
    通道 ORA_AUX_DISK_1: 恢复完成, 用时: 00:00:03
    输出文件名=C:\AUXILIARY\CNTRL_TSPITR_ORCL_YAXJ.F
    完成 restore 于 18-3月 -10

    sql 语句: alter database mount clone database

    sql 语句: alter system archive log current

    sql 语句: begin dbms_backup_restore.AutoBackupFlag(FALSE); end;
    释放的通道: ORA_DISK_1
    释放的通道: ORA_AUX_DISK_1

    内存脚本的内容:
    {
    # generated tablespace point-in-time recovery script
    # set the until clause
    set until  time "to_date('2010-3-18 13:31:48','yyyy-mm-dd hh24:mi:ss')";
    plsql <<<-- tspitr_2
    declare
      sqlstatement       varchar2(512);
      offline_not_needed exception;
      pragma exception_init(offline_not_needed, -01539);
    begin
      sqlstatement := 'alter tablespace '||  'DATACNT_TEST' ||' offline for recover'
    ;
      krmicd.writeMsg(6162, sqlstatement);
      krmicd.execSql(sqlstatement);
    exception
      when offline_not_needed then
        null;
    end; >>>;
    # set an omf destination filename for restore
    set newname for clone datafile  1 to new;
    # set an omf destination filename for restore
    set newname for clone datafile  2 to new;
    # set an omf destination tempfile
    set newname for clone tempfile  1 to new;
    # set a destination filename for restore
    set newname for datafile  20 to
    "C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DATACNT_TEST.ORA";
    # rename all tempfiles
    switch clone tempfile all;
    # restore the tablespaces in the recovery set plus the auxilliary tablespaces
    restore clone datafile  1, 2, 20;
    switch clone datafile all;
    #online the datafiles restored or flipped
    sql clone "alter database datafile  1 online";
    #online the datafiles restored or flipped
    sql clone "alter database datafile  2 online";
    #online the datafiles restored or flipped
    sql clone "alter database datafile  20 online";
    # make the controlfile point at the restored datafiles, then recover them
    recover clone database tablespace  "DATACNT_TEST", "SYSTEM", "UNDOTBS1" delete a
    rchivelog;
    alter clone database open resetlogs;
    # PLUG HERE the creation of a temporary tablespace if export fails due to lack
    # of temporary space.
    # For example in Unix these two lines would do that:
    #sql clone "create tablespace aux_tspitr_tmp
    #           datafile ''/tmp/aux_tspitr_tmp.dbf'' size 500K";
    }
    正在执行内存脚本

    正在执行命令: SET until clause

    sql 语句: alter tablespace DATACNT_TEST offline for recover

    正在执行命令: SET NEWNAME

    正在执行命令: SET NEWNAME

    正在执行命令: SET NEWNAME

    正在执行命令: SET NEWNAME

    临时文件 1 在控制文件中已重命名为 C:\AUXILIARY\TSPITR_O\DATAFILE\O1_MF_TEMP_%U_.
    TMP

    启动 restore 于 18-3月 -10
    分配的通道: ORA_AUX_DISK_1
    通道 ORA_AUX_DISK_1: sid=39 devtype=DISK

    通道 ORA_AUX_DISK_1: 正在开始恢复数据文件备份集
    通道 ORA_AUX_DISK_1: 正在指定从备份集恢复的数据文件
    正将数据文件00001恢复到C:\AUXILIARY\TSPITR_O\DATAFILE\O1_MF_SYSTEM_%U_.DBF
    正将数据文件00002恢复到C:\AUXILIARY\TSPITR_O\DATAFILE\O1_MF_UNDOTBS1_%U_.DBF
    正将数据文件00020恢复到C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\DATACNT_TEST.ORA
    通道 ORA_AUX_DISK_1: 正在读取备份段 C:\TEMP\TS_T713971680_S14.BKP
    通道 ORA_AUX_DISK_1: 已恢复备份段 1
    段句柄 = C:\TEMP\TS_T713971680_S14.BKP 标记 = TS_LEVEL0
    通道 ORA_AUX_DISK_1: 恢复完成, 用时: 00:02:05
    完成 restore 于 18-3月 -10

    数据文件 1 已转换成数据文件副本
    输入数据文件副本 recid=5 stamp=713972344 文件名=C:\AUXILIARY\TSPITR_O\DATAFILE\O
    1_MF_SYSTEM_5T3GZTN2_.DBF
    数据文件 2 已转换成数据文件副本
    输入数据文件副本 recid=6 stamp=713972344 文件名=C:\AUXILIARY\TSPITR_O\DATAFILE\O
    1_MF_UNDOTBS1_5T3GZTSX_.DBF

    sql 语句: alter database datafile  1 online

    sql 语句: alter database datafile  2 online

    sql 语句: alter database datafile  20 online

    启动 recover 于 18-3月 -10
    使用通道 ORA_AUX_DISK_1

    正在开始介质的恢复

    存档日志线程 1 序列 51 已作为文件 C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\O
    RCL\ARCHIVELOG\2010_03_18\O1_MF_1_51_5T3GZN5F_.ARC 存在于磁盘上
    存档日志文件名 =C:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\201
    0_03_18\O1_MF_1_51_5T3GZN5F_.ARC 线程 =1 序列 =51
    介质恢复完成, 用时: 00:00:01
    完成 recover 于 18-3月 -10

    数据库已打开

    内存脚本的内容:
    {
    # export the tablespaces in the recovery set
    host 'exp userid =\"/@(DESCRIPTION=(ADDRESS=(PROTOCOL=beq)(PROGRAM=oracle)(ARGV0
    =oracleyaxj)(ARGS=^'(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))^')(ENVS=^'
    ORACLE_SID=yaxj^'))(CONNECT_DATA=(SID=yaxj))) as sysdba\" point_in_time_recover=
    y tablespaces=
    DATACNT_TEST file=
    tspitr_a.dmp';
    # shutdown clone before import
    shutdown clone immediate
    # import the tablespaces in the recovery set
    host 'imp userid =\"/@ as sysdba\" point_in_time_recover=y file=
    tspitr_a.dmp';
    # online/offline the tablespace imported
    sql "alter tablespace  DATACNT_TEST online";
    sql "alter tablespace  DATACNT_TEST offline";
    # enable autobackups in case user does open resetlogs from RMAN after TSPITR
    sql 'begin dbms_backup_restore.AutoBackupFlag(TRUE); end;';
    }
    正在执行内存脚本


    Export: Release 10.2.0.1.0 - Production on 星期四 3月 18 13:39:34 2010

    Copyright (c) 1982, 2005, Oracle.  All rights reserved.


    连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
    With the Partitioning, OLAP and Data Mining options
    已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
    注: 将不导出表数据 (行)

    即将导出表空间时间点恢复对象...
    对于表空间 DATACNT_TEST...
    . 正在导出簇定义
    . 正在导出表定义
    . . 正在导出表                           TTEST
    . 正在导出引用完整性约束条件
    . 正在导出触发器
    . 终止时间点恢复
    成功终止导出, 没有出现警告。
    主机命令完成

    数据库已关闭
    数据库已卸载
    Oracle 实例已关闭


    Import: Release 10.2.0.1.0 - Production on 星期四 3月 18 13:39:58 2010

    Copyright (c) 1982, 2005, Oracle.  All rights reserved.


    连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
    With the Partitioning, OLAP and Data Mining options

    经由常规路径由 EXPORT:V10.02.01 创建的导出文件
    即将导入表空间时间点恢复对象...
    已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
    . 正在将 SYS 的对象导入到 SYS
    . 正在将 CUSTOMER21 的对象导入到 CUSTOMER21
    . . 正在导入表                         "TTEST"
    . 正在将 SYS 的对象导入到 SYS
    成功终止导入, 没有出现警告。
    主机命令完成

    sql 语句: alter tablespace  DATACNT_TEST online

    sql 语句: alter tablespace  DATACNT_TEST offline

    sql 语句: begin dbms_backup_restore.AutoBackupFlag(TRUE); end;

    删除自动实例
    自动实例已删除
    已删除辅助实例文件 C:\AUXILIARY\CNTRL_TSPITR_ORCL_YAXJ.F
    已删除辅助实例文件 C:\AUXILIARY\TSPITR_O\DATAFILE\O1_MF_SYSTEM_5T3GZTN2_.DBF
    已删除辅助实例文件 C:\AUXILIARY\TSPITR_O\DATAFILE\O1_MF_UNDOTBS1_5T3GZTSX_.DBF
    已删除辅助实例文件 C:\AUXILIARY\TSPITR_O\DATAFILE\O1_MF_TEMP_5T3H49K4_.TMP
    已删除辅助实例文件 C:\AUXILIARY\TSPITR_O\ONLINELOG\O1_MF_1_5T3H3XNK_.LOG
    已删除辅助实例文件 C:\AUXILIARY\TSPITR_O\ONLINELOG\O1_MF_2_5T3H3ZYB_.LOG
    已删除辅助实例文件 C:\AUXILIARY\TSPITR_O\ONLINELOG\O1_MF_3_5T3H423H_.LOG
    完成 recover 于 18-3月 -10

    还原成功;

    坚持住你的坚持,成功就在拐弯处
  • 相关阅读:
    java通过LinkedList实现堆栈和队列数据结构
    华硕笔记本无法调节屏幕亮度
    Java8新特性
    GitLab使用记录
    Java IO流关闭问题之原理简析
    gradle build docker image
    mysql安装及使用
    前端div层级控制
    Could not get dialect instance.
    Starting a Gradle Daemon, 5 busy and 1 incompatible and 1 stopped Daemons could not be reused, use --status for details FAILURE: Build failed with an exception. * What went wrong: Could not dispatch
  • 原文地址:https://www.cnblogs.com/shawnloong/p/2813703.html
Copyright © 2020-2023  润新知