zoukankan      html  css  js  c++  java
  • RMAN还原与恢复2(RMAN Incomplete Recovery)

    ---恢复内容开始---

    一.RMAN实现不完全恢复

    步骤:

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

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

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

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

    e.使用resetlogs打开数据库;

    f.全备数据库;

    演示RMAN基于until time的例子:

     1 SQL> insert into user1.t select 9,'polestar' from dual;                    
     2 1 row created.                    
     3 SQL> commit;                                                --注意commit是将日志缓冲内容写入到日志文件
     4 
     5 -bash-3.00$ strings redo03.log |grep polestar               --查看联机日志文件中不存在刚刚插入的记录
     6 polestar
     7 -bash-3.00$ 
     8                         
     9 SQL> alter system switch logfile;                        
    10 System altered.            
    11 SQL>                         
    12 
    13 --全备
    14 RMAN> run{
    15 2> allocate channel ch1 type disk;
    16 3> allocate channel ch2 type disk;
    17 4> backup as compressed backupset database plus archivelog delete input
    18 5> format '/tmp/backup/Whole_lg_%U'
    19 6> tag='Wholebak_Pluslog';
    20 7> release channel ch1;
    21 8> release channel ch2;
    22 9> }
    23 
    24 
    25 --系统时间
    26 SQL> select to_char(sysdate,'YYYY-MM-DD  HH24:MI:SS') as TO_CHAR  from dual;
    27 
    28 TO_CHAR
    29 --------------------
    30 2013-01-26  17:50:13
    31 
    32 --删除表
    33 SQL> drop table user1.t;
    34 
    35 Table dropped.
    36 
    37 SQL> 
    38 
    39 --将数据库打开到mount状态
    40 SQL> startup mount
    41 
    42 --恢复
    43 RMAN> run{
    44 2> allocate channel ch1 type disk;
    45 3> allocate channel ch2 type disk;
    46 4> set until time "to_date('2013-01-26 17:50:13','yyyy-mm-dd hh24:mi:ss')";   
    47 5> restore database;
    48 6> recover database;
    49 7> alter database open resetlogs;
    50 8> release channel ch1;
    51 9> release channel ch2;
    52 10> }
    53 
    54 --检验恢复结果
    55 SQL> select * from user1.t order by 1;
    56 
    57         ID NAME
    58 ---------- ----------------
    59          0 oracle
    60          1 oracle
    61          2 oracle
    62          3 oracle
    63          4 oracle
    64          5 oracle
    65          6 oracle
    66          7 myrman
    67          8 inspur
    68          9 polestar
    69 
    70 10 rows selected.
    71 
    72 SQL> 

    二. SPFILE文件丢失的恢复

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

      SPFILE的自动备份是随着控制文件的备份一起被完成的,因此可以通过自动备份控制文件来实现自动备份SPFILE文件的目的。其次,在备份系统表空间时将引发控制文件的自动备份,而不论是否设置自动备份参数为ON,此时同样也备份SPFILE文件。

    SPFILE文件恢复步骤:

    a. startup nomount [force];

    b. set dbid=dbid_no;

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

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

    e. set dbid=dbid_no;

    f. startup;

     1 --下面设定控制文件的自动备份以及设置其备份路径(注意要预先知道目标数据库的DBID,此次演示的DBID为)
     2 RMAN> CONFIGURE CONTROLFILE AUTOBACKUP on;
     3 
     4 new RMAN configuration parameters:
     5 CONFIGURE CONTROLFILE AUTOBACKUP ON;
     6 new RMAN configuration parameters are successfully stored
     7 
     8 RMAN> configure controlfile autobackup format for device type disk to '/tmp/backup/ctl_%d_%F';
     9 
    10 new RMAN configuration parameters:
    11 CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/tmp/backup/ctl_%d_%F';
    12 new RMAN configuration parameters are successfully stored
    13 
    14 RMAN> 
    15 
    16 SQL> alter tablespace users add datafile '/u01/oradata/sunbak/users03.dbf' size 5m 
    17 
    18 -bash-3.00$ ls /tmp/backup           --执行上一条alter tablespace users add datafile 语句将引发控制文件的自动备份
    19 ctl_SUN_c-1913551800-20130222-01
    20 -bash-3.00$    
    21 
    22 
    23 --关机
    24 SQL> shutdown immediate;
    25 
    26 --模拟损坏spfile文件
    27 -bash-3.00$ mv spfilesun.ora spfilesun.ora.bak   --将原来的spfile文件重命名
    28 
    29 --恢复
    30 [oracle@oradb ~]$ rman target / nocatalog
    31 
    32 RMAN> startup nomount force;
    33 
    34 RMAN> set dbid=1913551800;
    35 
    36 RMAN> restore spfile from autobackup;   --此处并没有找到文件路径,按Oracle联机文档,在nomount状态应该可以找到
    37 RMAN-06172: no autobackup found or specified handle is not a valid copy or piece
    38 
    39 RMAN> restore spfile from '/u01/bk/rmbk/auto_ctl_ORCL_c-1263182651-20101124-00';    --手动指定路径
    40 RMAN> startup force; 
    41           

    三.控制文件的恢复处理

      控制文件中描述了数据库的相关物理信息,如创建时间、DBID、数据文件、日志文件等相关信息,因此一旦控制文件丢失数据库将不能启动,鉴于其重要性,控制文件的备份与恢复将单独列出。

     1 --将原来的控制文件重命名
     2 -bash-3.00$ mv control01.ctl.bak control01.ctl    
     3 -bash-3.00$ mv control02.ctl.bak control02.ctl    
     4 -bash-3.00$ mv control03.ctl.bak control03.ctl          
     5 
     6 --Nocatalog状态下控制文件的恢复同Spfile文件及其相似(详情请查文档)
     7 [oracle@oradb ~]$ rman target / nocatalog
     8 
     9 RMAN> startup nomount force;
    10 
    11 RMAN> set dbid=1913551800;
    12 
    13 RMAN> RESTORE CONTROLFILE FROM '/tmp/backup/ctl_SUN_c-1913551800-20130222-01';                    
    14 RMAN>  ALTER DATABASE MOUNT;
    15 
    16 --此时参考:用户管理的完全恢复6:控制文件损坏(控制文件前后内容改变)
    17 SQL> recover database using backup controlfile;
    18 ORA-01507: database not mounted
    19 
    20 SQL> recover database using backup controlfile;
    21 ORA-00279: change 831957 generated at 02/22/2013 20:46:02 needed for thread 1
    22 ORA-00289: suggestion : /u01/admin/sun/arch/1_2_805747372.dbf
    23 ORA-00280: change 831957 for thread 1 is in sequence #2
    24 
    25 Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
    26 /u01/oradata/sunbak/redo01.log
    27 Log applied.
    28 Media recovery complete.
    29 SQL> alter database open resetlogs;
    30 
    31 Database altered.
    32 
    33 SQL> 

    ---恢复内容结束---

  • 相关阅读:
    求树的某一层的节点最多
    快排 PAT 1101
    PAT 1098
    PAt 1099
    多项式求和
    pat 1100
    getline 函数
    数字的标准写法
    线性回归
    HTTP 中状态码 302的使用场景
  • 原文地址:https://www.cnblogs.com/polestar/p/2923218.html
Copyright © 2011-2022 走看看