Oracle 热备份

-- 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 归档日志
 

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/robinson_0612/archive/2010/08/16/5816012.aspx

你可能感兴趣的:(oracle)