Oracle 物理备份的种类以及完全恢复

完全脱机备份(冷备份)(noarchivelog | archivelog)
  • 优点:安全
  • 缺点: OS Copy(生产环境,数据文件较大)
  • 缺点:需要shutdown(生产环境,风险较大)

部分脱机备份(表空间tablespace offline,相当于局部的shutdown)

  • 缺点:OS Copy - 整个数据文件的拷贝,没有解析出有效数据
  • 有些表空间无法offline - system, undo
    SQL> alter tablespace system offline;
    alter tablespace system offline
    *
    ERROR at line 
    1:
    ORA
    -01541: system tablespace cannot be brought offline; shut down if necessary


    SQL
    > alter tablespace UNDOTBS1 offline;
    alter tablespace UNDOTBS1 offline
    *
    ERROR at line 
    1:
    ORA
    -30042: Cannot offline the undo tablespace
  • offilne + copy + online
    SQL> alter tablespace SYSAUX offline;

    Tablespace altered.

    SQL
    > alter tablespace SYSAUX online;

    Tablespace altered.
  • 案例:损坏sample数据文件
    -- 插入系列数据到指定tablespace,之后offile指定tablespace
    SQL> alter tablespace "sample" offline;

    Tablespace altered.

    -- ========== 删除 指定tablespace==========

    -- online指定tablespace,会报错:无法锁定
    SQL> alter tablespace "sample" online;
    alter tablespace "sample" online
    *
    ERROR at line 
    1:
    ORA
    -01157: cannot identify/lock data file 5 - see DBWR trace file
    ORA
    -01110: data file 5'E:\ORACLE\WPENG\WPENG\SAMPLE.DBF'

    -- 此时数据库显示open状态,没有shutdown
    SQL> select status from v$instance;
    STATUS
    ------------
    OPEN

    -- ======== copy恢复之前的备份tablespace =======

    -- 再次online 指定tablespace,报错:需要介质恢复(数据文件和控制文件的scn不相符)
    SQL> alter tablespace "sample" online;
    alter tablespace "sample" online
    *
    ERROR at line 
    1:
    ORA
    -01113file 5 needs media recovery
    ORA
    -01110: data file 5'E:\ORACLE\WPENG\WPENG\SAMPLE.DBF'

    -- 控制文件 和 数据文件头的  SCN 不符
    SQL> select file#, checkpoint_change# from v$datafile where file= 5;
         
    FILE# CHECKPOINT_CHANGE#
    ---------- ------------------
             5            2798236

    SQL
    > select file#, checkpoint_change# from v$datafile_header where file= 5;
         
    FILE# CHECKPOINT_CHANGE#
    ---------- ------------------
             5                  0

    -- 进行recover 恢复 datafile 5
    SQL> recover datafile 5;
    ORA
    -00279: change 2798091 generated at 09/29/2012 09:13:56 needed for thread 1
    ORA
    -00289: suggestion : E:\APP\WPENG\PRODUCT\11.1.0\FLASH_RECOVER_AREA\WPENG\ARCHIVELOG\2012_09_29\O1_MF_1_127_86DLZ4TD_
    .ARC
    ORA
    -00280: change 2798091 for thread 1 is in sequence #127


    Specify 
    log: {<RET>=suggested | filename | AUTO | CANCEL}
    auto
    Log applied.
    Media recovery complete.

    -- 第三次online datafile 5,成功
    SQL> alter tablespace "sample" online;
    Tablespace altered.

    -- 查看控制文件和数据文件头的SCN
    SQL> select file#, checkpoint_change# from v$datafile where file= 5;
         
    FILE# CHECKPOINT_CHANGE#
    ---------- ------------------
             5            2798388

    SQL
    > select file#, checkpoint_change# from v$datafile_header where file= 5;
         
    FILE# CHECKPOINT_CHANGE#
    ---------- ------------------
             5            2798388
  • 哪个数据文件坏了,可以offline哪个
    SQL> alter database datafile 5 offline;

    Database altered.

    SQL
    > alter database datafile 5 online;
    alter database datafile 5 online
    *
    ERROR at line 
    1:
    ORA
    -01113file 5 needs media recovery
    ORA
    -01110: data file 5'E:\ORACLE\WPENG\WPENG\SAMPLE.DBF'


    SQL
    > recover datafile 5;
    Media recovery complete.
    SQL
    > alter database datafile 5 online;

    Database altered.
  • 非归档模式,表空间是不可以offline的

部分联机备份(热备份)

  • 不需要shutdown + 不需要offline
  • 记录数据恢复的起点SCN,就是数据文件头的checkpoint_change#
    SQL> alter tablespace USERS begin backup;

    表空间已更改。

    -- 记录数据库恢复的起点
    SQL> select file#, checkpoint_change# from v$datafile_header;

         
    FILE# CHECKPOINT_CHANGE#
    ---------- ------------------
             1            1177691
             
    2            1164232
             
    3            1164232
             
    4            1177920

    SQL
    > select * from v$backup;

         
    FILE# STATUS                CHANGE# TIME
    ---------- ------------------ ---------- --------------
             1 NOT ACTIVE            1177691 12-10月-12
             
    2 NOT ACTIVE                  0
             
    3 NOT ACTIVE                  0
             
    4 ACTIVE                1177920 12-10月-12

    --========COPY需要备份的数据文件==========

    SQL
    > alter tablespace USERS end backup;

    表空间已更改。

    --==========RECOVER的时候,会从记录的BEGIN处开始恢复
    SQL> recover datafile 4
    ORA
    -00279: 更改 1177920 (在 10/12/2012 14:00:48 生成) 对于线程 1 是必需的
    ORA
    -00289: 建议:
    C:\APP\WPENG\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2012_10_
    12\O1_MF_1_29_87HDP56C_

    .ARC
    ORA
    -00280: 更改 1177920 (用于线程 1) 在序列 #29 中


    指定日志: {
    <RET>=suggested | filename | AUTO | CANCEL}

  • 缺点:仅仅只是记录数据头的checkpoint_change#,但是数据文件其他部分会发生变化
  • 操作系统的块大小:512 bytes;数据库系统的块大小:8K(16个操作系统块)。我们备份copy的时候(512 bytes),数据库系统可能会修改数据块(8K)。 备份出去的文件是正确的;但是对于数据库逻辑上,可能是不一致的,导致不可用的情况发生。
  • Oracle规定:凡事数据文件处于热备份模式下,有进程操作这个数据文件上的数据块 - Oracle会首先对这个数据块进行备份,以日志的形式进行备份。 
  •  处于热备份的情况,参照上述,那么数据块将会产生多余平常情况下的日志文件 - 而且是多了多!!!
  • SQL> select distinct sid from  v$mystat;

           SID
    ----------
            47

    SQL
    > select STATISTIC#, NAME from v$statname where name = 'redo size';

    STATISTIC# NAME
    ---------- ------------------------------------------------------------
           169 redo size

    SQL
    > select * from v$mystat where sid=47 and statistic#=169;

           SID STATISTIC#      VALUE
    ---------- ---------- ----------
            47        169          0

    SQL
    > select *from t;

            ID        SCN
    ---------- ----------
            11    1178189
            
    12    1178215
            
    13    1178223
            
    14    1178238
            
    15    1178252

    SQL
    > select * from v$mystat where sid=47 and statistic#=169;

           SID STATISTIC#      VALUE
    ---------- ---------- ----------
            47        169        116

    SQL
    > insert into t values(1,1);

    已创建 
    1 行。

    SQL
    > select * from v$mystat where sid=47 and statistic#=169;

           SID STATISTIC#      VALUE
    ---------- ---------- ----------
            47        169        116

    SQL
    > commit;

    提交完成。

    SQL
    > select * from v$mystat where sid=47 and statistic#=169;

           SID STATISTIC#      VALUE
    ---------- ---------- ----------
            47        169        612

    SQL
    > alter tablespace USERS begin backup;

    表空间已更改。

    SQL
    > select * from v$mystat where sid=47 and statistic#=169;

           SID STATISTIC#      VALUE
    ---------- ---------- ----------
            47        169       1328

    SQL
    > insert into t values(1,1);

    已创建 
    1 行。

    SQL
    > commit;

    提交完成。

    SQL
    > select * from v$mystat where sid=47 and statistic#=169;

           SID STATISTIC#      VALUE
    ---------- ---------- ----------
            47        169      10168

    SQL
    > select 10168-1328 from dual;

    10168-1328
    ----------
          8840

    SQL
    > select 612-116 from dual;

       
    612-116
    ----------
           496

    SQL
    > alter tablespace USERS end backup;

    表空间已更改。
    由此可以看到,同样的SQL语句,执行相同的操作,在热备份模式下数据库的日志文件会增加8840 bytes;而在正常模式下,数据的日志文件仅仅增加496 bytes




 

 

 

 

posted on 2012-10-11 14:44 盐城小土包 阅读(299) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 
<2012年10月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

导航

统计

常用链接

留言簿

随笔档案(14)

文章分类(18)

文章档案(18)

搜索

最新评论

阅读排行榜

评论排行榜