Database-Oracle-Windows操作系统下使用RMAN进行Oracle11g单实例的生产库迁移恢复
一般(相同同数据库版本)流程
在目标数据库上安装软件
原库全备
复制文件到目标数据库
备份集以及原库上的pfile: create pfile from spfile;
根据原库pfile创建或修改没有的目录
重做日志路径、控制文件路径,快速恢复区等
目标数据库:
C:\Users\Administrator>ORADIM -NEW -SID orcl
C:>set oracle_sid=orcl
C:>rman target /
RMAN> startup nomount
RMAN> set dbid 1450825846
RMAN> startup nomount pfile=‘D:\app\Administrator\product\11.2.0\dbhome_1\databa
se\INITorcl’;
RMAN> restore controlfile from ‘C:\app\Administrator\fast_recovery_area\orcl\AUT
OBACKUP\2016_11_03\O1_MF_S_926954699_D1OSLDL3_.BKP’;
RMAN> restore spfile from ‘C:\app\Administrator\fast_recovery_area\orcl\AUTOBACK
UP\2016_11_11\O1_MF_S_927642226_D2BRZOYF_.BKP’;
RMAN> alter database mount;
RMAN> restore database;(因为原库与目标库快速恢复区相同)
RMAN> recover database;
启动 recover 于 12-11月-16
使用通道 ORA_DISK_1
正在开始介质的恢复
无法找到归档日志
归档日志线程=1 序列=10
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: recover 命令 (在 11/04/2016 10:24:31 上) 失败
RMAN-06054: 介质恢复正在请求未知的线程 1 序列 10 的归档日志以及起始 SCN 1042267
报错了?正常的,因为我们创建的热备份并不是一致性备份,源端的归档是过来了,但联机重做日志文件并没有随备份集复制过来,因此恢复时肯定恢复不到源端的当前状态。这个错误是提醒你要想继续恢复的话还需要线程1生成的SEQUENCE#为10的重做日志文件。如果你要保持一致,必须复制源数据库端的重做日志文件,那必须首先SHUTDOWN源端数据库才行。
RMAN> recover database until scn=1042267;
启动 recover 于 04-11月-16
使用通道 ORA_DISK_1
正在开始介质的恢复
介质恢复完成, 用时: 00:00:00
完成 recover 于 12-11月-16
开库:
ALTER DATABASE OPEN RESETLOGS;
create spfile from pfile;
oradim -EDIT -SID orcl -STARTMODE auto -SRVCSTART system
软件版本不同的情况
此次迁移各服务器情况:
24(正式库) 11.2.0.1 win-server-2008
23(目标主机) 11.2.0.4 win-server-2012
此次在recover database until…时提醒数据文件报RMAN-06054: 介质恢复正在请求未知的线程 1 序列 **的归档日志以及起始 SCN ***错误。
在把序列为的日志拿过来后rman又重新报了06054错误(一个比scn****更小的scn)并需要序列+1的归档,怀疑此次rman异常的原因是因为该生产库多次异常断电导致数据库里存在一个像洞一样的东西。
然后在recover until 较小的scn时成功recover,因为版本不同,开库需要upgrade。
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-39700: database must be opened with UPGRADE option
Process ID: 11035
Session ID: 59 Serial number: 29
[oracle@testdb orcl]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Thu Apr 9 13:36:01 2015
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup upgrade;
ORACLE instance started.
Total System Global Area 313159680 bytes
Fixed Size 2227944 bytes
Variable Size 230687000 bytes
Database Buffers 75497472 bytes
Redo Buffers 4747264 bytes
Database mounted.
Database opened.
catupgrd.sql 该脚本花费时间较长,大约30分钟,执行完毕后干净的关库后再重新打开数据库再检查是否还有失效的对象:
SQL> @$ORACLE_HOME/rdbms/admin/catupgrd.sql;
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area 501059584 bytes
Fixed Size 2229744 bytes
Variable Size 444598800 bytes
Database Buffers 46137344 bytes
Redo Buffers 8093696 bytes
Database mounted.
Database opened.
SQL> select count(*) from dba_objects where status='INVALID';
COUNT(*)
----------
5930
SQL> @$ORACLE_HOME/rdbms/admin/utlrp.sql
SQL> select count(*) from dba_objects where status='INVALID';
COUNT(*)
----------
0
正式迁移恢复
以上操作的备份集不是最新的,因此需要再一次备份恢复,在备份前需要将正式库关闭,然后open resetlog一下,这样正式库相当于全新的(把洞补上),然后全备,恢复。
RMAN> startup nomount
Oracle 实例已启动
系统全局区域总计 13695889408 字节
Fixed Size 2294256 字节
Variable Size 7784631824 字节
Database Buffers 5838471168 字节
Redo Buffers 70492160 字节
RMAN> set dbid 1454198642
正在执行命令: SET DBID
RMAN> startup nomount pfile='D:\app\Administrator\product\11.2.0\dbhome_1\database\INITorcl';
数据库已经启动
RMAN> restore controlfile from 'D:\app\Administrator\flash_recovery_area\orcl\AUTOBACKUP\2017_05_15\O1_MF_S_944071445_DK
LZ8OMC_.BKP';
启动 restore 于 15-5月 -17
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=301 设备类型=DISK
通道 ORA_DISK_1: 正在还原控制文件
通道 ORA_DISK_1: 还原完成, 用时: 00:00:01
输出文件名=D:\APP\ADMINISTRATOR\ORADATA\ORCL\CONTROL01.CTL
输出文件名=C:\ORACLE_BACKUP\ORCL\CONTROL02.CTL
完成 restore 于 15-5月 -17
RMAN> alter database mount;
数据库已装载
释放的通道: ORA_DISK_1
RMAN> restore database;
启动 restore 于 15-5月 -17
启动 implicit crosscheck backup 于 15-5月 -17
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=301 设备类型=DISK
分配的通道: ORA_DISK_2
通道 ORA_DISK_2: SID=321 设备类型=DISK
已交叉检验的 11 对象
已交叉检验的 70 对象
.......
RMAN> recover database;
启动 recover 于 15-5月 -17
使用通道 ORA_DISK_1
使用通道 ORA_DISK_2
正在开始介质的恢复
无法找到归档日志
归档日志线程=1 序列=1
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: recover 命令 (在 05/15/2017 18:22:03 上) 失败
RMAN-06054: 介质恢复正在请求未知的线程 1 序列 1 的归档日志以及起始 SCN 329554756
将提示中需要的序列日志拿到24上,没有归档的用alter system switch logfile;
RMAN> recover database;
启动 recover 于 15-5月 -17
使用通道 ORA_DISK_1
使用通道 ORA_DISK_2
正在开始介质的恢复
无法找到归档日志
归档日志线程=1 序列=3
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: recover 命令 (在 05/15/2017 18:31:06 上) 失败
RMAN-06054: 介质恢复正在请求未知的线程 1 序列 3 的归档日志以及起始 SCN 329560091
RMAN> recover database until scn=329560091;
启动 recover 于 15-5月 -17
使用通道 ORA_DISK_1
使用通道 ORA_DISK_2
正在开始介质的恢复
介质恢复完成, 用时: 00:00:01
完成 recover 于 15-5月 -17
RMAN> alter database open resetlogs;
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: alter db 命令 (在 05/15/2017 18:33:02 上) 失败
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-00704: bootstrap process failure
ORA-39700: database must be opened with UPGRADE option
进程 ID: 11896
会话 ID: 281 序列号: 11
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
ORA-03114: 未连接到 ORACLE
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: alter db 命令 (在 05/15/2017 18:33:02 上) 失败
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-00704: bootstrap process failure
ORA-39700: database must be opened with UPGRADE option
进程 ID: 11896
会话 ID: 281 序列号: 11
PS C:\Users\Administrator> sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on 星期一 5月 15 18:37:04 2017
Copyright (c) 1982, 2013, Oracle. All rights reserved.
已连接到空闲例程。
SQL> startup upgrade
ORACLE 例程已经启动。
Total System Global Area 1.3696E+10 bytes
Fixed Size 2294256 bytes
Variable Size 7818186256 bytes
Database Buffers 5804916736 bytes
Redo Buffers 70492160 bytes
数据库装载完毕。
数据库已经打开。
SQL> @D:\app\Administrator\product\11.2.0\dbhome_1\RDBMS\ADMIN\catupgrd.sql;
SQL> select count(*) from dba_objects where status='INVALID';
SQL> @D:\app\Administrator\product\11.2.0\dbhome_1\RDBMS\ADMIN\utlrp.sql
SQL> select count(*) from dba_objects where status='INVALID';