RMAN 还原与恢复

为什么80%的码农都做不了架构师?>>>   hot3.png

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

-- 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 '<newdir>/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

 

    3.恢复表空间

       

        --删除表空间内的数据文件,删除后在针对位于该表空间的表进行插入记录以及实施检查点进程

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

 

            SQL> insert into bk.tb2 select 4,'Jackson' from dual;

 

            SQL> commit;

 

            SQL> alter system checkpoint;

       

        --强制检查点后,告警日志出现错误提示,视图v$recover_file给出了故障数据文件

            [oracle@oradb ~]$ tail -n 50 $ORACLE_BASE/admin/orcl/bdump/alert_orcl.log

            Errors in file /u01/app/oracle/admin/orcl/bdump/orcl_ckpt_4724.trc:

            ORA-01110: data file 6: '/u01/app/oracle/oradata/tbs01.dbf'

            ORA-01116: error in opening database file 6

            ORA-01110: data file 6: '/u01/app/oracle/oradata/tbs01.dbf'

            ORA-27041: unable to open file

            Linux Error: 2: No such file or directory

           

            SQL> select * from v$recover_file;

 

                 FILE# ONLINE  ONLINE_ ERROR                 CHANGE# TIME

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

                     6 OFFLINE OFFLINE FILE NOT FOUND             

 

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

 

            NAME                                               STATUS

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

            /u01/app/oracle/oradata/tbs01.dbf                  RECOVER

       

        --使用RMAN命令恢复数据文件,此时数据库处于OPEN状态,因此首先需要将表空间脱机,恢复完成之后再将其联机

            RMAN> run{

            2> sql 'alter tablespace tbs1 offline immediate';

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

            4> restore tablespace tbs1;

            5> switch datafile all;

            6> recover tablespace tbs1;

            7> sql 'alter tablespace tbs1 online';}

 

            SQL> select name,status from v$datafile where file#=6;  --位置变动到orcl子目录下,状态变为online

 

            NAME                                               STATUS

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

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

 

        --也可以使用下面的命令完成同样的功能

        --注意如果表空间内有多个数据文件,而仅有单个数据文件损坏则采用下面的方式处理更为妥当

            RMAN> run{

            2> sql 'alter database datafile 6 offline immediate';

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

            4> restore datafile 6;

            5> switch datafile all;

            6> recover datafile 6;

            7> sql 'alter databaes datafile 6 online';}

 

    4.RMAN实现不完全恢复

        对于RMAN的不完全恢复,使用Oracle的闪回特性的处理有更多的优势。关于闪回请参考:Oracle 闪回特性

        步骤

            a.加载数据到mount状态(建议恢复前先做备份)

            b.为高并发分配多个通道

            c.还原所有(所需)的数据文件

            d.使用until time,until sequence,until scn来恢复数据库

            e.使用resetlogs打开数据库

            f.全备数据库

       

        演示RMAN基于until time的例子

            SQL> show user;

            USER is "BK"

            SQL> create table tb1(id int,name varchar2(10));

 

            SQL> insert into tb1 select 1,'Lancy' from dual;

 

            SQL> ho strings $ORACLE_BASE/oradata/orcl/redo02.log | grep Lancy  --查看联机日志文件中不存在刚刚插入的记录

 

            SQL> commit;                                                       --注意commit是将日志缓冲内容写入到日志文件

 

            SQL> ho strings $ORACLE_BASE/oradata/orcl/redo02.log | grep Lancy  --提交后联机日志文件中才有新增的记录

            Lancy

 

            SQL> alter system switch logfile;

 

            SQL> ho ls $ORACLE_BASE/oradata/arch

            log_1_1_732989230.arc  log_1_1_732989889.arc

 

            RMAN> run{

            2> allocate channel ch1 type disk;

            3> allocate channel ch2 type disk;

            4> backup as compressed backupset database plus archivelog delete input

            5> format '/u01/bk/rmbk/wh_lg_%U'

            6> tag='Wholebak_Pluslog';

            7> release channel ch1;

            8> release channel ch2;}

 

            18:10:36 SQL> drop table tb1;

 

            RMAN> run{

            2> allocate channel ch1 type disk;

            3> allocate channel ch2 type disk;

            4> set until time "to_date('2010-10-21 18:10:36','yyyy-mm-dd hh24:mi:ss')";

            5> restore database;

            6> recover database;

            7> alter database open resetlogs;

            8> release channel ch1;

            9> release channel ch2;}

 

            SQL> select * from tb1;

 

                    ID NAME

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

                     1 Lancy

 

    5. SPFILE文件丢失的恢复

        SPFILE参数文件可以在RMAN中进行备份,因此可以使用RMAN来恢复SPFILE文件。可以自动备份SPFILE

        SPFILE的自动备份是随着控制文件的备份一起被完成的,因此可以通过自动备份控制文件来实现自动备份SPFILE文件的目的

        其次,在备份系统表空间时将引发控制文件的自动备份,而不论是否设置自动备份参数为ON,此时同样也备份SPFILE文件

       

       

        有关SPFILE文件请参考:Oracle 参数文件

                             SPFILE 错误导致数据库无法启动(ORA-01565)

       

        SPFILE文件恢复步骤

            a. startup nomount [force];

            b. set dbid=dbid_no;

            c. restore spfile from autobackup | '<dir>'

            d. startup force;   如果d执行失败则转到ef,否则不用执行ef

            e. set dbid=dbid_no;

            f. startup;

       

        下面设定控制文件的自动备份以及设置其备份路径(注意要预先知道目标数据库的DBID,此次演示的DBID)

       

            RMAN> configure controlfile autobackup on;

            RMAN> configure controlfile autobackup format for device type disk to '/u01/bk/rmbk/auto_ctl_%d_%F';

           

            RMAN> exit

            sys@ORCL> alter tablespace users add datafile '$ORACLE_BASE/oradata/orcl/users02.dbf' size 5m;

            [oracle@oradb rmbk]$ ls auto*      --执行上一条alter tablespace users add datafile 语句将引发控制文件的自动备份

            auto_ctl_ORCL_c-1263182651-20101124-00

            sys@ORCL> shutdown immediate;

           

            [oracle@oradb dbs]$ mv spfileorcl.ora spfileorcl.ora.bak   --将原来的spfile文件重命名

           

            [oracle@oradb ~]$ rman target / nocatalog

            RMAN> startup nomount force;

            RMAN> set dbid=1263182651;

            RMAN> restore spfile from autobackup;   --此处并没有找到文件路径,按Oracle联机文档,在nomount状态应该可以找到

            RMAN-06172: no autobackup found or specified handle is not a valid copy or piece

            RMAN> restore spfile from '/u01/bk/rmbk/auto_ctl_ORCL_c-1263182651-20101124-00';    --手动指定路径

            RMAN> startup force;

   

    6.联机重做日志文件丢失的恢复请参考:

        基于catalog RMAN 备份与恢复

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

   

    7.控制文件的恢复处理

        控制文件中描述了数据库的相关物理信息,如创建时间、DBID、数据文件、日志文件等相关信息,因此一旦控制文件丢失数据库将

    不能启动,鉴于其重要性,控制文件的备份与恢复将单独列出。有关控制文件请参考下列

        基于catalog RMAN 备份与恢复

        Oracle 控制文件的备份与恢复

   

三、更多参考   

有关基于用户管理的备份和备份恢复的概念请参考:

        Oracle 冷备份

        Oracle 热备份

        Oracle 备份恢复概念

        Oracle 实例恢复

        Oracle 基于用户管理恢复的处理(详细描述了介质恢复及其处理)

       

    有关RMAN的恢复与管理请参考:

        RMAN 概述及其体系结构

        RMAN 配置、监控与管理

        RMAN 备份详解

        RMAN 还原与恢复

       

    有关Oracle体系结构请参考:

        Oracle实例和Oracle数据库(Oracle体系结构)

        Oracle 表空间与数据文件

        Oracle 密码文件

        Oracle 参数文件

Oracle 数据库实例启动关闭过程

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

        Oracle 控制文件(CONTROLFILE)

        Oracle 归档日志

 


原文链接: http://blog.csdn.net/robinson_0612/article/details/6041247

转载于:https://my.oschina.net/dtec/blog/47387

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/548586.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在阿里云服务器Windows Server 2012r IIS 上部署.NET网站

本文转载自这篇文章&#xff0c;转载记录一下&#xff0c;万一以后要用到可以作为参考。 1、添加站点 首先创建连接池&#xff0c;如下图所示&#xff1a; 然后添加网站&#xff0c;如下图所示&#xff1a; 添加网站这里&#xff0c;需要注意上图中这个画框的这个位置&#xf…

ASP.NET MVC 利用AreaRegistration进行Area区域模块化开发

背景资料&#xff1a; 随着业务的需要&#xff0c;结构需求越来越多&#xff0c;View文件夹下的文件夹也越来越多&#xff0c;又或者需要更改结构的页面路径&#xff0c;另外可能是多个人合作开发&#xff0c;有多个WEB项目需要合并在一个网站中访问。 用Areas可以解决上述问…

【吼吼睡cocos2d学习笔记】第四章 - 第一个游戏

来让我们开始第一个游戏的制作。 这个过程可能有点艰辛&#xff0c;但是只要坚持下来&#xff0c;第一个游戏往往能给我们带来巨大的收益&#xff08;当然这个收益不是经济上的:-P) 先上截图&#xff1a; iPad中&#xff1a; 游戏构思 角色 在屏幕的上方&#xff0c;有一定数量…

如何从iPhone / iPod Touch / iPad连接

如何从iPhone / iPod Touch / iPad连接 本文将介绍从iPhone / iPod Touch / iPad等设备连接到已启用L2TP over IPsec功能的PacketiX 服务器的方法。 操作前需要按照“在服务器上启用IPsec功能”的提示&#xff0c;在服务器端进行设置。如何增加一个连接设置 首先&#xff0c;你…

POJ 3250 Bad Hair Day【单调队列】

Description Some of Farmer JohnsNcows (1 ≤N≤ 80,000) are having a bad hair day! Since each cow is self-conscious about her messy hairstyle, FJ wants to count the number of other cows that can see the top of other cows heads. Each cowihas a specified heig…

2012年3月编程语言排行榜:JavaScript超越Perl和Python

2012年3月编程语言排行榜&#xff1a;JavaScript超越Perl和Python TIOBE 于昨日公布了2012年3月编程语言指数排行榜。排名前三的语言是&#xff1a;Java、C 和 C#。 在本月排行榜中&#xff0c;JavaScript上升至第8位。由于网站越来越依赖JavaScript&#xff0c;因此JS的流行程…

ASP.NET MVC 多语言开发简单案例

首先&#xff0c;新建一个空的MVC项目&#xff0c;增加一个名叫Language的文件夹用于存放资源文件&#xff0c;如下图所示&#xff1a; 在Language文件夹中&#xff0c;增加两个资源文件&#xff0c;分别用于存储中文和英文&#xff0c;如下图所示&#xff1a; 如何添加资源文件…

C#中使用NPIO实现导入导出Excel简单操作

本文介绍了在Winform中使用NPOI(PIO项目下的.Net组件)来操作Excel文件&#xff0c;而无需安装Office。 要实现的效果是这样的&#xff1a; 1、导出Excel&#xff1a;根据指定datatable&#xff0c;弹出导出窗口&#xff0c;用户自定义路径、导出名&#xff0c;然后导出。 2、…

3招seo技巧让你把关键词做进百度前三

这个技巧也没有什么&#xff0c;说白了就是个百度点击原理&#xff01;当然&#xff0c;这个标题也就是一个标题党&#xff0c;但是的确能让你的排名靠前&#xff0c;因为我之前测试过&#xff0c;我做过一个词&#xff0c;有10个人&#xff0c;点击一下&#xff0c;隔天就第一…

ASP.NET MVC 中删除无用视图引擎

默认情况下&#xff0c;ASP.NET MVC 同时支持 WebForm 和 Razor 引擎&#xff0c;而我们通常在同一个项目中只用到了一种视图引擎&#xff0c;如Razor&#xff0c;那么我们就移除没有使用的视图引擎&#xff0c;提高View视图的检索效率。在没有删除WebForm引擎之前&#xff0c;…

VRRP在生产环境中的应用

该案例是笔者做过的一个网络改造项目&#xff0c;同时为了保密只介绍VRRP方面的配置以及要注意的事项。 该方案时某医院核心网络&#xff0c;通过两台S8610走VRRP(和网关相连)。网络拓扑如下 S8610_1配置 en config hostname S8610_1 enable sec ******* line vty 0 4 pass ***…

隐藏ASP.NET MVC版本

默认情况下&#xff0c;ASP.NET MVC网站会把版本号提供给浏览器&#xff0c;如下图所示&#xff1a; 只需在Global.asax中添加一句代码即可&#xff1a; MvcHandler.DisableMvcResponseHeader true; 如下图所示&#xff1a; protected void Application_Start(){MvcHandler.…

ASP.NET MVC 使用Log4Net记录系统运行中问题

log4net是.Net下一个非常优秀的开源日志记录组件。log4net记录日志的功能非常强大。它可以将日志分不同的等级&#xff0c;以不同的格式&#xff0c;输出到不同的媒介。 在NuGet程序包中下载log4Net组件&#xff0c;如下图所示&#xff1a; 打开Web.config文件&#xff0c;在&…

ASP.NET MVC 使用Log4Net在不同目录中记录不同类型的日志

在上一篇文章中&#xff0c;实现了利用Log4Net记录系统中出现的问题。如果同时还需要记录用户操作的监控日志&#xff0c;就需要一些修改 修改Web.Cofig配置文件 ,增加一个logger节点和appender节点&#xff0c;用于监控操作日志配置&#xff0c;并且设置不同的日志文件路径&am…

简明python教程 --C++程序员的视角(七):异常

当你的程序中出现某些 异常的 状况的时候&#xff0c;异常就发生了。例如&#xff0c;当你想要读某个文件的时候&#xff0c;而那个文件不存在。或者在程序运行的时候&#xff0c;你不小心把它删除了。上述这些情况可以使用异常来处理。 假如你的程序中有一些无效的语句&#x…

【流媒體】Android 实时视频采集—Camera预览采集

【流媒體】Android 实时视频采集—Cameara预览采集 SkySeraph Mar 26th 2012 SZ Email&#xff1a;skyseraph00163.com 更多精彩请直接访问SkySeraph个人站点&#xff1a;www.skyseraph.com 流媒体系列&#xff1a; http://skyseraph.com/2012/04/11/Media/流媒体专题/ 1 概…

C#中使用SqlBulk百万级数据秒级插入

本文转自这篇文章&#xff0c;提供了一种较快的数据插入的思路&#xff0c;转过来做个记录。 #region static void Insert() {Console.WriteLine("使用Bulk插入的实现方式");Stopwatch sw new Stopwatch();DataTable dt GetTableSchema(); using (SqlConnection …

利用JQuery插件CleverTabs实现多页签打开效果

在VS中&#xff0c;我们能打开多页签&#xff0c;并在不同的页签之间进行浏览和操作&#xff0c;这一功能通过JQuery插件CleverTabs也能实现此效果。CleverTabs下载请点击这里&#xff1a;JQuery CleverTabs 本文采用ASP.NET MVC技术实现效果&#xff1a;要在布局页中点击不同的…

精通ASP.NET MVC ——路由

本文章将关注定义路由&#xff0c;并使用它们去处理URL&#xff0c;使用户能够到达控制器和动作。 文章非常长&#xff0c;可以对路由机制有较初步的了解。首先创建示例项目&#xff0c;项目名为UrlAndRoutes&#xff0c;如下图所示&#xff1a; 然后是创建示例控制器和示例视图…

ASP.NET Web API简单学习

Web API 简介 Web API可以返回 json、xml类型的数据&#xff0c;对于数据的增删改查&#xff0c;提供了对应的资源操作&#xff0c;按照要求的类型进行处理&#xff0c;主要包括&#xff1a;Get&#xff08;查&#xff09;&#xff0c;Post&#xff08;增&#xff09;&#xff…