zoukankan      html  css  js  c++  java
  • rman数据库恢复;关键/非重要文件、影像副本、控制文件、还原点、非归档、增量、新数据库、灾难性回复

    运行全然恢复:在 ARCHIVELOG 模式下 丢失了系统重要数据文件:

    假设某个数据文件丢失或损坏。且该文件属于 SYSTEM 或 UNDO 表空间,请运行下面步骤:

    1.
    实例可能会也可能不会自己主动关闭。
    2.假设未自己主动关闭。请使用 SHUTDOWN ABORT 关闭实例。


    3.
    装载数据库。
    4.
    还原并恢复缺失的数据文件。

    5.打开数据库。

    1.归档模式丢失非重要数据文件  全然恢复

    第一种方法:

    shutdown abort;

    startup mount;

    alter database create datafile '/home/oracle/test.dbf' as '/home/oracle/test.dbf';

    recover datafile;

    另外一种方法:

    create tablespace test datafile '/home/oracle/test.dbf' size 10m;

    rman target /

    backup datafile 5;

    rm test.dbf

    sq> alter database datafile 5 offline;

    restore datafile 5;

    recover datafile 5;

    sq> alter database datafile 5 online;

    select FILE#,STATUS from v$datafile;

    2. 归档模式丢失重要数据文件  全然恢复

    利用备份,同上另外一种方法。

    --------------------------------------------------------------------------------------------------------------
    恢复映像副本:
    RMAN> recover copy of database with tag 'daily_inc';

    RMAN> backup incremental level 1 for recover of copy
    with tag 'daily_inc' database;

                              RECOVER                   BACKUP
    第 1 天              无                                  创建映像副本
    第 2 天              无                                  创建 1 级增量备份
    第 3 天和以后  依据增量备份恢复副本   创建 1 级增量备份


    恢复映像副本:演示样例
    假设每天都执行以上命令,则能够随时获得全部数据库数据文件的连续更新的映像副本。


    图表显示了每次执行所发生的操作。请注意,这样的算法须要一段准备期间;到第 3 天后策略才会起作用。

    第 1 天
    RECOVER 命令没有运行不论什么操作。尚不存在要恢复的映像副本。BACKUP 命令可用于创建映像副本。

    第 2 天
    RECOVER 命令仍没有运行不论什么操作。由于尚不存在增量备份。

    由于已在第 1 天创建了基准映像副本,BACKUP 命令会创建增量备份。


    第 3 天
    RECOVER 命令将增量备份中的更改应用于映像副本。

    BACKUP 命令将运行还有一个增量备份,该备份将在第 4 天用于恢复映像副本,依此进行循环。

    运行到映像副本的高速切换
    运行下面步骤

    能够使用数据文件的映像副本进行高速恢复:

    1.使数据文件脱机。


    2.使用 SWITCH TO ...COPY 命令指向这些文件的映像副本。

    3.恢复数据文件。


    4.使数据文件联机。


    此时,数据库是可用的,且数据文件已恢复。可是,假设您希望将数据文件放回其原始位置。请继续运行下面步骤:


    5.使用 BACKUP AS COPY 命令在原始位置创建数据文件的映像副本。

    6.使数据文件脱机。

    7.使用 SWITCH TO COPY 命令切换到在步骤 5 中创建的副本。

    8.恢复数据文件。

    9.使数据文件联机。
    能够使用此命令来恢复数据文件、表空间、暂时文件或整个数据库。

    切换到的目标文件必须为映像副本。

    3. 映像副本的高速切换

    backup as copy datafile 6;

    rm a.dbf

    sqlalter database datafile 6 offline;

    rman >switch datafile '/home/oracle/test.dbf' to copy;

    recover datafile 6;

    --回复后数据文件的路径和名称为 '/home/oracle/test.dbf'。

    alter database datafile 4 online;

    select FILE#,STATUS from v$datafile;

    select file_name from dba_data_files;

    backup as copy datafile 4 format '/u01/app/oracle/oradata/orcln/users01.dbf';

    alter database datafile 4 offline;

    switch datafile ' /home/oracle/backup/db_data_D-ORCL_I-4115975543_TS-TEST_FNO-6_38otbf5q.bak' to copy;

    switch datafile 4 to copy;

    recover datafile 4;

    alter database datafile 4 online;

    select file_name from dba_data_files;

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

    4. set newname 改名字

    backup as copy datafile 6;

    list copy of datafile 6;

    select FILE#,STATUS from v$datafile;

    run{

       allocate channel c1 device type disk;

       sql "alter database datafile 6 offline";

       set newname for datafile '/home/oracle/test.dbf' to '/home/oracle/test_new.dbf';

       restore datafile 6;

       switch datafile all;

       recover datafile 6;

       sql "alter database datafile 6 online";

       }


    --------------------------------------------------------------------------------------------------------------
    从自己主动备份还原控制文件:

    RMAN> STARTUP NOMOUNT;

    RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP;

    RMAN> ALTER DATABASE MOUNT;

    RMAN> RECOVER DATABASE;

    RMAN> ALTER DATABASE OPEN RESETLOGS;

    7. 丢失控制文件,參数文件 --数据库必须在nomount状态

    查看文件信息:

    SQL>select name from v$controlfile;

    SQL>show parameter spfile;

    SQL> select name from v$datafile;

    配置控制文件自己主动备份恢复控制文件

    rman target /

    connected to target database: ORCL (DBID=1353286769)

    RMAN>show all; 

    RMAN>CONFIGURE CONTROLFILE AUTOBACKUP ON;

    数据库全备份:

    RMAN>backup as compressed backupset full database;

    删除,參数文件。控制文件,数据文件

    rm /opt/oracle/oradata/orcl/control01.ctl

    rm /opt/oracle/flash_recovery_area/orcl/control02.ctl

    rm /opt/oracle/oradata/orcl/control03.ctl

    rm /opt/oracle/product/11.2.2/dbs/spfileorcl.ora

    rm /opt/oracle/oradata/orcl/system01.dbf

    rm /opt/oracle/oradata/orcl/sysaux01.dbf

    rm /opt/oracle/oradata/orcl/undotbs01.dbf

    rm /opt/oracle/oradata/orcl/users01.dbf

    rm /home/oracle/tbs_ctl01.dbf

    rman target /

    RMAN> set dbid 1353286769  --假设备份在

    startup nomount  --尽管没有參数文件可是也能够启动实例

    恢复參数文件:

    restore spfile from '/data/backup/ctl_c-1353286769-20131102-04.bak';

    /* 从高速恢复区恢复參数文件:

    run { 

    restore spfile from autobackup 

    recovery area = 'flash recovery area destination' 

    db_name = 'db_name'; 

    */

    查看是否有须要改的參数:主要看文件位置

    SQL> create pfile from spfile; 

    恢复控制文件:

    restore controlfile to '/opt/oracle/oradata/orcl/control01.ctl' from '/data/backup/ctl_c-1353286769-20131102-04.bak';

    恢复数据文件:

    RMAN> shutdown immediate

    RMAN> startup mount

    RMAN> restore database;

    RMAN> recover database;

    RMAN> alter database open;

    RMAN-00571: ===========================================================

    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

    RMAN-00571: ===========================================================

    RMAN-03002: failure of alter db command at 11/02/2013 12:10:46

    ORA-01589: must use RESETLOGS or NORESETLOGS option for database open

    RMAN> alter database open resetlogs;


    --------------------------------------------------------------------------------------------------------------
    使用增量备份恢复处于 NOARCHIVELOG 模式的数据库:

    STARTUP FORCE NOMOUNT;

    RESTORE CONTROLFILE; 

    ALTER DATABASE MOUNT;

    RESTORE DATABASE;

    RECOVER DATABASE NOREDO;

    ALTER DATABASE OPEN RESETLOGS;

    8. 使用增量备份恢复处于NOARCHIVELOG 模式的数据库

       1) 撤销数据库archivelog模式

       SQL>shutdown immediate;

       SQL>startup mount;

       SQL>alter database noarchivelog;

       SQL>alter database open;

       SQL>archive log list;

       2) 创建測试用表及数据

       conn zhuxy/zhuxy

       create table c (id number);

       insert into c values(1);

       commit;

       3) 在noarchivelog模式下,0级备份

       RMAN> run{

        shutdown immediate;

        startup mount;

        backup as backupset incremental level 0 database;

        alter database open;

        }

       4) 在noarchivelog模式下,1级备份

       insert into c values(2);

       commit;

       RMAN> run{

        shutdown immediate;

        startup mount;

        backup as backupset incremental level 1 database;

        alter database open;

       }

       6) 删除全部日志文件,  某些数据文件 

       7) 运行恢复

       rman target /

       RMAN>startup mount;

       --运行全库的还原

       RMAN> restore database;

       -- 使用noredo子句进行恢复

       RMAN> recover database noredo;

       --恢复完毕,resetlogs方式打开数据库,完毕全部文件丢失的恢复

       RMAN> alter database open resetlogs;

       8)验证在測试前(增量备份前)插入的数据

        select * from c;

    6.非归档丢失文件

    不全然恢复: SCN, 时间,还原点,或日志序列号     

    1确定目标还原点:SCN时间、还原点或日志序列号。 

    2设置 NLS 环境变量。 

    3装载数据库。

     

    4使用 SET UNTIL、RESTORE 和 RECOVER 命令准备并执行 RUN 块。 

    5用 RESETLOGS 打开数据库。

    -----不全然恢复之--基于时间的恢复 

       1) 准备环境:RMAN全库备份

       RMAN> backup as compressed backupset full database;

       2) 准备环境:測试表及数据

       alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

       create table d (c date);

       insert into d values(sysdate);

       commit;

       create table ff (c date);

       insert into ff values(sysdate);

       commit;

       启动到mount模式,进行基于时间的恢复

       shutdown immediate;

       startup mount;

    run

    {sql 'alter session set nls_date_format="yyyy-mm-dd hh24:mi:ss"';

    set until time = ' 2014-03-30 00:39:34';

    restore database;

    recover database;

    alter database open resetlogs;

    }

    时间也能够这么写:

    set until time="to_date('2013-11-01 15:29:34','yyyy-mm-dd hh24:mi:ss')";

    -----还原点:

    select count(*)  from copy_emp; 

    创建还原点:

    create restore point before_delete;

    delete from copy_emp where ID >=10;

    commit;

    alter table copy_emp enable row movement;

    flashback table copy_emp to restore point b;

    --------------------------------------------------------------------------------------------------------------
    将数据库还原到新主机:

    为了还原数据库。请在还原主机上运行下面步骤:

    1.配置 ORACLE_SID 环境变量。

    2.启动 RMAN 并在 NOCATALOG 模式下连接到目标实例。

    3.设置数据库标识符 (DBID)。

    4.在 NOMOUNT 模式下启动实例。
    5.
    从备份集中还原server參数文件。

    6.关闭实例。


    7.
    编辑还原的初始化參数文件。
    8.
    在 NOMOUNT 模式下启动实例
    9.创建 RUN 块以运行下列任务:

      --还原控制文件
      --
    装载数据库

    10.创建 RMAN 恢复脚本以还原和恢复数据库。

    11.运行 RMAN 脚本。

    12.使用 RESETLOGS 选项打开数据库。

    利用备份将数据库还原到新主机:目标库须要有oracle软件

    1)准备工作

       源库数据库全备及控制文件自己主动备份,当然也包含參数文件

       RMAN> backup as backupset database;

    2)拷贝RMAN备份文件到目标库

      能够用scp

    3)配置目标库

      目标库环境变量设置

      export ORACLE_SID=new_orcl

     启动rmannomount状态,设置dbid(即源库dbid)

     $ rman target /

     RMAN> set dbid 1357901988

     RMAN> startup nomount; --没有參数文件。会报错,可是能够启动实例

    4)恢复參数文件

    RMAN> restore spfile to pfile '' from '';

    编辑pfile參数文件:文件位置。数据库实例名..,创建对应的文件夹

    5) 启动数据库到nomount模式 

     SQL> create spfile from pfile;

     SQL> startup nomount;

    6)还原控制文件

    $ rman target /

    RMAN> restore controlfile to '' from '';

    RMAN> alter database mount;

    7) 还原数据文件

       run{

    SET NEWNAME FOR DATAFILE 1 TO '/u01/app/oracle/oradata/orcl/system01.dbf';

    SET NEWNAME FOR DATAFILE 2 TO '/u01/app/oracle/oradata/orcl/sysaux01.dbf';

    SET NEWNAME FOR DATAFILE 3 TO '/u01/app/oracle/oradata/orcl/undotbs01.dbf';

    SET NEWNAME FOR DATAFILE 4 TO '/u01/app/oracle/oradata/orcl/users01.dbf';

    SET NEWNAME FOR DATAFILE 5 TO '/u01/app/oracle/oradata/orcl/example01.dbf';

    SET NEWNAME FOR DATAFILE 6 TO '/u01/app/oracle/oradata/orcl/test.dbf';

    RESTORE DATABASE;

    SWITCH DATAFILE ALL;

    RECOVER DATABASE;}

    --rename日志文件

    run{

    SQL "ALTER DATABASE RENAME FILE ''/u01/app/oracle/oradata/ENMOEDU/redo01.log'' TO 

    ''/u01/app/oracle/oradata/orcl/redo01.log'' ";

    SQL "ALTER DATABASE RENAME FILE ''/u01/app/oracle/oradata/ENMOEDU/redo02.log'' TO 

    ''/u01/app/oracle/oradata/orcl/redo02.log'' ";

    SQL "ALTER DATABASE RENAME FILE ''/u01/app/oracle/oradata/ENMOEDU/redo03.log'' TO 

    ''/u01/app/oracle/oradata/orcl/redo03.log'' ";

    }

    RMAN> alter database open resetlogs;

    8)暂时文件位置不正确

    SQL> select file_name from dba_temp_files;

    SQL>create temporary tablespace tempa tempfile 

    '/u01/app/oracle/oradata/orcl/tempa01.dbf' size 10m reuse autoextend on  maxsize  200m;

    SQL>alter database default temporary tablespace tempa;

    SQL>drop tablespace temp;

    SQL>select file_name from dba_temp_files;

    :这个測试改变了实例名


    --------------------------------------------------------------------------------------------------------------
    运行灾难恢复 :

    灾难意味着丢失了整个目标数据库、恢复文件夹数据库、全部当前控制文件、全部联机重做日志文件和全部參数文件。


    灾难恢复包含还原和恢复目标数据库。


    备份集的最低要求: 

    1.数据文件的备份
    2.
    对应的归档重做日志文件
    3.
    至少一个控制文件自己主动备份

    基本过程:
    1.
    还原server參数文件的自己主动备份。

    2.启动目标数据库实例。

    3.从自己主动备份还原控制文件。

    4.装载数据库。

    5.还原数据文件。

    6.恢复数据文件。

    7.使用 RESETLOGS 选项打开数据库。


     

  • 相关阅读:
    OpenCV人脸检测
    和机器学习和计算机视觉相关的数学(转载)
    操作系统课程设计 消息缓冲队列通信
    操作系统课程设计 线程的同步与互斥
    嵌入式考试Shell编程题
    Bash基础知识
    开始学习Shell/bash 加减乘运算
    RT-Thread Mini2440串口驱动
    Mini2440裸机RTC时钟驱动转化为字符串显示
    Mini2440裸机液晶屏TD35驱动
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6934603.html
Copyright © 2011-2022 走看看