Oracle 热备份

系统 1567 0

--=======================

-- Oracle 热备份

--=======================

 

    Oracle 热备份是指数据库处于 open 状态下,对数据库的数据文件、控制文件、参数文件、密码文件等进行一系列备份操作。

热备是基于用户管理备份恢复的一种方式,也是除了 RMAN 备份之外较为常用的一种备份方式。

 

一、热备的过程

    冻结块头 --> 控制 SCN 在备份时不发生变化

    进行物理拷贝

    解冻块头 --> SCN 可以变化 ( 当对 SCN 解冻后,系统会自动更新 SCN 至最新的状态 )

 

二、基于数据库的热备

    alter database begin backup ;

    拷贝所有的 datafile 到备份目录

    alter database end backup ;

 

三、基于表空间的热备

    alter tablespace tablespace_name begin backup ;

    拷贝 tablespace_name 表空间的数据文件到备份目录

    alter tablespace tablespace_name end backup ;

 

    alter tablespace tablespace_name begin backup 时完成的任务

        检查点事件发生,检查点通知 DBWn 将该表空间上所有的脏数据被写入到磁盘

        在数据文件头部冻结当前检查点事件发生时的 SCN

        所有发生变化数据块的完整镜像 ( 修改前后 ) 被写入到 redo log

        允许该表空间内数据的正常读写

 

    建议使用基于表空间的热备,这样将尽可能的减少对系统性能的影响    

 

四、控制文件的热备

    alter database backup controlfile to '<dir>' ;           -- 控制文件的完整备份

    alter database backup controlfile to trace as '<dir>'   -- 用于创建控制文件的语句,丢失了部分信息

    控制文件发生变化情况

        alter database [add |drop] logfile

        alter database [add |drop] logfile member

        alter database [add |drop] logfile group

        alter database [archivelog |noarchivelog]

        alter database rename file

        create tablespace

        alter tablespace [add | rename] datafile

        alter tablespace [read write | read only]

        drop tablespace

    更多关于控制文件请参考: Oracle 控制文件

   

五、参数文件的热备

    create pfile from spfile ;

    create pfile = '<dir>' from spfile ;

    更多关于参数文件请参考: Oracle 参数文件

   

六、临时表空间的数据文件、日志文件不需要备份

    -- 查看临时表空间

        SQL > select tablespace_name from dba_temp_files ;

 

        TABLESPACE_NAME

        ------------------------------

        TEMP

   

    -- 查看临时表空间的数据文件

        SQL > select name from v$tempfile ;

 

        NAME

        ------------------------------------------------------

        / u01 / app / oracle / oradata / orcl / temp01 . dbf

   

    -- 将临时表空间置为备份模式,收到了错误的提示

        SQL > alter tablespace temp begin backup ;

        alter tablespace temp begin backup

        *

        ERROR at line 1 :

        ORA - 03217 : invalid option for alter of TEMPORARY TABLESPACE

 

    -- 将临时表空间置为备份模式,收到了错误的提示

        SQL > alter temporary tablespace temp begin backup ;

        alter temporary tablespace temp begin backup

              *

        ERROR at line 1 :

        ORA - 00940 : invalid ALTER command

 

七、热备脚本

    1. 基于数据库热备的脚本

        SQL > ho cat / tmp / tmphotbak . sql ;

            set feedback off

            set heading off

            set verify off

            set trimspool off

            set pagesize 0

            set linesize 200

            define dir = '/u01/app/oracle/hotbak'

            define script = '/tmp/hotbak.sql'

            spool & script

            select 'ho cp ' || name|| ' &dir'   from v$datafile ;

            spool off

            alter database begin backup ;

            start & script

            alter database end backup ;

            alter database backup controlfile to '&dir/controlbak.ctl' ;

            create pfile = '&dir/initorcl.ora' from spfile ;

        SQL > start / tmp / tmphotbak . sql ;   -- 执行该脚本即可对数据库进行热备

       

    2. 基于表空间热备的脚本

        SQL > ho cat / tmp / tmphotbak_tb . sql

            set feedback off

            set heading off

            set verify off

            set trimspool off

            set pagesize 0

            set linesize 200

            define dir = '/u01/app/oracle/hotbak'

            define script = '/tmp/hotbak_tb.sql'

            ho rm & script

            ho rm & dir /*  

            spool & script

            select 'alter tablespace ' || tablespace_name || ' begin backup ;' ||

              chr ( 10 )|| 'ho cp ' || file_name || ' &dir ' ||

              chr ( 10 )|| 'alter tablespace ' || tablespace_name || ' end backup;'

              from dba_data_files order by tablespace_name ;

            spool off

            start & script

            alter database backup controlfile to '&dir/controlbak.ctl' ;

            create pfile = '&dir/initorcl.ora' from spfile ;

        SQL > start / tmp / tmphotbak . sql ;   -- 执行该脚本即可对数据库基于表空间进行热备

       

八、备份的相关视图

    v$backup

   

    SQL > desc v$backup ;

      Name                                       Null ?     Type

      ----------------------------------------- -------- ---------------------

      FILE#                                               NUMBER

      STATUS                                              VARCHAR2 ( 18 )

      CHANGE#                                             NUMBER    -- 记录备份时的 SCN

      TIME                                                DATE

 

    SQL > select * from v$backup ;    -- 状态为 NOT ACTIVE , 此时没有任何数据处于备份状态

 

          FILE# STATUS                 CHANGE# TIME

    ---------- ------------------ ---------- ---------

              1 NOT ACTIVE             1006747 16 - AUG - 10

              2 NOT ACTIVE             1006793 16 - AUG - 10

              3 NOT ACTIVE             1006729 16 - AUG - 10

              4 NOT ACTIVE             1006807 16 - AUG - 10

              5 NOT ACTIVE             1006717 16 - AUG - 10

 

    SQL > alter tablespace users begin backup ;   -- 对表空间 users 进行热备

 

    Tablespace altered .

 

    SQL > select * from v$backup ;    -- 对应的 file# 为的处于 ACTIVE 状态

 

          FILE# STATUS                 CHANGE# TIME

    ---------- ------------------ ---------- ---------

              1 NOT ACTIVE             1006747 16 - AUG - 10

              2 NOT ACTIVE             1006793 16 - AUG - 10

              3 NOT ACTIVE             1006729 16 - AUG - 10

              4 ACTIVE                 1006852 16 - AUG - 10

              5 NOT ACTIVE             1006717 16 - AUG - 10

 

    -- 备份时发生断电或意外故障的恢复

    -- 假定 users 表空间目前置于 begin bakup 模式,系统断电      

        SQL > alter tablespace users begin backup ;

 

        Tablespace altered .

       

        -- 在另一个会话中强制关闭数据库  

        SQL > shutdown abort ;

        ORACLE instance shut down .

 

        -- 启动后收到错误提示

        SQL > startup

        ORACLE instance started .

 

        Total System Global Area   469762048 bytes

        Fixed Size                   1220048 bytes

        Variable Size               92275248 bytes

        Database Buffers           373293056 bytes

        Redo Buffers                 2973696 bytes

        Database mounted .

        ORA - 01113 : file 4 needs media recovery

        ORA - 01110 : data file 4 : '/u01/app/oracle/oradata/orcl/users01.dbf'

 

        -- 查看备份视图,文件此时处于活动状态

        SQL > select * from v$backup ;

 

              FILE# STATUS                 CHANGE# TIME

        ---------- ------------------ ---------- ---------

                  1 NOT ACTIVE             1006958 16 - AUG - 10

                  2 NOT ACTIVE             1006983 16 - AUG - 10

                  3 NOT ACTIVE             1006943 16 - AUG - 10

                  4 ACTIVE                 1007072 16 - AUG - 10

                  5 NOT ACTIVE             1006931 16 - AUG - 10

 

        -- 使用 end backup 来终止备份

        SQL > alter database datafile 4 end backup ;    -- 此处也可以使用 recover datafile 4 来完成恢复

 

        Database altered .

 

        SQL > alter database open ;

 

        Database altered .

 

        SQL > select * from dual ;

 

        D

        -

        X

 

    有关 Oracle 的冷备份,请参考: Oracle 冷备份

九、更多参考

 

Oracle 冷备份

 

SPFILE 错误导致数据库无法启动

 

Oracle 用户、对象权限、系统权限

 

Oracle 角色、配置文件

 

  Oracle 联机重做日志文件(ONLINE LOG FILE)

 

  Oracle 控制文件(CONTROLFILE)

 

  Oracle 表空间与数据文件

 

Oracle 归档日志

 

Oracle 热备份


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论