Oracle冷备份与热备份

转载 2015年07月06日 17:23:31

转载自:http://blog.csdn.net/leshami/article/details/5791597,http://blog.csdn.net/leshami/article/details/5816012

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

-- Oracle 冷备份

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

 

一、冷备份

    数据库在关闭状态下完成所有物理系统文件拷贝的过程,也称脱机备份

    适合于非归档模式下,数据库处于一致性状态

   

二、步骤   

    首先在运行的库中得到数据库运行的所有的物理文件位置,然后在计划内关闭数据库(shutdown)

    再执行拷贝物理文家到备份路径或备份设备

    备份完成后立即启动数据库让其提供正常的服务 

 

三、冷备脚本的写法

    首先应该在相关视图里查出数据库的数据文件,日志文件,控制文件,临时文件所在的位置

    注意:不要直接把oradata下的cp就行了,因为生产库里各个文件通常分布在不同的磁盘,不同的地方,所以在去视图里获得真实路径 

 

    --查看实例和数据库的相关信息

    SQL> select instance_name,version,status,archiver,database_status from v$instance;

 

    INSTANCE_NAME    VERSION           STATUS       ARCHIVE DATABASE_STATUS

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

    orcl             10.2.0.1.0        OPEN         STOPPED ACTIVE

 

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

 

          DBID NAME      LOG_MODE

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

    1242732291 ORCL      NOARCHIVELOG

 

    --查看数据文件及状态信息

    SQL> select file_name,tablespace_name,status,online_status from dba_data_files;

 

    FILE_NAME                                               TABLESPACE STATUS    ONLINE_

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

    /u01/app/oracle/oradata/orcl/undotbs01.dbf              UNDOTBS1   AVAILABLE ONLINE

    /u01/app/oracle/oradata/orcl/system01.dbf               SYSTEM     AVAILABLE SYSTEM

    /u01/app/oracle/oradata/orcl/sysaux01.dbf               SYSAUX     AVAILABLE ONLINE

    /u01/app/oracle/oradata/orcl/users01.dbf                USERS      AVAILABLE ONLINE

    /u01/app/oracle/oradata/orcl/example01.dbf              EXAMPLE    AVAILABLE ONLINE

    /u01/app/oracle/oradata/orcl/tbs1_1.dbf                 TBS1       AVAILABLE ONLINE

    /u01/app/oracle/oradata/orcl/tbs1_2.dbf                 TBS1       AVAILABLE ONLINE

 

    --查看数据文件

    SQL> select name from v$datafile;

 

    NAME

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

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

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

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

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

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

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

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

 

    --查看临时文件

    SQL> select name from v$tempfile;

 

    NAME

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

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

 

    --查看日志文件

    SQL> select member from v$logfile;

 

    MEMBER

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

    /u01/app/oracle/oradata/orcl/redo2a.rdo

    /u01/app/oracle/oradata/orcl/redo2b.rdo

    /u01/app/oracle/oradata/orcl/redo1a.rdo

    /u01/app/oracle/oradata/orcl/redo3a.rdo

    /u01/app/oracle/oradata/orcl/redo3b.rdo

    /u01/app/oracle/oradata/orcl/redo1b.rdo

 

    --查看控制文件

    SQL> select name from v$controlfile;

 

    NAME

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

    /u01/app/oracle/oradata/orcl/control01.ctl

    /u01/app/oracle/oradata/orcl/control02.ctl

 

    --创建备份目录

    SQL> ho mkdir /u01/app/oracle/coolbak

   

    --使用连接符生成复制文件命令

    SQL> select 'ho cp ' || name || ' /u01/app/oracle/coolbak' from v$controlfile;

 

    'HOCP'||NAME||'/U01/APP/ORACLE/COOLBAK'

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

    ho cp /u01/app/oracle/oradata/orcl/control01.ctl /u01/app/oracle/coolbak

    ho cp /u01/app/oracle/oradata/orcl/control02.ctl /u01/app/oracle/coolbak

 

    SQL> save /tmp/tmpbak.sql;   --将上面的输入保存为tmpbak.sql

    Created file /tmp/tmpbak.sql

 

    SQL> ho vim /tmp/tmpbak.sql   --编辑tmpbak.sql,将下面的内容输入到tmpbak.sql

 

    set feedback off

    set heading off

    set verify off

    set trimspool off

    set pagesize 0

    set linesize 200

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

    define script = '/tmp/coolbak.sql'

    spool &script

    select 'ho cp ' || name || ' &dir' from v$controlfile

    union all

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

    union all

    select 'ho cp ' || member || ' &dir'  from v$logfile

    union all

    select 'ho cp ' || name || ' &dir' from v$tempfile

    /

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

    ho cp /u01/app/oracle/10g/dbs/orapworcl &dir

    spool off

    shutdown immediate

    start &script

    ho rm &script

    startup

 

    --执行tmpbak.sql

    SQL> @/tmp/tmpbak.sql;

 

    --执行过程及数据库启动略

       

    --启动后查看备份的文件

    SQL> ho ls /u01/app/oracle/coolbak

    control01.ctl  orapworcl   redo2b.rdo    system01.dbf   users01.dbf

    control02.ctl  redo1a.rdo  redo3a.rdo    tbs1_1.dbf

    example01.dbf  redo1b.rdo  redo3b.rdo    tbs1_2.dbf

    initorcl.ora   redo2a.rdo  sysaux01.dbf  undotbs01.dbf

 

四、总结

    优点

        冷备模式下概念易于理解,即将需要备份的文件复制到安全的位置

        操作比较简单,不需要太多的干预

        容易恢复到某个时间点上(只需将文件再拷贝回去)

        能与归档方法相结合,作数据库“最新状态”的恢复。

    缺点

        备份时,数据库必须处于一致性关闭状态

        只能提供到某一时间点的恢复

        备份时速度比较慢,尤其是数据量大性能影响比较大

        不能实现基于表和用户级别的数据恢复

 

五、更多参考

 

  Oracle 备份恢复概念 

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

Managing Archived Redo Logs 

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

Oracle 角色、配置文件 

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

  Oracle 控制文件(CONTROLFILE) 

  Oracle 表空间与数据文件 

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>' [reuse];          --控制文件的完整备份

    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 常见故障及日常规划

对任何数据库系统而言,对显而易见的故障,应当避免发生本文列出了Oracle常见的故障并给出了解决方案,同时列出了一些日常规划。...

Oracle中的RMAN,冷备份、热备份简介

Oracle中的RMAN可以用来备份和还原数据库文件、归档日志和控制文件。它也可以用来执行完全或不完全的数据库恢复。但RMAN不能用于备份初始化参数文件和口令文件。RMAN备份和还原的实质是去启动or...

oracle的冷备份和热备份方法介绍

  • 2009年09月16日 18:19
  • 38KB
  • 下载

oracle的备份和冷备份、热备份

  • 2012年02月29日 23:35
  • 65KB
  • 下载

MySQL数据库的热备份和冷备份优缺点

冷备份(off, 慢, 时间点上恢复) 冷备份发生在数据库已经正常关闭的情况下,当正常关闭时会提供给我们一个完整的数据库。冷备份是将关键性文件拷贝到另外位置的一种说法。对于备份数据库信息而言,冷备份...

MongoDB的冷备份与热备份

不管是什么数据库都会考虑数据的备份复制,故障切换等。当一些数据库服务器读写比高时,我们还要考虑实现这些数据库服务器的负载均衡等功能。我们就来看看MongoDB是怎么实现这些功能。  Backup/R...
  • Hui_Na
  • Hui_Na
  • 2016年01月21日 10:40
  • 5113

热备份和冷备份概念

冷备份(off, 慢, 时间点上恢复)冷备份发生在数据库已经正常关闭的情况下,当正常关闭时会提供给我们一个完整的数据库。冷备份是将关键性文件拷贝到另外位置的一种说法。对于备份数据库信息而言,冷备份是最...
  • f112122
  • f112122
  • 2015年10月05日 10:05
  • 2202

MySQL数据库的热备份和冷备份的优缺点

冷备份(OFF, 慢, 时间点上恢复) 冷备份发生在数据库已经正常关闭的情况下,当正常关闭时会提供给我们一个完整的数据库。冷备份是将关键性文件拷贝到另外位置的一种说法。对于备份数据库信息而言,冷备份...

关于冷备份与热备份的对比

一、 冷备份      冷备份发生在数据库已经正常关闭的情况下,当正常关闭时会提供给我们一个完整的数据库。冷备份时将要害性文件拷贝到另外的位置的一种说法。对于备份Oracle信息而言,冷备份时最快...

什么是冷备份和热备份,有什么区别?

[转载] 原文地址 http://news.newhua.com/news/2010/0601/93935.shtml   对于oracle数据库只有物理备份和逻辑备份   物理备份:是将实...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Oracle冷备份与热备份
举报原因:
原因补充:

(最多只允许输入30个字)