zoukankan      html  css  js  c++  java
  • oracle之三rman 完全恢复

    rman 完全恢复

    8.1 recover 恢复:

    1)归档 : 完全恢复和不完全恢复
    2)非归档:只能恢复到最后一次备份状态(还原)

    8.2 完全恢复:

    ----先对数据库做一个备份(如果是archived模式就做热备)

    换一种形式,我们将下面的run{}写到linux的脚本中,叫做/u01/oradata/timran11g/myrman.rcv
    run {
    allocate channel c1 type disk;
    allocate channel c2 type disk;
    backup database format '/u01/myrman/%d_%s.bak';
    }

    然后以rman登录时执行这个脚本。语法如下:
    rman target / @/u01/oradata/timran11g/myrman.rcv

    可以监控RMAN备份,RMAN使用字符串rman 和通道名称填充v$session中client_info列,每个RMAN通道有一行信息, 备份结束后进程信息
    消失.也可以使用 set command id to 'XXX'做一个标识,再结合v$session观察通道和进程之间的对应关系。

    SQL>
    select sid,spid,client_info from v$process p join v$session s on (p.addr=s.paddr)
    where client_info like 'rman%';

    SID SPID CLIENT_INFO
    ---------- ------------------------ ----------------------------------------------------------------
    113 12992 rman channel=ORA_DISK_1
    111 12995 rman channel=ORA_DISK_2

    范例1:system表空间损坏,使用EM的DRA恢复

    1)在线删除system01.dbf,模拟关键表空间损坏,然后启动数据库,报system01.dbf读写错误

    [oracle@timran ~]$ rm /u01/oradata/timran11g/system01.dbf

    SQL> startup froce

    2) 使用EM恢复...


    范例2:恢复表空间(数据库open状态)。因非关键数据文件介质损坏,需要将其表空间恢复到一个新的物理位置。

    1)环境
    create table scott.t1(id int);
    insert into scott.t1 values(1);
    commit;

    2)模拟users表空间损坏,删除数据文件。

    [oracle@timran ~]$ rm /u01/oradata/timran11g/users01.dbf

    3) 清除db buffer ,查证访问数据文件失败
    SQL> alter system flush buffer_cache;

    SQL> alter system checkpoint; //实验中为防备rman登录不正常,可以尝试先做个检查点切换

    4)建个目录,假设介质损坏了,更换需要时间,先把数据文件恢复到一个新的目录下(不同的物理位置),

    [oracle@timran timran11g]$ mkdir /u01/oradata/timran11g/dir1

    5)使用RMAN恢复表空间

    RMAN>run{
    sql 'alter database datafile 4 offline';
    set newname for datafile 4 to '/u01/oradata/timran11g/dir1/users01.dbf';
    restore tablespace users;
    switch datafile 4;
    recover tablespace users;
    sql 'alter database datafile 4 online';
    }

    说明:
    set newname for 告诉RMAN还原数据文件的新位置在哪里。这个命令在restore前出现。
    switch datafile 更新controlfile,记录这个新位置。这个命令要在recover前出现。

    5)验证
    SQL> select * from scott.t1;

    ID
    ----------
    1

    6)待介质更换完成后,可以将表空间迁移回原来位置。

    SQL> alter tablespace users offline;

    [oracle@timran11g]mv /u01/oradata/timran11g/dir1/users01.dbf /u01/oradata/timran11g

    SQL>alter tablespace users rename datafile '/u01/oradata/timran11g/dir1/users01.dbf' to '/u01/oradata/timran11g/users01.dbf';

    SQL> alter tablespace users online;

    7)再验证

    SQL> select * from scott.t1;


    范例3:新建表空间(rman备份没有这个表空间),datafile被破坏

    1)环境
    SQL> create tablespace lx datafile '/u01/oradata/timran11g/lx01.dbf' size 5m;
    SQL> create table scott.t2(id int) tablespace lx;
    SQL> insert into scott.t2 values (1);
    SQL> commit;
    SQL> select * from scott.t2;

    ID
    ----------
    1

    2) 删除t2表所在的数据文件
    [oracle@timran ~]$rm /u01/oradata/timran11g/lx01.dbf

    3)清除db buffer,查证访问数据文件失败。

    SQL> alter system flush buffer_cache;

    4)利用rman 恢复数据文件(注意:rman备份里没有lx01.dbf)

    RMAN>run {
    sql 'alter database datafile 7 offline';
    restore datafile 7;
    recover datafile 7;
    sql 'alter database datafile 7 online';
    }


    5)验证
    SQL> select * from scott.t2;

    ID
    ----------
    1

    删除lx表空间,为了使数据库和RMAN备份一致

    SQL> drop tablespace lx including contents and datafiles;

  • 相关阅读:
    三星t5拆解
    一条 SQL 引发的事故,同事直接被开除!!
    Git 不能提交空目录?我也是醉了!
    Redis 6.0.8 紧急发布,请尽快升级!
    String.format() 图文详解,写得非常好!
    为什么 Redis 要比 Memcached 更火?
    Lambda 表达式入门,这篇够了!
    天啊,为什么我的 Redis 变慢了。。
    写出一手烂代码的 19 条准则!
    Redis 面试一定要知道的 3 个 问题!
  • 原文地址:https://www.cnblogs.com/jinxf/p/9171330.html
Copyright © 2011-2022 走看看