zoukankan      html  css  js  c++  java
  • rman全库恢复到不同主机,不同实例名,不同目录下

    一、配置目标主机的ip、hostname及与源端主机的连通性

    1、配置目标主机IP

    使用图形界面配置IP:

    administration----network---修改IP(指定静态IP)

    deactivate网卡---activate网卡(重启网卡配置才能生效)
    或者使用root用户执行:service network restart 重启网卡

    2、配置主机名

    1. root用户执行:hostname hostNameValue
    2. vi  /etc/sysconfig/network

    修改:HOSTNAME=edsir4p1.us.oracle.com

    1. 修改/etc/hosts文件中IP到主机名的映射

    127.0.0.1       localhost.localdomain   localhost

    192.168.33.138  edsir4p1.us.oracle.com  edsir4p1

    192.168.33.137  edsir1p8.us.oracle.com  edsir1p8

    3、测试到源端主机的连通性

    1. ping edsir1p8.us.oracle.com

    或者

    ping 192.168.33.137

    漫兮网(http://www.manxinet.com)】

    二、规划目标机上备份集的保存路径

    因为控制文件中记录的备份集的保存路径是记录的备份集在源端(edsir1p8)主机上的  路径,如果scp到目标主机后和原来备份集的保存路径不一致,那么控制文件中记录的         所有的备份集的元数据信息都将失效,必须执行:catalog start with         '/backupset_path'

    让控制文件自动识别备份集的元数据信息(路径、备份片名等)。

    现在在目标端设置备份集的存储路径和源端一致,这样就避免了需要控制文件自动识别         备份集元数据的过程,避免备份集识别不完全(漏掉备份片)

    目标端备份集规划路径如下:

    full备份:

    database:/u01/app/oracle/oradata/backupset/prod4/full/database

    controlfile: /u01/app/oracle/oradata/backupset/prod4/full/controlfile

    arch     : /u01/app/oracle/oradata/backupset/prod4/full/arch

    controfile备份

    controlfile:/u01/app/oracle/oradata/backupset/prod4/controlfile

    arch备份:

    arch     :/u01/app/oracle/oradata/backupset/prod4/arch

    自动备份控制文件和spfile:

    controlfile+spfile:

    /u01/app/oracle/oradata/autobackup/prod4

    三、规格恢复后数据库的数据文件保存路径

    恢复的新instance名为:CPROD4

    全库恢复后的数据文件保存路径:

    datafile:/u01/app/oracle/oradata/CPROD4/datafile

    redo   :/u01/app/oracle/oradata/CPROD4/onlinelog

    tempfile:/u01/app/oracle/oradata/CPROD4/tempfile

    controlfile:/u01/app/oracle/oradata/CPROD4/controlfile

    arch     :/u01/app/oracle/oradata/CPROD4/arch

    漫兮网(http://www.manxinet.com)】

    四、全库恢复

    1、在源端数据库做全库备份和归档备份

    (实际试验前要清空所有备份集delete backup ,但生产上严禁执行该操作)

    a.全库备份,在edsir1p8上执行脚本:rman_prod4_full_01.sh

    b.归档备份,在edsir1p8上执行脚本:rman_prod4_arch_01.sh

    c.备份完成后要查看是否在备份期间生成了新的归档日志。

    注:如果在备份期间生成了新的归档日志,并且已经写入到了控制文件的

    v$archived_log视图中,但是在备份归档时却没有备份,然后在控制文件自动                               备份时将当前控制文件备份了,即备份的控制文件中记录了没有备份的归档日                       志,这样再后续确定恢复截至到的scn号时就会报错,找不到对应的归档日志                            (备份期间产生的归档日志没有被备份走)

    所以在后续确定恢复截至到的scn号时一定要先确定备份集中是否有对应SCN                    号的归档日志,不能仅通过v$archived_log视图就简单的确定恢复截至SCN

    2、scp或其他方式导入到目标主机

    a.传输数据文件

    进入到源端edsir1p8的/u01/app/oracle/oradata/backupset/prod4/full/database                       目录下

    scp * 192.168.33.138: /u01/app/oracle/oradata/backupset/prod4/full/database

    b.传输全备的归档:

    进入到源端edsir1p8的/u01/app/oracle/oradata/backupset/prod4/full/arch

    scp * 192.168.33.138: /u01/app/oracle/oradata/backupset/prod4/full/arch

    c.后续传输所有备份集:full备份的控制文件、归档日志、单独备份的控制文件、                       自动备份的控制文件

    注:scp时的“*”表示传输当前路径下的所有文件到目标端

    3、spfile文件的恢复

    a.使用rman自带的参数文件启动到nomount状态

    (i)在138上切换环境变量目的是切换到正确的ORACLE_HOME下可以使用                                          bin目录下的rman

    . oraenv

    ORACLE_SID=PROD1

    (ii)设置ORACLE_SID恢复该SID对应的spfile文件:spfileSID.ora

    export  ORACLE_SID=CPROD4

    (iii)启动rman到nomount状态

    rman target /

    RMAN > startup nomount

    b.恢复spfile

    (i)restore spfile文件

    RMAN >  restore  spfile  from

    '/u01/app/oracle/oradata/autobackup/prod4/ctl_c-1612213667-20160305-05';                               执行过程中会报如下错误

    错误一截图:

    rmanrestore1

    reason:源端数据库开启了share mode模式的连接,修改了spfile中的六个参                     数,现在使用spfile时检测spfile中保存的系统参数发现在目标端没有,因此                              报以上错误。

    PROD4_1526是shared模式的访问连接。并且注册到了local_listener上,但是                    在目标端138上没有对应的监听和tns别名,需要创建

    solution:

    从137上复制如下监听内容到138的listener.ora文件中

    SID_LIST_PROD4_1526 =

    (SID_LIST =

    (SID_DESC =

    (GLOBAL_DBNAME = PROD4.us.oracle.com)

    (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)

    (SID_NAME = CPROD4)

    )

    )

    PROD4_1526 =

    (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = edsir4p1.us.oracle.com)(PORT = 1526))

    )

    ADR_BASE_PROD4_1526 = /u01/app/oracle

    从137上复制如下TNS别名内容到138的tnsnames.ora文件中

    PROD4_1526 =

    (DESCRIPTION =

    (ADDRESS_LIST =

    (ADDRESS = (PROTOCOL = TCP)(HOST = edsir4p1.us.oracle.com)(PORT = 1526))

    )

    (CONNECT_DATA =

    (SERVER = SHARED)

    (SERVICE_NAME = PROD4.us.oracle.com)

    )

    )

    错误二截图:

    rmanrestore2

    再次试图打开数据库到nomount状态:

    SQL >  startup nomouont

    会报以上错误

    reason:

    源端137上开启了数据库审计功能需要创建audit目录,但是138上没有对应                      的audit目录

    solution:

    在137上查看参数:show parameter audit

    audit_file_dest    string          /u01/app/oracle/admin/PROD4/adump

    在138上创建该目录:mkdir -p /u01/app/oracle/admin/PROD4/adump

    或者:

    在目标端138上如果数据库能启动到nomount状态,可以在138端查看参数

    audit_file_dest,然后创建该目录

    c.使用恢复的spfile重新打开数据库到nomount状态

    shutdown immediate

    startup nomount

    4、controlfile文件的恢复

    a.先修改controlfile文件的路径

    因为在137上controlfile是存储在+DATA磁盘组上的,138上没有ASM实例,故               不能成功restore controlfile。

    执行如下指令:

    alter system set control_files=' /u01/app/oracle/oradata/CPROD4/controlfile/                                       control01.ctl' scope=spfile;

    重启数据库,重新加载spfile:

    shutdown immediate

    startup nomount

    b.controlfile的恢复

    restore controlfile from

    '/u01/app/oracle/oradata/autobackup/prod4/ctl_c-1612213667-20160305-05';

    1. 修改数据库到mount状态

    RMAN > alter database mount;

    5、database的恢复

    a.确定能恢复到的最大SCN

    (i)从v$archived_log视图中查询最后一个归档的结束SCN值

    select name,RESETLOGS_CHANGE#,RESETLOGS_ID,FIRST_CHANGE#,NEXT_CHANGE# from v$archived_log;

    rmanrestore3

    截图中是恢复后新产生的归档日志,不是原来恢复前控制文件中记录的归档日志的信息。

    原来控制文件中记录的归档的最后一个scn值为:2460383

    (ii)在备份集中确认真正存在对应 该SCN值的备份片

    list backup of archivelog all;

    rmanrestore4

    在对应路径

    /u01/app/oracle/oradata/backupset/prod4/arch/arch_PROD4_905667093_729_1.bak下确认备份片是否真正存储(注意是确认scp的过程中是否把备份片正确的传输过来了)

    同时在显示的备份集列表上观察相关的归档日志备份是否连续。

    (iii)在备份片确认真正存在的情况下,再次确认incarnation的值,目的是确认在recover的过程中是否会去一直追加2460383归档对应的resetlog_scn的该批的归档日志

    从v$archived_log视图中查询2460383归档对应的RESETLOGS_CHANGE#列值为:2167043

    从rman中: RMAN > list incarnation

    1       1       PROD4    1612213667       CURRENT 2167043    02-MAR-16

    结果显示当前的incarnation对应的Reset SCN的值为2167043

    incarnation. Reset SCN =v$archived_log.maxSCN. RESETLOGS_CHANGE#

    满足以上条件就说明:在recover的过程中会去寻找和最大SCN对应相同的       RESETLOGS_CHANGE#值的那一批归档日志,直到追加完最大SCN号的归档日志。
    如果不满足以上条件说明:在recover的过程中不会去寻找和最大SCN号的归档日志的

    RESETLOGS_CHANGE#列值对应相等的那一批归档。这时候如果是简单为了搭建测试环    境不考虑丢失数据的多少,可以在v$archived_log视图中寻找合适的SCN值,直到可以       追平v$datafile_header视图中的所有文件头的CHECKPOINT_CHANGE#,这样就可以          resetlogs打开数据库

    如果考虑到尽可能的少丢失数据就需要设置当前的incarnation值使得满足条件:

    incarnation. Reset SCN =v$archived_log.maxSCN. RESETLOGS_CHANGE#

    这样就可以在recover的过程中一直追加所有归档,直到追加完最大SCN值对应的归档  日志。这也是全库恢复时丢失数据尽可能少的解决办法。这样设置可以恢复到丢失最少     数据的状态。(丢失的只有redo中的数据)

    b.关闭数据库闪回功能

    在源端137上开启了数据库闪回功能:

    rmanrestore5

    因为开始数据库闪回时的闪回日志存储路径在:+FLASHBACK磁盘组上

    rmanrestore6

    并且开启数据库闪回后resetlogs时重新生成的redo要默认放在和闪回日志相同的            路径下,因此要提前校验+FLASHBACK磁盘组,并且在执行restore database时也要               校验数据库闪回

    在138端没有ASM实例,并且也没有+FLASHBACK磁盘组,因此在后续的执行restore             database时就会报错,所以需要在138上关闭数据库闪回功能,并重启数据库重新                   加载spfile和controlfile

    执行如下操作:

    138上关闭数据库闪回:

    alter database flashback off;

    确认关闭是否成功:

    select name ,FLASHBACK_ON from v$database;

    关闭数据库:

    shutdown immediate

    重新加载spfile和controlfile

    startup mount

    因为数据库闪回引起的报错截图如下:

    rmanrestore7

    c.修改归档路径

    因为137上的归档路径为+ARCH磁盘组

    rmanrestore8

    在138上没有ASM实例更没有+ARCH磁盘组,所以在recover的过程中会报错,截图如 下:

    rmanrestore9

    报错信息显示没有起始SCN为2443916和2427335的归档日志。

    排除过程如下:

    RMAN > list backup of archivelog all

    查过所以归档备份集,找到包含该起始SCN的备份片,首先确认在rman的catalog中    是否有这个两个归档的备份片及元数据信息

    rmanrestore10

    通过Low SCN和 Next SCN值确定是否有该归档日志的备份片

    然后在对应路径下确认该文件是否存在

    如果不存在说明scp 的过程中出错:需要重新scp

    如果在list backup of archivelog all的显示结果中没有找到,可能的原因是没有注册到rman上,需要重新把归档备份集的路径再注册一次到rman中:

    catalog start with ' /u01/app/oracle/oradata/backupset/prod4/arch'

    catalog start with ' /u01/app/oracle/oradata/backupset/prod4/full/arch'

    如果在list backup of archivelog all的显示结果中有对应的备份片,并且在指定路径下确实存在该备份片文件。那么可能的原因就是源端137上的归档路径在138上没有创建,即138上没有源端的归档日志存放路径。

    因为在执行recover的过程中,追加日志的执行过程是这样的:

    @先把归档日志备份集释放到控制文件中记录的归档日志存放路径

    137上是+ARCH磁盘组,所以在138上会寻找释放存在+ARCH磁盘组

    @将所有归档备份集释放到归档日志存放路径下,释放成归档日志文件

    @recover过程中读取该路径下的归档日志文件

    综上所述:必须在目标端创建和源端相同的路径的归档日志存放目录,或者重新指定归档日志存放路径

    因为137端归档日志路径为+ARCH磁盘组

    138上没有ASM实例,必须重新指定归档路径

    执行如下操作:

    查看控制文件中记录的归档路径:

    show parameter archive

    rmanrestore11

    修改归档路径:

    alter system set log_archive_dest_1='location=/u01/app/oracle/oradata/CPROD4/arch'

    一致性关闭数据库

    shutdown immediate

    重新加载spfile和controlfile

    startup mount

    b.执行恢复脚本

    (i) 先查询出控制文件中记录的所有的数据文件信息

    select name from v$datafile;

    rmanrestore12

    (ii)修改restore的数据文件存储新路径,即恢复到不同的目录下

    set newname for datafile  '+DATA/prod4/datafile/system.286.905335925' to                                                                            '/u01/app/oracle/oradata/PROD4_T/datafile/system';

    (iii)执行restore database;

    把数据文件备份集释放到对应的新存储目录下,并重新命名成新的指定文                                     件名

    (iv)修改控制文件中新的数据文件的指针

    switch datafile all;

    (v)追加归档日志recover数据库

    recover database;

    脚本大致内容如下:

    run {

    set until scn 2460383;

    set newname for datafile  '+DATA/prod4/datafile/system.286.905335925' to                                          '/u01/app/oracle/oradata/CPROD4/datafile/system.dbf';

    restore database;

    switch datafile all;

    recover database;

    }

    具体脚本参考:CPROD4_setNewName_recover.txt

    注:脚本执行过程中要tail -f  recover_log.log日志文件,跟踪恢复过程

    漫兮网(http://www.manxinet.com)】

    6、重建controlfile文件修改redo的恢复路径

    recover完成后不能resetlogs方式打开数据库,因为还没有redo文件,没有redo     的情况下,任何到数据库的访问会话都会被oracle kill掉。

    该步执行resetlogs方式打开数据库的报错截图如下:

    rmanrestore13

    reason:

    源端137的redo存放路径在+ FLASHBACK磁盘组

    SQL> select member from v$logfile;

    MEMBER

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

    +FLASHBACK/prod4/onlinelog/group_4.366.905339795

    +FLASHBACK/prod4/onlinelog/group_1.368.905339781

    +FLASHBACK/prod4/onlinelog/group_2.374.905339785

    +FLASHBACK/prod4/onlinelog/group_3.369.905339787

    目标端138上没有ASM实例更没有+FLASHBACK磁盘组,所以在执行resetlogs方式打开 数据库时不能成功创建redo文件。

    解决办法:可以建立和源端137上相同路径的redo存放目录,或者重建控制文件重新    指定redo的存放路径

    注:默认用resetlogs方式打开数据库时只能创建三个日志组,并且每组只能有一个成                      员。

    solution:

    重建controlfile:

    执行如下操作:

    @mount状态备份控制文件到trace

    alter database backup controlfile to trace as

    '/u01/app/oracle/oradata/CPROD4/controlfile/recreateCtl.ctl';

    @gedit编辑控制文件

    gedit   /u01/app/oracle/oradata/CPROD4/controlfile/recreateCtl.ctl

    重新指定redo的存放路径并以resetlogs方式重建controlfile。

    修改后的内容参考脚本:recreateCtl.txt

    @执行脚本

    SQL > @/u01/app/oracle/oradata/CPROD4/controlfile/recreateCtl.ctl

    @一致性关闭数据库

    shutdown  immediate

    @重新加载控制文件

    startup mount

    7、打开数据库到open状态

    alter database open resetlogs;

    五、修改日志组,按照业务需求添加日志组及成员

    a.添加日志组

    alter database add logfile group 4

    '/u01/app/oracle/oradata/CPROD4/onlinelog/redo04a.log' size 50m;

    b.日志组添加成员

    alter database add logfile member

    '/u01/app/oracle/oradata/CPROD4/onlinelog/redo04b.log'  to group 4;

    最终日志组及成员设置情况如下:

    注:添加完日志组后要切换下日志组,把unused状态切换到正常状态。

    alter system switch logfile;

    同时再次确认日志组成员member的status是正常状态。

    六、添加临时表空间、临时数据文件

    a.查询系统默认临时表空间

    select * from database_properties where property_name='DEFAULT_TEMP_TABLESPACE';

    b.查询临时数据文件

    select name,status from v$tempfile;

    c.对系统默认临时表空间添加临时数据文件

    alter tablespace temp add tempfile

    '/u01/app/oracle/oradata/CPROD4/tempfile/temp01.dbf' size 300m;

    d.根据业务需求添加临时数据文件,最终设置如下:

    漫兮网(http://www.manxinet.com)】

    七、校验是否成功恢复到指定SCN

    查询v$datafile_header视图确认数据文件头的真实SCN

    select name, CHECKPOINT_CHANGE# from v$datafile_header;

    rmanrestore14

    确认数据文件头的SCN成功恢复到指定SCN : 2460383

    八、完成全库恢复(或测试环境搭建)的整个过程

    本文由 漫兮 首发于【漫兮网(http://www.manxinet.com)】--转载请注明【漫兮网

  • 相关阅读:
    mysql8下载安装及配置
    jdk11下载安装及环境变量配置
    展示所有商品案例
    事务(转账实例)
    Part2.7 ESLint
    Part2.6 Webpack
    Part2.5 模块化开发
    Part2.4 gulp 实践
    Part2.3 Grunt
    Part2.2 plop 使用
  • 原文地址:https://www.cnblogs.com/moonfans/p/6012947.html
Copyright © 2011-2022 走看看