一、配置目标主机的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';                               执行过程中会报如下错误:

错误一截图:

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)

)

)

错误二截图:

再次试图打开数据库到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;

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

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

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

list backup of archivelog all;

在对应路径

/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上开启了数据库闪回功能:

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

并且开启数据库闪回后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

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

c.修改归档路径

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

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

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

排除过程如下:

RMAN > list backup of archivelog all

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

通过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

修改归档路径:

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;

(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方式打开数据库的报错截图如下:

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;

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

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

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

rman全库恢复到不同主机,不同实例名,不同目录下的更多相关文章

  1. 【原创】rman 全库备份脚本

    rman 全库备份脚本 run { allocate channel d1 type disk; allocate channel d2 type disk; backup full database ...

  2. 从Oracle9i RMAN全库备份迁移到 Oracle10g

    1. 创建以下目录: mkdir -pv $ORACLE_BASE/admin/$ORACLE_SID/{{a,b,c,dp,u}dump,pfile} mkdir -pv $ORACLE_BASE/ ...

  3. CentOS中Apache虚拟主机(virtualHost)设置在/home目录下的若干问题

    在Ubuntu中安装LAMP是非常简单的意见事情.但是在CentOS中却遇到了很多问题. 首先是CentOS中必须手动配置iptables,把80端口开放出来,不然,是访问不到的,开放80端口在/et ...

  4. 从MySQL全库备份中恢复某个库和某张表

    在Mysqldump官方工具中,如何只恢复某个库呢? 全库备份 [root@HE1 ~]# mysqldump -uroot -p --single-transaction -A --master-d ...

  5. RMAN优缺点及RMAN备份及恢复步骤

    RMAN优缺点及RMAN备份及恢复步骤--以下部分来自网络转摘,仅供参考和OS命令备份方式相比,使用RMAN的优点1 备份执行期间不需要人工干预,因此减少了误操作的机会:2 可以有效的将备份和恢复结合 ...

  6. Oracle RMAN 学习:恢复

    Oracle RMAN 学习:恢复 6 rman恢复 Rman中的恢复对应restore,recover Restore,数据修复,利用备份集的数据文件来替换已损坏的数据文件或将其恢复到另外一个位置, ...

  7. 12c RAC 用Rman 恢复到异机单实例

    准备工作 原服务器软件部署:Redhat 6.6 + Oracle 12.2.0.1 rac Oracle12c单实例安装 1.创建恢复服务器,设置大于原库数据大小的磁盘容量.设置相同的服务器主机名参 ...

  8. 从MySQL全库备份中恢复某个库和某张表【转】

    从MySQL全库备份中恢复某个库和某张表 一.全库备份-A [root@mha2 backup]#mysqldump -uroot -p123456 --default-character-set=u ...

  9. 通过Xtrabackup实现MySQL实例的全库备份与按需单库恢复

    在实际的生产环境中,为了管理方便,我们一般是通过 Xtrabackup实现实例的全库备份,即将实例上的所有数据库备份. 但是,考虑到快速恢复 我们常常面临的需求是快速还原单个数据库.针对初学者来说,网 ...

随机推荐

  1. 带你深入了解Web站点数据库的分布存储

    作者:finalbsd原载: http://www.sanotes.net/html/y2009/358.html 在Web 2.0时代,网站将会经常面临着快速增加的访问量,但是我们的应用如何满足用户 ...

  2. Animation 案例解释

    Animation 案例解释: ------------摘自W3c 过度动画类型: linear:线性过渡.等同于贝塞尔曲线(0.0, 0.0, 1.0, 1.0) ease:平滑过渡.等同于贝塞尔曲 ...

  3. Python 一路走来 DOM & Jquery

    DOM           查找:                直接查找                间接查找                —getElementById             ...

  4. HTML&CSS基础学习笔记1.11—导航栏

    上文我们介绍到的<a>标签,由于<a>标签可以用来跳转,所以我们可以拿<a>标签来生成网页的导航栏. 其实在实际运用中,<a>标签就经常会被用来生成导航 ...

  5. NET SignalR 与 LayIM2.0

    ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(五) 之 加好友,加群流程,消息管理和即时消息提示的实现   前言 前前一篇留了个小问题,在上一篇中忘了写了,就是关于L ...

  6. cpm效果介绍

    浮层菜单 图片弹窗

  7. 如何将Icon转成Bitmap(对ICON的内部格式讲的比较清楚)

    最近工作中有个需求是将Icon转成带Alpha通道的Bitmap, 虽然网上有不少这方面的文章,但很多都是错的, 这里记录下,或许对后来人有用.   要实现这个功能,我们首先需要理解Icon的格式,我 ...

  8. mysql出现错误“ Every derived table must have its own alias”

    Every derived table must have its own alias 这句话的意思是说每个派生出来的表都必须有一个自己的别名 一般在多表查询时,会出现此错误. 因为,进行嵌套查询的时 ...

  9. 【转】FAE及其发展前景

    原文网址:http://blog.sina.com.cn/s/blog_6e80c27b0100okd9.html FAE Field Application Engineer(现场应用工程师) ,其 ...

  10. 【转】Excel快捷键大全

    原文网址:http://www.bm8.com.cn/keyboard/excel.asp 显示和使用"Office 助手"注意 若要执行以下操作,"Microsoft ...