Oracle 热备份

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

-- Oracle 热备份

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


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

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


一、热备的过程

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

进行物理拷贝

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


二、基于数据库的热备

alterdatabasebeginbackup;

拷贝所有的datafile到备份目录

alterdatabaseendbackup;


三、基于表空间的热备

alter tablespace tablespace_name beginbackup;

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

alter tablespace tablespace_name endbackup;


alter tablespace tablespace_name beginbackup时完成的任务

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

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

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

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


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


四、控制文件的热备

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

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

控制文件发生变化情况

alterdatabase [add |drop] logfile

alterdatabase [add |drop] logfile member

alterdatabase [add |drop] logfile group

alterdatabase [archivelog |noarchivelog]

alterdatabase 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>selectnamefrom v$tempfile;


NAME

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

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


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

       SQL>alter tablespace temp beginbackup;

alter tablespace temp beginbackup

*

       ERROR at line 1:

       ORA-03217: invalid optionforalterof TEMPORARY TABLESPACE


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

       SQL>alter temporary tablespace temp beginbackup;

alter temporary tablespace temp beginbackup

*

       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

alterdatabasebeginbackup;

           start &script

alterdatabaseendbackup;

alterdatabasebackup 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 orderby tablespace_name;

           spool off

           start &script

alterdatabasebackup controlfile to'&dir/controlbak.ctl';

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

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


八、备份的相关视图

   v$backup


   SQL>desc v$backup;

NameNull?    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 beginbackup;--对表空间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 beginbackup;


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


Database altered.


       SQL>alterdatabaseopen;


Database altered.


       SQL>select*from dual;


       D

-

       X



你可能感兴趣的:(oracle,热备份)