rman恢复

一、恢复的相关概念

    1.1)实例恢复


            是指数据库在遭遇突然情况下崩溃,在处理的事务中有提交的,有没有提交的,


            也就是说有脏数据,数据库系统本身有某种记录状态和数据的机制。在下次重启之后,再次运行该实例时,


            系统自动检查相关状态并有专有进程将该实例的状态、数据恢复到崩溃的那个时候。   

    1.2)介质恢复

        首先使用备份还原数据,然后再应用归档日志、重做日志的恢复方式称为介质恢复。

        介质恢复能将一个经过还原的数据更新到当前的时间点或之前的某个时间点。

        通常介质恢复这个术语专指对数据文件进行恢复的过程。

        数据块的介质恢复指数据文件中的个别数据块出现错误时进行的特殊恢复操作。

        介质恢复通常又可以分为完全恢复和不完全恢复


        1.2.1)完全恢复

        使用数据库,表空间或数据文件的备份进行还原,再使用归档,重做日志或增量备份将数据更新到当前时间点

        用户可以实现基于对数据库、表空间、数据文件执行完全恢复


    1.2.2)不完全恢复

      是将数据恢复到某一个特定的时间点或特定的SCN。


        不完全介质恢复的几种类型:

            基于时间的恢复(Time-based recovery) 将数据恢复到指定的时间点

         用户控制的恢复(Cancel-based recovery) 当用户提交CANCEL后停止恢复

                  (此选项在使用RMAN时无效)

         基于SCN 的恢复(Change-based recovery) 将数据恢复到指定的SCN

            按重做日志序号恢复(Log sequence recovery)将数据恢复到指定的重做日志序号

            (仅使用RMAN时有效)

二、基于用户管理恢复的方法

    数据恢复时的常用视图

        v$reover_file    --查询需要恢复的文件,该视图信息来自控制文件,

                            如控制文件来自备份或重建过则信息会不准

        v$archived_log    --查询所有归档日志列表

        v$recovery_log    --查询所有需要用于恢复的日志


    常用的recover命令

        --mount状态下执行恢复

            SQL> recover database;

        --open状态下执行恢复

            SQL> recover tablespace users;

    配置恢复自动使用归档日志

        在介质恢复前通过设置set autorecovery on来自动应用归档日志实现恢复

        也可以在输入归档日志路径、文件名时输入auto


    恢复文件到新路径

      alter database rename file '<dir>' to '<dir>'

三、完全恢复 

      3.1) 恢复数据库

            3.1.1)备份数据库


                  RMAN> backup database;


            3.1.2) 删除所有数据文件


SQL> SELECT 'rm -f  '||file_name  FROM DBA_DATA_FILES;

tail -f /opt/oracle/diag/rdbms/orcl/ORCL/trace/alert_ORCL.log

3.1.3)恢复数据库

      SQL> startup;

      SQL> select OPEN_MODE from v$database;

      SQL> set linesize 200

            col ERROR format a20

            select * from v$recover_file;


      rman target /

      RMAN> restore database ;


      SQL>  set linesize 200

            col ERROR format a20

            select * from v$recover_file;

            recover database ; 

            alter database open;



3.2) 恢复表空间:恢复表空间时候,记得OFFLINE表空间,恢复完成ONLINE;

    3.2.1)创建表空间并插入数据

          create tablespace rman_tablespace_test datafile '/opt/oracle/oradata/WEISIDB/dbfile_01.dbf' size 100M;

          alter user weisi default tablespace rman_tablespace_test;

          backup databae;

    sqlplus weisi/weisi@weisi

    create table big_rman_t tablespace rman_tablespace_test as select * from sys.dba_objects ;       

    select count(1) from big_rman_t;

    select file_name from dba_data_files where tablespace_name='RMAN_TABLESPACE_TEST' ;

    /opt/soft/rman/ORCL/datafile/o1_mf_rman_tab_ckrv2vky_.dbf

    rm -f  /opt/oracle/oradata/WEISIDB/dbfile_01.dbf


            /opt/soft/rman/ORCL/datafile/o1_mf_rman_tab_ckrv2vky_.dbf


    select count(1) from big_rman_t;

    select file_name,online_status from dba_Data_files;



    alter database datafile '/opt/oracle/oradata/WEISIDB/dbfile_01.dbf' offline;

    col TABLESPACE_NAME format a30

    col file_name format a50

    select file_name,online_status from dba_Data_files;

    select tablespace_name , status from dba_tablespaces;

    alter tablespace rman_tablespace_test offline;

    alter tablespace rman_tablespace_test offline immediate;


    RMAN> restore tablespace rman_tablespace_test;

          recover tablespace rman_tablespace_test;



    alter tablespace rman_tablespace_test online;

    select count(1) from big_rman_t;

3.3)  恢复数据文件

      select file_name,online_status from dba_Data_files;

        rm -f /opt/soft/rman/ORCL/datafile/o1_mf_rman_tab_ckh42899_.dbf

        select count(1) from big_rman_t;

        alter system flush buffer_cache;


        alter database datafile 8 offline;


        RMAN> restore  datafile 8;

                          recover datafile 8;


                  alter database datafile 8 online;  




          总结:

              数据库处于关闭状态下的恢复:包括系统表空间(系统数据文件)、Undo 表空间、整个数据库

              1.关闭实例

              2.startup mount;

              3.还原数据文件

              4.使用归档日志更新到最新

              5.打开数据库


          数据库处于打开状态下,非系统数据文件丢失的恢复

          1.将数据文件offline(alter database datafile n offline)

          2.还原数据文件(restore)

          3.恢复数据文件(recover datafile n)

            4.使数据文件online (alter database datafile n online)




四:控制文件恢复

Oracle 控制文件为二进制文件,记录了当前数据库的物理结构信息,多路复用的原则。

在mount阶段被读取,open阶段一直被使用


        控制文件中包含的内容:

            数据库的名字、ID、创建的时间戳

            表空间的名字

            联机日志文件、数据文件的位置、个数、名字

            联机日志的Sequence号码

            检查点的信息

            归档信息

            备份信息

        alter database backup controlfile to trace as '/opt/soft/control.sql';


        SHOW PARAMETER CONTROL_FILES    --列出控制文件的名字、状态、位置等


        备份控制文件

        1.alter database backup controlfile to '/opt/soft/control.ctl';

        2.alter database backup controlfile to trace as '/opt/soft/control.sql' ;

        3.RMAN>  backup current controlfile;


        备份:SPFILE

        backup spfile;


        恢复SPFILE


        /opt/oracle/product/11.2.0/dbhome/dbs/spfileORCL.ora

        实验:

        1.完全备份数据库

        2.关闭数据库

        3.删除SPFILE

          cd /opt/oracle/product/11.2.0/dbhome/dbs/

        4.恢复SPFILE

          RMAN> startup force nomount;

          RMAN> restore spfile;

          RMAN> restore spfile from autobackup;

          RMAN> restore spfile from '/opt/oracle/flash_recovery_area/WEISIDB/backupset/2016_12_11/o1_mf_ncsnf_TAG20161211T113526_d4slkyt2_.bkp';

          RMAN> restore spfile to '/opt/soft/spfile' from '/opt/soft/recover/ORCL/backupset/2016_04_23/o1_mf_nnsnf_TAG20160423T072145_ckodj973_.bkp';

          RMAN> shutdown immediate;

          RMAN> start;


        恢复控制文件:

        /opt/oracle/oradata/ORCL/control01.ctl, /opt/oracle/oradata/ORCL/control02.ctl

          RMAN>  backup current controlfile;

          SQL> shutdown immediate;

          mv  /opt/oracle/oradata/ORCL/control01.ctl  /opt/oracle/oradata/ORCL/control01.ctl_20160424

          mv  /opt/oracle/oradata/ORCL/control02.ctl  /opt/oracle/oradata/ORCL/control02.ctl_20160424


          cd opt/soft/recover/ORCL/backupset/


          ll -th


          SQL>  startup


          RMAN> restore controlfile from  '/opt/oracle/flash_recovery_area/WEISIDB/backupset/2016_12_11/o1_mf_ncnnf_TAG20161211T142803_d4swhn8w_.bkp';

          RMAN> alter database mount;

          RMAN> recover database;

          RMAN> alter database open resetlogs;




手动创建控制文件


          SQL> alter database backup controlfile to trace as '/opt/soft/control.sql' ;

              shutdown immediate;

              mv  /opt/oracle/oradata/ORCL/control01.ctl  /opt/oracle/oradata/ORCL/control01.ctl_20160424_4

              mv  /opt/oracle/oradata/ORCL/control02.ctl  /opt/oracle/oradata/ORCL/control02.ctl_20160424_4


              sqlplus / as sysdba

              SQL> startup nomount;


              CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS  ARCHIVELOG

  MAXLOGFILES 40

  MAXLOGMEMBERS 3

    MAXDATAFILES 100

    MAXINSTANCES 8

    MAXLOGHISTORY 292

LOGFILE GROUP 2 '/opt/oracle/oradata/ORCL/redo02.log'  SIZE 50M BLOCKSIZE 512, GROUP 3 '/opt/oracle/oradata/ORCL/redo03.log'  SIZE 50M BLOCKSIZE 512

DATAFILE  '/opt/oracle/oradata/ORCL/system01.dbf','/opt/oracle/oradata/ORCL/sysaux01.dbf', '/opt/oracle/oradata/ORCL/undotbs01.dbf', '/opt/oracle/product/11.2.0/dbhome/dbs/data_D-ORCL_I-1434170406_TS-USERS_FNO-4_0vr1prk2', '/opt/oracle/oradata/ORCL/weisi_catalog_01.dbf','/opt/oracle/oradata/ORCL/undo02.dbf','/opt/soft/oracle/rman_tbs_01.dbf'  CHARACTER SET AL32UTF8;

RECOVER DATABASE using backup controlfile;

alter database open resetlogs;


        数据文件无备份情况下的恢复

        前提是非系统表空间

        控制文件未被重新创建或恢复到以前的版本(丢失数据文件的描述信息应在数据字典和控制文件中)

        该数据文件从文件开始到丢失期间的所有日志必须存在

        使用下面的命令重建数据文件

            alter database create datafile 'filename';

            alter database create datafile 'filename' as 'new file name'; --可以放置到不同目录

        步骤:-->先将丢失数据文件脱机-->重建数据文件-->应用归档日志-->联机恢复的数据文件

        SQL> create tablespace rman_datafile_nobackup datafile '/opt/oracle/oradata/ORCL/no_back.dbf' size 100M


              create user wuzhenxing identified by wuzhenxing default tablespace rman_datafile_nobackup;

grant select on DBA_OBJECTS to wuzhenxing;

grant connect to wuzhenxing;

grant resource to wuzhenxing;

wuzhenxing

              create table t as select * from sys.dba_objects;

              insert into t select * from t;

              select count(1) from t;


              SYS

              alter system switch logfile;

              alter system checkpoint;


              os

              rm -f /opt/oracle/oradata/ORCL/no_back.dbf


              SYS

              alter system flush buffer_cache;


              wuzhenxing

              select count(1) from t;


              SYS

              select * from dba_data_files;

              5 

              alter database datafile 5 offline;

              select * from v$recover_file;

              alter database create datafile 5;

              select * from v$recovery_log;

              select name,checkpoint_change# from v$datafile_header;

              recover datafile 5;

              alter database datafile 5 online;

      wuzhenxing

      select count(1) from t;


      rm -f /opt/oracle/oradata/ORCL/no_back.dbf


      ps -ef |grep dbw


      cd /proc/11573/fd


      ll | grep no


      cp 31 /opt/oracle/oradata/ORCL/no_back.dbf


      alter database datafile 9 offline;

      recover datafile 9;

      alter database datafile 4 online;







  resetlogs


  数据在启动时候是要做一致性检查的,oracle在open阶段要做两次检查


1. 检查数据文件头的检查点计数(checkpoint cnt)是否和控制文件的检查点计数(checkpoint cnt)一致。目的是确认数据文件

    是否来自同一版本,而不是从备份中恢复的。如果这一步检查通过,就进行第二步检查


2. 检查数据文件头的开始scn和控制文件中记录该文件的结束scn是否一致。如果数据文件头的开始scn和控制文件中该文件的结束scn

    相等,那说明这个数据文件就不需要恢复,否则就要恢复文件


  如果以上两步检查都通过,那就可以正常打开数据库,锁定数据文件,同时将控制文件中每个数据文件的结束scn设置无穷大。

  我们在某些条件下打开数据,会提示让用resetlogs选项open数据库,为什么要用resetlogs呢?它是干嘛用的呢?问号一大堆了吧,

下面来具体分析下。



  resetlogs的作用


  防止陈旧的数据进入数据库(保证数据库的一致性),用resetlogs打开数据库,一定要立即对数据库做个全备。

  在控制文件,data file header,redo log header里存储”resetlogs data“,当open resetlogs被执行时,可以通过这些内容检查一致性。



什么时候用resetlogs


1. 不完全恢复

2. 用备份的控制文件恢复

3. 新创建的控制文件来恢复

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,463评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,868评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,213评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,666评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,759评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,725评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,716评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,484评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,928评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,233评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,393评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,073评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,718评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,308评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,538评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,338评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,260评论 2 352

推荐阅读更多精彩内容