zoukankan      html  css  js  c++  java
  • Rman_异地、跨平台、跨版本的恢复总结及案例

    http://blog.itpub.net/30126024/viewspace-2122858/

    结论:

    1. Rman可以跨平台,网上有资料基于ID 413586.1metalink上有),但是还是少用rman来进行跨平台操作。

    2. Rman可以跨版本,但是一般只能从低到高,且要执行catupgrd.sql。不能从高到低,唯一成功的是低版本升级到高版本后备份可以恢复到同样的低版本

     

     

    跨平台的实例:

    Solaris上的9iDB通过rman备份后恢复到RHEL5.4上的11.2.0.1

     

    跨版本的实例:

    RMAN_11.2.0.1异机恢复到11.2.0.4

    RMAN_11.2.0.1升级到11.2.0.4DB异机恢复到11.2.0.1版本的DB

    RMAN_11.2.0.1升级到11.2.0.4DB异机恢复到12.1.0.2

     

     

     

     

     

    RMAN_备份在异地恢复

    A的整库备份在B还原

    以下相当于到在一个只安装了oracle软件的B服务器上进行的恢复,B没有任何关于A库的数据,也发现在整个过程中都没有去手动创建B库的在线日志,因为B库在线日志会在alter database open resetlogs的时候自动创建,只要B服务器的在线日志路径和A库一样即可(如果B服务器已经安装了oracle软件并创建了DB,则第五、六步可以合并成一步即目标库根据spfile创建pfile,并修改pfile中的db_name为源库DB名称,并在目标库创建源库datafileonline redo log对应的目录

     

    1.  A库执行backup database format ‘/backup/rman/full_%U.bak’;

        A/backup/rman会出现两个以full命名的文件,一个是数据库备份,一个参数文件和控制的备份

    2.  A库再执行alter system archive log currentalter system switch logfile

    A的归档目录下生成刚刚最新的归档日志

    以上两步可接变成一步如下

    Rman>backup database format '/u01/app/rman/full%U.bak' plus archivelog format '/u01/app/rman/arch%U.bak'

    3.  A/backup/rman下的两个文件和刚刚最新的归档日志拷贝到B库一样的目录

    4.  修改目标库的.bash_profileORACLE_SID=源库的sid,并source应用一下

    5.  B库执行echo $ORACLE_SID,等于Asid的情况下再执行

    rman target /

    rman>startup nomount

    rman>restore spfile to pfile '$ORACLE_HOME目录/dbs/initASID.ora' from'/backup/rman/full_09l9esg4_1_1';

    6.  修改刚刚还原出来的pfile,并根据pfile文件创建诸如dumparchivelogdatafileonline redo log等路径,如B库创建了和A库一样的控制文件路径、数据文件路径、日志文件路径

    7.  Bshutdown abortstartup nomount

    8.  Brman 恢复操作

    rman>restore controlfile from'/backup/rman/full_09l9esg4_1_1';

    rman>alter database mount;

    rman>restore database;

    rman>recover database until sequence 主库拷贝过来的那个归档日志的sequence+1

    以上如果使用归档日志的备份包需要在recover database之前执行如下两句(需要catalog 最后一个归档日志的备份包,为什么需要catalog是因为它在controlfile备份包之后生成的。XX只需要from最大的那个sequence-2就可以了,不需要源库和目标库的archivelog目录一致,只要目标库有archivelog目录就可以了,会自动restore到目标库的archivelog目录)

    rman>catalog backuppiece '';

    rman>restore archivelog from sequence XX;

    9.  Bopen resetlogs

    Sqlplus>alter database open resetlogs

    心得:

    8步,如果没有了A库最新的归档日志,restore database后直接recover database,会报错说找不到归档日志,所以进行整库备份后,必须手动归档,并把归档日志也拷贝到异地

    8步,万一不小心在mount状态时修改了B的归档路径,导致A库和B库的归档日志路径不一样,则把A库的归档日志拷贝到B库的实际归档路径,即可恢复,不要重新创建一个归档路径和A库一样,再把归档日志拷贝到这个新建的归档路径,一切以B库的archive log list中的路径为准

     

     

    20150812RMAN异地还原的操作的例子

    1.  源库A执行如下

    Rman>delete noprompt archivelog until time 'sysdate-1';

    Rman>backup database format '/orabackup/rman_backup/data%U.bak' plus archivelog format '/orabackup/rman_backup/arch%U.bak'

    2.  把源库的备份包拷贝至目标库B(并非/orabackup/rman_backup/,所以后面第8步要catalog数据文件备份包和归档日志文件备份包)

    3.  B库的linux下执行ORACLE_SID=A库的sid或修改.bash_profileORACLE_SID=A库的sidsource .bash_profile

    4.  B库关闭DB并确认spfile已经删除(顺便删除所有datafileredofilearchivelog

    5.  B库执行echo $ORACLE_SID,等于Asid的情况下再执行

    rman target /

    rman>startup nomount

    rman>restore spfile to pfile '$ORACLE_HOME目录/dbs/initASID.ora' from'/backup/rman/data_09l9esg4_1_1';

    6.  修改刚刚还原出来的pfile,controldumparchivelog等路径

    7.  Bshutdown abortstartup nomount

    8.  Brman 恢复操作

    rman>restore controlfile from'/backup/rman/full_09l9esg4_1_1';

    rman>alter database mount;

    rman> catalog backuppiece '/backup/rman/data0bqedd5a_1_1.bak';

    RMAN>run{

    set newname for datafile 1 to ' /datafile/system01.dbf';

    set newname for datafile 2 to ' /datafile/sysaux01.dbf';

    set newname for datafile 3 to ' /datafile/undotbs01.dbf';

    set newname for datafile 4 to ' /datafile/users01.dbf';

    set newname for tempfile 1 to '/datafile/temp01.dbf';

    restore database;

    switch datafile all;

    switch tempfile all;

    }

    rman> catalog backuppiece '/backup/rman/arch0bqedd5a_1_1.bak';

    rman> catalog backuppiece '/backup/rman/arch0bqedd5a_1_1.bak';

    RMAN> recover database;

    根据上面报错提示再执行

    RMAN> recover database until sequence 3160;

    9.  退出rman进入[oracle@localhost dbs]$ sqlplus / as sydba

    10.SQL> alter database open resetlogs;

    如果报错ORA-00344: unable to re-create online log '/oradata/TESTIO/redo01.log'

    select * from v$logfile;后再执行

    SQL> alter database rename file '/oradata/TESTIO/redo01.log' to '/u01/app/oracle/oradata/redo01.log';

    SQL> alter database rename file '/oradata/TESTIO/redo02.log' to '/u01/app/oracle/oradata/redo02.log';

    SQL>  alter database rename file '/oradata/TESTIO/redo03.log' to '/u01/app/oracle/oradata/redo03.log';

    SQL> alter database open resetlogs;

     

    以上需要了解的是

    set newname for datafile其中是包含datafileundofile

    set newname for tempfile只包含tempfile

    所以一开始需要先在源库执行

    select file_id,file_name from dba_data_files order by file_id

    select file_id,file_name from dba_temp_files order by file_id

     

    当然如果前面set newname for tempfile导致后面报错

     

    ALTER TABLESPACE TEMP drop TEMPFILE '/oradata/TESTIO/temp01.dbf';

    ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/temp01.dbf' size 500M autoextend on next 50M maxsize 30G;

     

     

     

     

     

     

    RMAN_11.2.0.1异机恢复到直接安装11.2.0.4的版本

    RMAN_11.2.0.1异机恢复到11.2.0.1升级后的11.2.0.4版本

    DB信息:DB_NAMEDB521102,版本为直接安装的11.2.0.1

    目标DB信息:DB_NAMEDB11204,版本为直接安装的11.2.0.4,非11.2.0.1升级的版本

    目标DB信息:DB_NAMEDB11204,版本为11.2.0.1升级到直接安装的11.2.0.4的版本

     

    1.  DB执行

    Rman>backup database format '/u01/app/rman/full%U.bak' plus archivelog format '/u01/app/rman/arch%U.bak' delete input;

    2.  源库把备份后的四个备份包scp到目标库/u01/app/rman/目录

    3.  目标库根据spfile创建pfile,并修改pfile中的db_nameDB521102,并在目标库创建源库datafileonline redo log对应的目录

    4.  修改目标库的.bash_profileORACLE_SID=源库的sid,并source应用一下

    5.  目标库按顺序执行如下语句(下面第5个语句,需要catalog 最后一个归档日志的备份包,为什么需要catalog是因为它在controlfile备份包之后生成的。下面第6个语句,只需要from最大的那个sequence-2就可以了,不需要源库和目标库的archivelog目录一致,只要目标库有archivelog目录就可以了,会自动restore到目标库的archivelog目录)

    sql>startup nomount pfile=’’

    rman>restore controlfile from ’/u01/app/rman/fullXX.bak’

    rman>alter database mount;

    rman>restore database;

    rman>catalog backuppiece ’/u01/app/rman/52arch04rc7tru_1_1’

    rman>restore archivelog from sequence XX;

    rman>recover database until sequence 最大的sequence+1;

    sql>alter database open resetlogs;

    出现如下报错

    ORA-01092: ORACLE instance terminated. Disconnection forced

    ORA-00704: bootstrap process failure

    ORA-39700: database must be opened with UPGRADE option

    6.  解决方法,目标库重新登陆按如下执行(执行catupgrd.sql完后实例会自动shutdown,之后直接startup的过程不再需要resetlogs了)

    sql>startup upgrade;

    SQL>@$ORACLE_HOME/rdbms/admin/catupgrd.sql;

    sql> startup

     

     

     

     

     

     

     

     

     

    RMAN_11.2.0.4异机恢复到11.2.0.1

    DB信息:DB_NAMEDB11204,版本为直接安装的11.2.0.4

    目标DB信息:DB_NAMEORCL,版本为11.2.0.1

     

    1.  DB执行

    Rman>backup database format '/u01/app/rman/full%U.bak' plus archivelog format '/u01/app/rman/arch%U.bak' delete input;

    2.  源库把备份后的四个备份包scp到目标库/u01/app/rman/目录

    3.  目标库根据spfile创建pfile,并修改pfile中的db_nameDB11204,并在目标库创建源库datafileonline redo log对应的目录

    4.  修改目标库的.bash_profileORACLE_SID=源库的sid,并source应用一下

    5.  目标库按顺序执行如下语句

    sql>startup nomount pfile=’’

    rman>restore controlfile from ’/u01/app/rman/fullXX.bak’

    直接报错如下(pfile中的由*.compatible='11.2.0.0.0'改成*.compatible='11.2.0.4.0'shutdown abortstartup nomount pfile的过程中则报错ORA-00401: the value for parameter compatible is not supported by this releasepfile中的由*.compatible改成啥都没用)

     

     

     

     

     

     

     

     

     

    RMAN_11.2.0.1升级到11.2.0.4DB异机恢复到11.2.0.1版本的DB

    DB信息:DB_NAMEORCL,由11.2.0.1升级到了11.2.0.4

    目标DB信息:DB_NAMETESTDB,版本为11.2.0.1

     

    1.  DB执行

    Rman>backup database format '/u01/app/rman/full%U.bak' plus archivelog format '/u01/app/rman/arch%U.bak' delete input;

    2.  源库把备份后的四个备份包scp到目标库/u01/app/rman/目录

    3.  目标库根据spfile创建pfile,并修改pfile中的db_nameORCL,并在目标库创建源库datafileonline redo log对应的目录

    4.  修改目标库的.bash_profileORACLE_SID=源库的sid,并source应用一下

    5.  目标库按顺序执行如下语句(下面第5个语句,需要catalog 最后一个归档日志的备份包,为什么需要catalog是因为它在controlfile备份包之后生成的。下面第6个语句,只需要from最大的那个sequence-2就可以了,不需要源库和目标库的archivelog目录一致,只要目标库有archivelog目录就可以了,会自动restore到目标库的archivelog目录)

    sql>startup nomount pfile=’’

    rman>restore controlfile from ’/u01/app/rman/fullXX.bak’

    rman>alter database mount;

    rman>restore database;

    rman>catalog backuppiece ’/u01/app/rman/52arch04rc7tru_1_1’;

    rman>restore archivelog from sequence XX;

    rman>recover database until sequence 最大的sequence+1;

    sql>alter database open resetlogs;

    出现如下报错

    ORA-01092: ORACLE instance terminated. Disconnection forced

    ORA-00704: bootstrap process failure

    ORA-39700: database must be opened with UPGRADE option

    6.  解决方法,目标库重新登陆按如下执行(奇怪的是下面第2个语句执行过程中遇到问题,不像正常升级一样会shutdown数据库,而且以下第四个语句也不用再resetlogs了)

    sql>startup upgrade;

    SQL> @$/rdbms/admin/catupgrd.sql;

    sql> shutdown immediate;

    sql> startup



    RMAN_11.2.0.1异机恢复到直接安装12.1.0.2的版本

    DB信息:DB_NAMEDB521102,版本为直接安装的11.2.0.1

    目标DB信息:DB_NAMEDB12c,版本为直接安装的12.1.0.2

    前面restore spfile to pfile,并修改pfile*.compatible='12.1.0.0.0'

    Startup nomount

    Restore controlfile

    Alter database mount

    Restore database

    Recover database until sequence都是正常的,alter database open resetlogs开始出现问题了,不知道什么原因,难道真是11GR2不能异机恢复到12CR1?

    RMAN_11.2.0.1升级到11.2.0.4的异机恢复到直接安装12.1.0.2的版本

    DB信息:DB_NAMEDB521102,版本为直接安装的11.2.0.1,再升级到11.2.0.4

    目标DB信息:DB_NAMEDB12c,版本为直接安装的12.1.0.2

     

     

    1.  DB执行

    Rman>backup database format '/u01/app/rman/full%U.bak' plus archivelog format '/u01/app/rman/arch%U.bak' delete input;

    2.  源库把备份后的四个备份包scp到目标库/u01/app/rman/目录

    3.  目标库根据spfile创建pfile,并修改pfile中的db_nameDB521102,并在目标库创建源库datafileonline redo log对应的目录

    rman>restore spfile to pfile 'XX/initDB521102.ora' from'/backup/rman/full_09l9esg4_1_1';

    并修改pfile*.compatible='12.1.0.0.0'

    4.  修改目标库的.bash_profileORACLE_SID=源库的sid,并source应用一下

    5.  目标库按顺序执行如下语句(下面第5个语句,需要catalog 最后一个归档日志的备份包,为什么需要catalog是因为它在controlfile备份包之后生成的。下面第6个语句,只需要from最大的那个sequence-2就可以了,不需要源库和目标库的archivelog目录一致,只要目标库有archivelog目录就可以了,会自动restore到目标库的archivelog目录)

    sql>startup nomount pfile=’’

    rman>restore controlfile from ’/u01/app/rman/fullXX.bak’

    rman>alter database mount;

    rman>restore database;

    rman>catalog backuppiece ’/u01/app/rman/52arch04rc7tru_1_1’

    rman>restore archivelog from sequence XX;

    rman>recover database until sequence 最大的sequence+1;

    sql>alter database open resetlogs;

    出现如下报错

    alter database open resetlogs

    *

    ERROR at line 1:

    ORA-01092: ORACLE instance terminated. Disconnection forced

    ORA-00704: bootstrap process failure

    ORA-00604: error occurred at recursive SQL level 2

    ORA-00904: "I"."UNUSABLEBEGINNING#": invalid identifier

    Process ID: 11222

    Session ID: 188 Serial number: 65058

    6.  解决方法,目标库重新登陆按如下执行(执行/u01/app/oracle/product/12c/db_1/perl/bin/perl catctl.pl -n 4 catup完后实例会自动shutdown,之后直接startup的过程不再需要resetlogs了)

    sql>startup upgrade;

    cd /u01/app/oracle/product/12c/db_1/rdbms/admin/

    /u01/app/oracle/product/12c/db_1/perl/bin/perl catctl.pl -n 4 catupgrd.sql

    sql> startup

    All for u
  • 相关阅读:
    重启停止的作业 bg和fg
    shell nohup 让脚本一直以后台模式运行到结束
    shell jobs查看作业
    shell 移除信号捕获
    shell 多进程运行程序
    shell 脚本后台运行
    python3 生产者消费者
    python3 生产者消费者(守护线程)
    python3 进程线程协程 并发查找列表
    python3 线程间通信
  • 原文地址:https://www.cnblogs.com/ayumie/p/7738285.html
Copyright © 2011-2022 走看看