热备份

来源:互联网 发布:centos 6.5网卡安装 编辑:程序博客网 时间:2024/06/09 16:08
Oracle 热备份是指数据库处于open状态下,对数据库的数据文件、控制文件、参数文件、密码文件等进行一系列备份操作。

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

 

一、热备的过程

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

   进行物理拷贝

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

 

二、基于数据库的热备

   alter databasebegin backup;

   拷贝所有的datafile到备份目录

   alter databaseend backup;

 

三、基于表空间的热备

   alter tablespace tablespace_name begin backup;

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

   alter tablespace tablespace_name end backup;

 

   alter tablespace tablespace_name begin backup时完成的任务

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

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

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

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

 

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

 

四、控制文件的热备

   alter databasebackup controlfile to'<dir>' [reuse];         --控制文件的完整备份

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

   控制文件发生变化情况

       alter database [add |drop] logfile

       alter database [add |drop] logfile member

       alter database [add |drop] logfilegroup

       alter database [archivelog |noarchivelog]

       alter database renamefile

       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_namefrom dba_temp_files;

 

       TABLESPACE_NAME

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

       TEMP

   

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

       SQL> selectname from v$tempfile;

 

       NAME

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

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

   

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

       SQL> alter tablespace tempbegin backup;

       alter tablespace temp begin backup

       *

       ERROR at line 1:

       ORA-03217: invalidoption for alter of TEMPORARY TABLESPACE

 

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

       SQL> alter temporary tablespace tempbegin backup;

       alter temporary tablespace temp begin backup

             *

       ERROR at line 1:

       ORA-00940: invalidALTER 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 databasebegin backup;

           start &script

           alter databaseend backup;

           alter databasebackup 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_filesorder by tablespace_name;

           spool off

           start &script

           alter databasebackup 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 usersbegin 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 usersbegin 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: datafile 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> alterdatabase datafile 4 endbackup;  --此处也可以使用recover datafile 4来完成恢复

 

       Database altered.

 

       SQL> alterdatabase open;

 

       Database altered.

 

       SQL> select* from dual;

 

       D

       -

       X

原创粉丝点击