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

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
    - 01113 file  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
    - 01113 file  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




 

 

 

 

你可能感兴趣的:(Oracle 物理备份的种类以及完全恢复)