zoukankan      html  css  js  c++  java
  • Making User-Managed Backups-17.4、Making User-Managed Backups of Online Tablespaces and Datafiles

    17.4、Making User-Managed Backups of Online Tablespaces and Datafiles
    当数据库打开时,能够备份一个在线表空间全部和一个指定的数据文件。备份过程的差别依赖于在线表空间是read、write或者read-only。
    注意:不应该备份暂时表空间

    17.4.1、Making User-Managed Backups of Online Read/Write Tablespaces
    当表空间是在线状态时,必须把一个read/write表空间置为备份模式,才干备份数据文件。在备份模式,数据把改变的数据块复制到redo stream。

    在运行alter tablespace ... end
    backup或alter database end backup后,数据库把数据文件头提高到当前数据库检查点。当还原以上方式备份的数据文件,假设须要恢复。数据库会索要适当的重做日志集来应用
    重做日志。

    在打开的数据库中。备份在线的read/write表空间:
    (1)在备份之前,使用DBA_DATA_FILES识别在表空间中的数据文件
    (2)标记在线表空间备份的開始
    注意:拷贝在线表空间前,假设没有begin backup做标记。或没有等到begin backup的语句运行完。那么随后的恢复操作,拷贝的数据文件是不能用的。尝试恢复这种备份文件
    是危急的,它会返回"fuzzy files"警告,导致一个不一致的、不能打开的数据库
    (3)使用操作系统命令备份在线表空间的在线数据文件
    (4)标记在线表空间备份的结束
    (5)归档未归档的重做日志
    SQL> alter system archive log current;
    注意:假设标记在线表空间备份的结束失败。oracle把表空间相应的改变写入到在线重做日志。引起性能问题。关闭数据库时,会接受一个ORA-01149的错误

    模拟1、表空间testtbs01在线,然后备份在线的数据文件
    (1)
    SQL> col file_name for a40
    SQL> select tablespace_name,file_name from dba_data_files where tablespace_name='TESTTBS01';

    TABLESPACE_NAME                FILE_NAME
    ------------------------------ ----------------------------------------
    TESTTBS01                      /oracle/oradata/boss/testtbs01_01.dbf
    TESTTBS01                      /oracle/oradata/boss/testtbs01_02.dbf

    (2)
    SQL> alter tablespace testtbs01 begin backup;

    (3)
    ##新启动一个会话
    SQL> create table test01 (id number, name varchar2(30)) tablespace testtbs01;
    SQL> insert into test01 values(1,'aaa');
    SQL> insert into test01 values(2,'bbb');
    SQL> commit;

    ##原始会话
    SQL> select * from test01;

            ID NAME
    ---------- ------------------------------
             1 aaa
             2 bbb

    $ cp -rf /oracle/oradata/boss/testtbs01_01.dbf /oradata/bossbak/20140605/testtbs01_01_`date "+%y_%m_%d"`.dbf
    $ cp -rf /oracle/oradata/boss/testtbs01_02.dbf /oradata/bossbak/20140605/testtbs01_02_`date "+%y_%m_%d"`.dbf

    (4)
    SQL> alter tablespace testtbs01 end backup;

    (5)
    SQL> alter system archive log current;

    17.4.2、Ending a Backup After an Instance Failure or SHUTDOWN ABORT--实例失败时,没有end backup
    下面情况引起表空间备份失败和不一致:
    (1)备份完毕。没有运行end backup
    (2)实例失败或shutdown abort,没有运行end backup
    数据文件在备份模式,数据库尝试打开它,数据库直到运行一个恢复命令或把数据文件end backup,数据库才干打开。

    HA环境。当没有dba监视数据库的情况下,须要人工干预。

    能够写一个崩溃恢复的脚本:
    (1)mount数据库
    (2)运行alter database end backup
    (3)alter database open

    17.4.2.1、Ending Backup Mode with the SQL*Plus RECOVER Command
    recover命令的方法比end backup的方法慢,由于数据库必须浏览在线备份開始后产生的重做日志。

    模拟1、表空间testtbs01没有end backup,此时shutdown abort,使用recover。

    总结:没有end backup,实例失败或shutdown abort。须要恢复
    (1)
    SQL> col file_name for a40
    SQL> select tablespace_name,file_name from dba_data_files where tablespace_name='TESTTBS01';

    TABLESPACE_NAME                FILE_NAME
    ------------------------------ ----------------------------------------
    TESTTBS01                      /oracle/oradata/boss/testtbs01_01.dbf
    TESTTBS01                      /oracle/oradata/boss/testtbs01_02.dbf

    (2)
    SQL> alter tablespace testtbs01 begin backup;

    (3)
    ##新启动一个会话
    SQL> insert into test01 values(3,'ccc');
    SQL> insert into test01 values(4,'ddd');
    SQL> commit;
    $ cp -rf /oracle/oradata/boss/testtbs01_01.dbf /oradata/bossbak/20140605/testtbs01_01_`date "+%y_%m_%d"`.dbf
    $ cp -rf /oracle/oradata/boss/testtbs01_02.dbf /oradata/bossbak/20140605/testtbs01_02_`date "+%y_%m_%d"`.dbf

    (4)
    SQL> shutdown immediate;  
    ORA-01149: cannot shutdown - file 6 has online backup set
    ORA-01110: data file 6: '/oracle/oradata/boss/testtbs01_01.dbf'

    SQL> shutdown abort
    ORACLE instance shut down.

    SQL> startup open;
    ORA-01113: file 6 needs media recovery
    ORA-01110: data file 6: '/oracle/oradata/boss/testtbs01_01.dbf'

    SQL> recover datafile 6;  ##把红色部分改为:recover database

    SQL> alter database open;
    alter database open
    *
    ERROR at line 1:
    ORA-01113: file 7 needs media recovery
    ORA-01110: data file 7: '/oracle/oradata/boss/testtbs01_02.dbf'

    SQL> recover datafile 7;
    SQL> alter database open;
    SQL> select status from v$instance;

    STATUS
    ------------
    OPEN

    17.4.2.2、Ending Backup Mode with the ALTER DATABASE END BACKUP Statement
    当有多个表空间处在备份模式,mount阶段执行alter database end backup。

    模拟1、表空间testtbs01没有end backup,此时shutdown abort,使用end backup
    (1)
    SQL> col file_name for a40
    SQL> select tablespace_name,file_name from dba_data_files where tablespace_name='TESTTBS01';

    TABLESPACE_NAME                FILE_NAME
    ------------------------------ ----------------------------------------
    TESTTBS01                      /oracle/oradata/boss/testtbs01_01.dbf
    TESTTBS01                      /oracle/oradata/boss/testtbs01_02.dbf

    SQL> select dbid,name,log_mode,checkpoint_change# from v$database;

          DBID NAME                                     LOG_MODE     CHECKPOINT_CHANGE#
    ---------- ---------------------------------------- ------------ ------------------
    1375601832 BOSS                                     ARCHIVELOG               625063

    SQL> select file#,name,status,CHECKPOINT_CHANGE#,recover from v$datafile_header;

         FILE# NAME                                     STATUS  CHECKPOINT_CHANGE# REC
    ---------- ---------------------------------------- ------- ------------------ ---
             1 /oracle/oradata/boss/system01.dbf        ONLINE              625063 NO
             2 /oracle/oradata/boss/undotbs01.dbf       ONLINE              625063 NO
             3 /oracle/oradata/boss/sysaux01.dbf        ONLINE              625063 NO
             4 /oracle/oradata/boss/users01.dbf         ONLINE              625063 NO
             5 /oracle/oradata/boss/example01.dbf       ONLINE              625063 NO
             6 /oracle/oradata/boss/testtbs01_01.dbf    ONLINE              625063 NO
             7 /oracle/oradata/boss/testtbs01_02.dbf    ONLINE              625063 NO
    (2)
    SQL> alter tablespace testtbs01 begin backup;  ##运行后,立马会使相应的数据文件头的scn提升
    SQL> select dbid,name,log_mode,checkpoint_change# from v$database;

          DBID NAME                                     LOG_MODE     CHECKPOINT_CHANGE#
    ---------- ---------------------------------------- ------------ ------------------
    1375601832 BOSS                                     ARCHIVELOG               625063
    SQL> select file#,name,status,CHECKPOINT_CHANGE#,recover from v$datafile_header;

         FILE# NAME                                     STATUS  CHECKPOINT_CHANGE# REC
    ---------- ---------------------------------------- ------- ------------------ ---
             1 /oracle/oradata/boss/system01.dbf        ONLINE              625063 NO
             2 /oracle/oradata/boss/undotbs01.dbf       ONLINE              625063 NO
             3 /oracle/oradata/boss/sysaux01.dbf        ONLINE              625063 NO
             4 /oracle/oradata/boss/users01.dbf         ONLINE              625063 NO
             5 /oracle/oradata/boss/example01.dbf       ONLINE              625063 NO
             6 /oracle/oradata/boss/testtbs01_01.dbf    ONLINE              625806 NO
             7 /oracle/oradata/boss/testtbs01_02.dbf    ONLINE              625806 NO

    (3)
    ##新启动一个会话
    SQL> insert into test01 values(5,'eee');
    insert into test01 values(6,'fff');
    SQL> commit;
    $ cp -rf /oracle/oradata/boss/testtbs01_01.dbf /oradata/bossbak/20140605/testtbs01_01_`date "+%y_%m_%d"`.dbf
    $ cp -rf /oracle/oradata/boss/testtbs01_02.dbf /oradata/bossbak/20140605/testtbs01_02_`date "+%y_%m_%d"`.dbf

    (4)
    SQL> shutdown abort
    ORACLE instance shut down.

    SQL> startup open;
    ORA-01113: file 6 needs media recovery
    ORA-01110: data file 6: '/oracle/oradata/boss/testtbs01_01.dbf'

    SQL> select dbid,name,log_mode,checkpoint_change# from v$database;   ##scn没有改变

          DBID NAME                                     LOG_MODE     CHECKPOINT_CHANGE#
    ---------- ---------------------------------------- ------------ ------------------
    1375601832 BOSS                                     ARCHIVELOG               625063

    SQL> select file#,name,status,CHECKPOINT_CHANGE#,recover from v$datafile_header;

         FILE# NAME                                     STATUS  CHECKPOINT_CHANGE# REC
    ---------- ---------------------------------------- ------- ------------------ ---
             1 /oracle/oradata/boss/system01.dbf        ONLINE              625063 NO
             2 /oracle/oradata/boss/undotbs01.dbf       ONLINE              625063 NO
             3 /oracle/oradata/boss/sysaux01.dbf        ONLINE              625063 NO
             4 /oracle/oradata/boss/users01.dbf         ONLINE              625063 NO
             5 /oracle/oradata/boss/example01.dbf       ONLINE              625063 NO
             6 /oracle/oradata/boss/testtbs01_01.dbf    ONLINE              625806 NO
             7 /oracle/oradata/boss/testtbs01_02.dbf    ONLINE              625806 NO

    SQL> col "文件号" for a40;
    SQL>
    select
      ts.name "表空间名"
      , df.file# "文件号"
      , df.checkpoint_change# "检查点"
      , df.name "文件名称"
      , df.status "在线状态"
      , rf.error "恢复原因"
      , rf.change# "系统变更号"
      , rf.time
      from v$tablespace ts,v$datafile df,v$recover_file rf
    where ts.ts#=df.ts# and df.file#=rf.file#
    order by df.file#;

    表空间名                           文件号     检查点
    ------------------------------ ---------- ----------
    文件名称
    ------------------------------------------------------------------------------------------------------------------------------------------------------
    在线状  恢复原因           系统变更号 TIME
    ------- ------------------ ---------- ------------
    TESTTBS01                      ##########     625806
    /oracle/oradata/boss/testtbs01_01.dbf
    ONLINE                         625806 05-JUN-14

    TESTTBS01                      ##########     625806
    /oracle/oradata/boss/testtbs01_02.dbf
    ONLINE                         625806 05-JUN-14

    表空间名                           文件号     检查点
    ------------------------------ ---------- ----------
    文件名称
    ------------------------------------------------------------------------------------------------------------------------------------------------------
    在线状  恢复原因           系统变更号 TIME
    ------- ------------------ ---------- ------------

    SQL> alter database end backup;

    SQL> alter database open;

    SQL> select dbid,name,log_mode,checkpoint_change# from v$database;

          DBID NAME                                     LOG_MODE     CHECKPOINT_CHANGE#
    ---------- ---------------------------------------- ------------ ------------------
    1375601832 BOSS                                     ARCHIVELOG               646384

    SQL> select file#,name,status,CHECKPOINT_CHANGE#,recover from v$datafile_header;

         FILE# NAME                                     STATUS  CHECKPOINT_CHANGE# REC
    ---------- ---------------------------------------- ------- ------------------ ---
             1 /oracle/oradata/boss/system01.dbf        ONLINE              646384 NO
             2 /oracle/oradata/boss/undotbs01.dbf       ONLINE              646384 NO
             3 /oracle/oradata/boss/sysaux01.dbf        ONLINE              646384 NO
             4 /oracle/oradata/boss/users01.dbf         ONLINE              646384 NO
             5 /oracle/oradata/boss/example01.dbf       ONLINE              646384 NO
             6 /oracle/oradata/boss/testtbs01_01.dbf    ONLINE              646384 NO
             7 /oracle/oradata/boss/testtbs01_02.dbf    ONLINE              646384 NO

    17.4.2.3、Making User-Managed Backups of Read-Only Tablespaces
    当备份一个在线read-only表空间,备份在线数据文件很easy。不必把表空间置为备份模式。由于数据库不同意把变更写入这些数据文件。

    假设read-only表空间是独立的,那么使用操作系统命令拷贝数据文件。也能够使用传输表空间导出表空间的元数据。

    介质失败或用户错误时,把表空间传输到数据库。
    Administrator's Guide提供了怎么传输表空间的信息。Reference提供了dba_data_files和dba_tablespaces的很多其它信息

    一个打开的数据库中,备份在线read-only表空间
    (1)查询dba_tablespaces,查看哪些表空间是read-only
    (2)备份表空间前,查询dba_data_files识别表空间的数据文件
    (3)使用操作系统命令备份read-only表空间的在线数据文件
    注意:还原read-only表空间的数据文件时。把表空间离线,还原数据文件,然后把表空间置为在线。

  • 相关阅读:
    Spring学习之旅(二)--容器
    Spring学习之旅(一)--初始Spring
    Logback的使用
    DES加解密工具类
    Lombok插件的使用
    from 表单用 GET 方法进行 URL 传值时后台无法获取问题
    组播
    linux头文件路径
    IANA
    6号板获取或放文件
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/6920141.html
Copyright © 2011-2022 走看看