当前位置:  数据库>oracle

RMAN 还原与恢复

    来源: 互联网  发布时间:2017-03-30

    本文导语: --==================== -- RMAN 还原与恢复 --====================       在Oracle中,三大文件即控制文件,数据文件,日志文件的丢失与破坏都将需要使用还原或恢复来使数据库正常化。而RMAN还原与恢复 是实现数据库完整性、可靠性必不可...

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

-- RMAN 还原与恢复

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

 

    在Oracle中,三大文件即控制文件,数据文件,日志文件的丢失与破坏都将需要使用还原或恢复来使数据库正常化。而RMAN还原与恢复

是实现数据库完整性、可靠性必不可少的手段之一。还原简言之即是将所需的文件从备份中复制到原来文件所在的路径。还原通常可以包括

数据库、表空间、数据文件级别的还原。通常还原后的内容会滞后于最新的数据库SCN,因此将归档日志、联机重做日志文件中的内容更新到

还原的数据文件中,这个过程称之为恢复。

 

    恢复的几种情形

        1.在mount 或open 阶段完成的灾难恢复

            非系统表空间,undo表空间,所有的数据文件

        2.在nomount 阶段完成的灾难恢复

            控制文件(controlfile)

        3.在mount 阶段完成的灾难恢复

            系统表空间,联机重做日志文件

   

    有关恢复、介质恢复、一致性或非一致性恢复的详细概念请参考:Oracle 基于用户管理恢复的处理 

   

一、RMAN在归档模式下的还原与恢复的简化例子

    RMAN> connect target /

    RMAN> startup mount;

    RMAN> restore database;

    RMAN> recover database;

    RMAN> alter database open;

 

二、使用RMAN进行还原与恢复(非catalog方式) 

 

    1.数据文件丢失的恢复处理

        --设定客户端环境变量并连接到数据库

            C:>set NLS_LANG=AMERICAN_AMERICA.AL32UTF8

 

            C:>rman target sys/RedHat@dedicated nocatalog

       

        --对数据库做全备

            RMAN> backup as backupset               

            2> format  '/u01/bk/rmbk/wb_%U'

            3> tag=Whole_bak database;

 

            RMAN> sql  'alter system archive log current';

           

        --对数据库做级增量备份

            RMAN> run{                                 

            2> allocate channel ch1 type disk;

            3> backup incremental level 0 database

            4> format '/u01/bk/rmbk/Inc_0_%U'

            5> tag=Inc_0;

            6> release channel ch1;}

 

        --对表插入新记录并切换日志

            SQL> select * from tb2;

 

                    ID NAME

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

                     1 Robinson

                     2 Henry

 

            SQL> insert into tb2 select 3,'Danny' from dual;

 

            SQL> commit;

 

            SQL> alter system checkpoint;

 

            SQL> alter system switch logfile;

           

        --对数据库做级增量备份

            RMAN> run{                             

            2>  allocate channel ch1 type disk;

            3>  backup incremental level 1 database

            4>  format '/u01/bk/rmbk/Inc_1%U'

            5>  tag=Inc_1;

            6>  release channel ch1;}

 

            SQL> shutdown immediate;  --关闭数据库

 

            SQL> ho rm $ORACLE_BASE/oradata/orcl/*.dbf  --删除所有的数据文件 */

 

            SQL> startup mount

 

        --使用RMAN连接到未mount状态的数据库

            RMAN> connect target sys/redhat@dedicated

 

            connected to target database: ORCL (DBID=1257415066, not open)

 

        --执行数据库还原

        --注意当存在完整备份也同时存在级增量备份时,Oracle会自动使用级增量备份来还原数据库

            RMAN> restore database; 

            piece handle=/u01/bk/rmbk/Inc_0_0alqu132_1_1 tag=INC_0  --下面可以看出还原的数据来自级增量备份

 

        --执行数据库恢复

            RMAN> recover database;

            piece handle=/u01/bk/rmbk/Inc_10clqu1fe_1_1 tag=INC_1

 

        --打开数据库验证恢复

            RMAN> alter database open;

 

            SQL> select * from bk.tb2;

 

                    ID NAME

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

                     1 Robinson

                     2 Henry

                     3 Danny

   

    2.磁盘损坏导致数据文件无法恢复到原始位置或不想恢复到原始位置的处理

        使用set newname 命令将数据文件还原到新路径

            set newname for datafile 1 to '/system01.dbf'; --为恢复的数据文件指定新路径或重命名

        使用switch命令将变更更新到控制文件

            switch datafile n | all ;      --等同于alter database rename file命令,该命令将恢复的数据文件重命名更新到控制文件

       

        --下面的示例首先删除tbs01.dbf,接下来将其恢复到oradata目录中

       

            SQL> ho rm $ORACLE_BASE/oradata/orcl/tbs01.dbf

 

            SQL> startup mount force;

 

            RMAN> connect target sys/redhat@dedicated

 

            connected to target database: ORCL (DBID=1257415066, not open)

 

            RMAN> run{

            2> set newname for datafile 6 to '/u01/app/oracle/oradata/tbs01.dbf';

            3> restore database;

            4> switch datafile all;

            5> recover database;

            6> alter database open;}

 

            SQL> select file#,name,status from v$datafile where file#=6;

 

                 FILE# NAME                                               STATUS

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

                     6 /u01/app/oracle/oradata/tbs01.dbf                  ONLINE

                     

            SQL> select count(1) from bk.tb2;  --表tb2位于tbs01.dbf内

 

              COUNT(1)

            ----------

                     3


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 数据库 iis7站长之家
  • rman配置及rman常用命令操作
  • win平台oracle rman备份和删除dg备库归档日志脚本
  • linux自动运行rman增量备份脚本
  • Oracle相关:Rman Crosscheck删除失效归档
  • Oracle RMAN快速入门指南


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3