zoukankan      html  css  js  c++  java
  • oracle数据库rman异地恢复

    自己想做两组rac之间的data guard,由于datafile,controlfile,甚至是archivelog都是存放在asm上的,直接复制数据有点不现实,asm磁盘总归都是要用的,所以想从a库做rman全备份,然后把备份文件拷贝到b库上做rman恢复,初衷就是这么简单,结果却遇到了n多的折腾,无法实现,下面是我自己经过无数次测试得到的方法。

    oracle版本:11.2.0.0

    第一组RAC A PS:前面的hostname,冒号后面是instancename
    rac1:orcl1
    rac2:orcl2
    rac3:orcl3

    第二组RAC B
    rac8:orcl1
    rac9:orcl2

    我已经创建好了两组rac,并且在上面分别创建了orcl数据库,我在A组rac的数据库里做了一些操作,我希望这些新建的表数据什么的在RAC B上也同样出现,我现在要做的就是在rac1上使用rman做数据库全备份然后把备份文件拷贝到rac8上,然后做rman恢复,使得rac8是rac1上oracle数据库的一个拷贝

    1、rac1做rman全备份

    登录到rac1上,使用rman全备份数据库,如下:
    [oracle@rac1 ~]$ rman target /
    RMAN> backup database format ‘/u01/app/oracle/backup/orcl01.dbf’;
    备份成功了会告诉我:
    数据文件备份文件为/u01/app/oracle/backup/orcl01.dbf’
    controlfile,spfile备份文件为/u01/app/oracle/backup/c-1351646173-20130822-00
    注意:我这边加了format参数备份成我指定的文件路径和名称,原因就是在异地恢复的时候,rman读取备份文件的目录和需要和备份时的目录一致,如果这边不使用format,备份到默认的asm磁盘上,则备份文件想要复制到异地的asm磁盘上有一定的难度,比如我遇到的问题就是默认备份到asm上的文件名称参数很长无法复制到异地的asm磁盘上

    2、从rac1上拷贝备份文件到rac8

    需要拷贝的文件如上:
    数据文件备份文件为/u01/app/oracle/backup/orcl01.dbf’
    controlfile,spfile备份文件为/u01/app/oracle/backup/c-1351646173-20130822-00
    拷贝到rac8上之后仍然放在相同的路径下,设置具有相同的权限,一般是oracle:oinstall权限

    3、rac8上做rman恢复

    我们这边只需要恢复controlfile和datafile。

    按理来说备份恢复应该使用一样的spfile,但是我们看到A组(www.111cn.net)rac是3个节点,B组rac是2个节点,我这里还要说的是这两组rac server的配置是有差异的,spfile中定义了节点的信息,还定义了相关的初始化信息,A组RAC的这些信息在B组上并不适用的,所以我这里只恢复controlfile和datafile。

    网上看到说异地rman恢复需要设置异地的dbid为本地的值,折腾了好久,发现这个是不需要的,dbid已经定义在controlfile当中,只要恢复了controlfile,dbid自然是相同的了。

    恢复controlfile需要数据库置于nomount状态
    [oracle@rac8 ~]$ uniread sqlplus ‘/ as sysdba’
    SQL> shutdown immediate;
    SQL> shutdown nomount;
    [oracle@rac8 ~]$ uniread rman target /
    RMAN> restore controlfile from ‘/u01/app/oracle/backup/c-1351646173-20130822-00′;
    完了会告诉你恢复成功

    恢复数据文件需要数据库置于mount状态
    [oracle@rac8 ~]$ uniread sqlplus ‘/ as sysdba’
    SQL> shutdown immediate;
    SQL> shutdown mount;
    注意:启动到mount的状态可能需要加参数resetlogs
    [oracle@rac8 ~]$ uniread rman target /
    RMAN> list backup of database;
    可以看到备份文件信息
    RMAN> restore database;
    RMAN> recover database;
    这样就恢复结束了

    4、rac8上启动oracle到open状态

    单独讲这个是有意义的,恢复之后,因为rac8上的数据字典等信息已经改变,所有他会报错ORA-39700: database must be opened with UPGRADE option
    那我们就需要启动到升级模式了
    SQL> startup UPGRADE;
    报错:ORA-39701: database must be mounted EXCLUSIVE for UPGRADE or DOWNGRADE
    这个报错的解决方法是要禁掉集群参数
    SQL> STARTUP NOMOUNT;
    SQL> ALTER SYSTEM SET CLUSTER_DATABASE=FALSE scope=spfile ;
    SQL> SHUTDOWN IMMEDIATE;
    SQL> startup UPGRADE;
    这样就启动成功了,再有就是记得把集群参数开启。
    from:http://www.111cn.net/database/Oracle/50477.htm

  • 相关阅读:
    使用log4cplus时遇到的链接错误:无法解析的外部符号 "public: static class log4cplus::Logger __cdecl log4cplus::Logger::getInstance(class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,
    linux中free命令内存分析
    ImportError: libmysqlclient_r.so.16: cannot open shared object file: No such file or directory
    error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2
    创建预编译头 Debug 正常 Release Link Error:预编译头已存在,使用第一个 PCH
    C++定义字符数组
    客户端数据持久化解决方案: localStorage
    转:JavaScript函数式编程(三)
    转: JavaScript函数式编程(二)
    转:JavaScript函数式编程(一)
  • 原文地址:https://www.cnblogs.com/alibai/p/4055223.html
Copyright © 2011-2022 走看看