利用RMAN将Oracle 11g的文件系统单实例数据库移植到双机RAC+ASM环境的过程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
利用RMAN将Oracle 11g的文件系统单实例数据库移植到
双机RAC+ASM环境的过程
目的:利用单实例的rman全备,恢复到已有的RAC的ASM磁盘组内,删除RAC 已有的数据库,完成单实例数据库到RAC的环境迁移。
环境:
单实例:sid: single
版本:11.1.0.7
ip: 192.168.76.160
data: /home/oracle/single
已有RAC:
数据库:racdb
版本:11.1.0.7
testrac01: 192.168.76.160/161 sid: racdb1
testrac02: 192.168.76.162/163 sid: racdb2
data:+TESTDG/racdb
db_name: racdb
sidprefix: racdb
init file: +TESTDG/racdb/spfileracdb.ora
一、已有RAC的环境。
su - oracle
export ORACLE_SID=+ASM1
sqlplus / as sysdba
select name,state from v$asm_diskgroup;
SQL> select name,state from v$asm_diskgroup;
NAME STATE
-------------------- -------------------
TESTDG MOUNTED
alter system set log_archive_dest_1='Location=/arch_dir' scope=spfile sid='racdb1'; alter system set log_archive_format='racdb_%t_%s_%r.dbf' scope=spfile sid='racdb1'; alter system set log_archive_dest_1='Location=/arch_dir' scope=spfile sid='racdb2'; alter system set log_archive_format='racdb_%t_%s_%r.dbf' scope=spfile sid='racdb2';
二、单实例的备份
单实例和rac的版本要一致,包括小版本。
三、开始进行迁移。
(一)、将单节点的备份文件复制到rac的节点一上。
将单实例single数据库的rman备份集放到RAC服务器上相应的目录下。
目前用于测试的单实例single就在192.168.76.160上建的。
(二)、删除已有RAC环境中的数据库信息。
由于原RAC下有数据库(racdb),需要将数据库从crs中删除。
su - oracle
oracle$srvctl config database -d racdb
testrac01 racdb1 /testapp/db/product/11
testrac02 racdb2 /testapp/db/product/11
oracle$ srvctl remove instance -d racdb -i racdb2
oracle$ srvctl remove instance -d racdb -i racdb1
srvctl remove database -d racdb
删除前:
testrac01:/#crs_stat -t
Name Type Target State Host
------------------------------------------------------------
ora....SM1.asm application ONLINE ONLINE testrac01
ora....01.lsnr application ONLINE ONLINE testrac01
ora....c01.gsd application ONLINE ONLINE testrac01
ora....c01.ons application ONLINE ONLINE testrac01
ora....c01.vip application ONLINE ONLINE testrac01
ora....SM2.asm application ONLINE ONLINE testrac02
ora....02.lsnr application ONLINE ONLINE testrac02
ora....c02.gsd application ONLINE ONLINE testrac02
ora....c02.ons application ONLINE ONLINE testrac02
ora....c02.vip application ONLINE ONLINE testrac02
ora.racdb.db application OFFLINE OFFLINE
ora....b1.inst application OFFLINE OFFLINE
ora....b2.inst application OFFLINE OFFLINE
删除后:
testrac01:/#crs_stat -t
Name Type Target State Host
------------------------------------------------------------
ora....SM1.asm application ONLINE ONLINE testrac01
ora....01.lsnr application ONLINE ONLINE testrac01
ora....c01.gsd application ONLINE ONLINE testrac01
ora....c01.ons application ONLINE ONLINE testrac01
ora....c01.vip application ONLINE ONLINE testrac01
ora....SM2.asm application ONLINE ONLINE testrac02
ora....02.lsnr application ONLINE ONLINE testrac02
ora....c02.gsd application ONLINE ONLINE testrac02
ora....c02.ons application ONLINE ONLINE testrac02
ora....c02.vip application ONLINE ONLINE testrac02
(三)、开始进行rman恢复:
目标:将单节点的single数据库,恢复到ASM环境。
节点一: sid:singedb1
节点二: sid: singedb2
ASM存放目录: +TESTDG/single目录。
过程简述:
手动创建init文件,利用单节点的rman备份,先恢复controlfile到+TESTDG/SINGLE 下。
然后,利用rman的set newname功能进行数据文件的迁移,也恢复到ASM上。
然后在节点一上,重建redo log和temp,注意是thread 1的。
也要为节点二创建thread 2的redo log。
最后可以尝试进行recover和open resetlogs。
在节点一上open后,为节点二创建undotbs2。
对参数文件spfile进行设置。
在crs中注册数据库和两个实例,利用crs进行实例的启停。
然后迁移成功。
1、手动创建pfile
在/testapp/db/product/11/dbs下:
vi initsingledb1
----
*.audit_file_dest='/testapp/db/admin/racdb/adump'
*.audit_trail='db'
*.cluster_database_instances=2
*.cluster_database=true
*.compatible='11.1.0.0.0'
*.control_files='+TESTDG/single/single_01.ctl','+TESTDG/single/single_02.ctl','+TESTD G/single/single_03.ctl'
*.db_block_size=8192
*.db_create_file_dest='+TESTDG'
*.db_domain=''
*.db_name='single'
*.diagnostic_dest='/testapp/db'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=racdbXDB)'
singledb2.instance_number=2
singledb1.instance_number=1
singledb2.local_listener='LISTENER_RACDB2'
singledb1.local_listener='LISTENER_RACDB1'
singledb1.log_archive_dest_1='Location=/arch_dir'
singledb2.log_archive_dest_1='Location=/arch_dir'
singledb1.log_archive_format='single_%t_%s_%r.dbf'
singledb2.log_archive_format='single_%t_%s_%r.dbf'
*.memory_target=2760900608
*.open_cursors=300
*.processes=400
*.remote_listener='LISTENERS_RACDB'
*.remote_login_passwordfile='exclusive'
*.sessions=191
singledb2.thread=2
singledb1.thread=1
singledb2.undo_tablespace='UNDOTBS2'
singledb1.undo_tablespace='UNDOTBS1'
---
2、恢复控制文件
在节点一上,利用rman备份,将控制文件恢复到ASM上,因为init文件中已经给出了路径。
su - oracle
export ORACLE_SID=singledb1
rman target /
startup nomount;
restore controlfile from '/testapp/db/flash_recovery_area/SINGLE/autobackup/2014_05_29/o1_mf_n_8488 58482_9rg2kg4c_.bkp';
RMAN> restore controlfile from '/testapp/db/flash_recovery_area/SINGLE/autobackup/2014_05_29/o1_mf_n_8488 58482_9rg2kg4c_.bkp';
Starting restore
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=415 instance=singledb1 device type=DISK
channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:07 output file name=+TESTDG/single/single_01.ctl
output file name=+TESTDG/single/single_02.ctl
output file name=+TESTDG/single/single_03.ctl
Finished restore
查看asm:
ASMCMD> ls
CONTROLFILE/
single_01.ctl
single_02.ctl
single_03.ctl
ASMCMD> pwd
+testdg/single
3、恢复datafiles
alter database mount
用restore set newname 的方式把数据文件restore出来。
1 /home/oracle/single/system01.dbf
2 /home/oracle/single/sysaux01.dbf
3 /home/oracle/single/undotbs01.dbf
4 /home/oracle/single/users01.dbf
RMAN>
run {
set newname for datafile 1 to '+TESTDG/single/system01.dbf'; set newname for datafile 2 to '+TESTDG/single/sysaux01.dbf'; set newname for datafile 3 to '+TESTDG/single/undotbs01.dbf'; set newname for datafile 4 to '+TESTDG/single/users01.dbf'; restore database;
switch datafile all;
}
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
Starting restore at
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=415 instance=singledb1 device type=DISK
channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00001 to +TESTDG/single/system01.dbf channel ORA_DISK_1: restoring datafile 00002 to +TESTDG/single/sysaux01.dbf channel ORA_DISK_1: restoring datafile 00003 to +TESTDG/single/undotbs01.dbf channel ORA_DISK_1: restoring datafile 00004 to +TESTDG/single/users01.dbf channel ORA_DISK_1: reading from backup piece /testapp/db/flash_recovery_area/SINGLE/backupset/2014_05_29/o1_mf_nnndf_TA G2*******T182118_9rg2jyo5_.bkp
channel ORA_DISK_1: piece handle=/testapp/db/flash_recovery_area/SINGLE/backupset/2014_05_29/o1_mf_nn ndf_TAG20140529T182118_9rg2jyo5_.bkp tag=TAG20140529T182118
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:03:35
Finished restore at
datafile 1 switched to datafile copy
input datafile copy RECID=5 STAMP=849059578 file name=+TESTDG/single/system01.dbf
datafile 2 switched to datafile copy
input datafile copy RECID=6 STAMP=849059579 file name=+TESTDG/single/sysaux01.dbf
datafile 3 switched to datafile copy
input datafile copy RECID=7 STAMP=849059579 file name=+TESTDG/single/undotbs01.dbf
datafile 4 switched to datafile copy
input datafile copy RECID=8 STAMP=849059579 file name=+TESTDG/single/users01.dbf
asm:
ASMCMD> ls
CONTROLFILE/
DATAFILE/
single_01.ctl
single_02.ctl
single_03.ctl
sysaux01.dbf
system01.dbf
undotbs01.dbf
users01.dbf
4、创建实例所需的目录,在$ORACLE_BASE下,如bdump等
5、重建redo 在线日志,注意是thread 1的。
实例singledb1在mount状态下,(因为单实例的redo已经占了group 1、2、3,所以从group4开始建)
ALTER DATABASE ADD LOGFILE GROUP 4 ('+TESTDG/single/single_redo4_01.rdo','+TESTDG/single/single_redo4_02.rdo') SIZE 50M;
ALTER DATABASE ADD LOGFILE GROUP 5 ('+TESTDG/single/single_redo5_01.rdo','+TESTDG/single/single_redo5_02.rdo') SIZE 50M;
ALTER DATABASE ADD LOGFILE GROUP 6 ('+TESTDG/single/single_redo6_01.rdo','+TESTDG/single/single_redo6_02.rdo') SIZE 50M;
创建节点二的redo,注意要指定thread 2。
在节点1上给节点2建立日志组:
ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 7 ('+TESTDG/single/single_redo7_01.rdo','+TESTDG/single/single_redo7_02.rdo') SIZE 50M;
ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 8 ('+TESTDG/single/single_redo8_01.rdo','+TESTDG/single/single_redo8_02.rdo') SIZE 50M;
ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 9 ('+TESTDG/single/single_redo9_01.rdo','+TESTDG/single/single_redo9_02.rdo') SIZE 50M;
thread 2的添加完后,执行enable:
SQL> alter database enable thread 2;
Database altered.
如果不建节点2的日志组,在启动节点二是会如下错误:
ORA-01618: redo thread 2 is not enabled - cannot mount
6、开始recover
recover database using backup controlfile until cancel;
alter database open resetlogs
7、重建temp
1)create temporary tablespace TEMP2 TEMPFILE '+TESTDG' size 28M REUSE AUTOEXTEND OFF; --创建中转临时表空间
2)alter database default temporary tablespace temp2; --改变缺省临时表空间为刚刚创建的新临时表空间temp2
3)drop tablespace temp including contents and datafiles;--删除原来临时表空间
4)create temporary tablespace TEMP TEMPFILE '+TESTDG' size 100M REUSE AUTOEXTEND OFF; --重新创建临时表空间
5)alter database default temporary tablespace temp; --重置缺省临时表空间为新建的temp表空间
6)drop tablespace temp2 including contents and datafiles;--删除中转用临时表空间8、创建spfile
create spfile='+TESTDG' from pfile;
9、创建实例二所需的UNDOTBS2
CREATE UNDO TABLESPACE "UNDOTBS2" DATAFILE '+TESTDG/single/undotbs02.dbf' SIZE 500M;
如果不创建,在启动节点二时,会报错:
ORA-30012: undo tablespace 'UNDOTBS2' does not exist or of wrong type
在节点二:
准备好pfile,注意修改指定节点二的redo、undo等信息。
建议,在原rac数据库的init文件基础上进行修改。
singledb2.thread=2
singledb2.undo_tablespace='UNDOTBS2'
启动节点二:
startup mount:
alter database open;
SQL> select group#,thread#,status from v$log;
GROUP# THREAD# STATUS
---------- ---------- ------------------------------------------------
4 2 INACTIVE
5 2 INACTIVE
6 2 CURRENT
7 1 INACTIVE
8 1 INACTIVE
9 1 CURRENT
6 rows selected.
恢复完成。
四、修改spfile,迁移到ASM上
目前每个节点是从本地的init文件中启动。
sqlplus / as sysdba
create spfile='+TESTDG/SINGLE/spfilesingle.ora' from pfile;
查看asm,生成一个alias,指向了parameterfile下。
spfilesingle.ora => +TESTDG/SINGLE/PARAMETERFILE/spfile.276.849109697
修改每个节点的init pfile,内容如下:
cd $ORACLE_HOME/dbs
vi initsingledb1.ora
spfile='+TESTDG/SINGLE/spfilesingle.ora'
cd $ORACLE_HOME/dbs
vi initsingledb2.ora
spfile='+TESTDG/SINGLE/spfilesingle.ora'
五、将新的数据库加入crs进行管理。
用以下命令将数据库和实例加入crs管理,在节点一上操作,使用oracle用户。
1、加数据库
su - oracle
$ srvctl add database -d single -o /testapp/db/product/11 -p +TESTDG/single/spfilesingle.ora
参数解释:
-d db_unique_name;
-o oracle_home;
-p spfile_path
2、加实例
su - oracle
$ srvctl add instance -d single -i singledb1 -n testrac01
testrac01:/testapp/db/product/11/dbs$srvctl config database -d single
testrac01 singledb1 /testapp/db/product/11
参数解释:
-i instance_name;
-n node_name
srvctl add instance -d single -i singledb2 -n testrac02
分别启动两边的实例,正常。
测试:两边分别检索某张表,内容都可以看到。
迁移成功。
-------------------
附:重建listener:
由于rac的listener是原来已有的,因此可以尝试重建的listener。
1、停止listener
testrac01:/home/grid$srvctl stop listener -n testrac01
testrac01:/home/grid$srvctl stop listener -n testrac02
2、先从OCR中删除listener信息。
删除前:
crs_stat|grep lsnr
testrac01:/home/grid$crs_stat|grep lsnr
NAME=ora.testrac01.LISTENER_TESTRAC01.lsnr
NAME=ora.testrac02.LISTENER_TESTRAC02.lsnr
srvctl remove listener -n testrac02
srvctl remove listener -n testrac02
2014-05-29 12:40:47.391: [ CRSRES][11029] Resource UnRegistered: ora.testrac02.LISTENER_TESTRAC02.lsnr
2014-05-29 12:42:35.666: [ CRSRES][11052] Resource UnRegistered: ora.testrac01.LISTENER_TESTRAC01.lsnr
删除后,已没有lsnr信息。
3、删除listener.ora
4、netca创建
新的: RACLISTENER
crsd的日志:
2014-05-29 12:47:56.830: [ CRSRES][11122] Resource Registered: ora.testrac01.RACLISTENER_TESTRAC01.lsnr
2014-05-29 12:48:05.470: [ CRSRES][11128] Resource Registered: ora.testrac02.RACLISTENER_TESTRAC02.lsnr
2014-05-29 12:48:06.770: [ CRSRES][11387] startRunnable: setting CLI values 2014-05-29 12:48:06.795: [ CRSRES][11387] Attempting to start `ora.testrac01.RACLISTENER_TESTRAC01.lsnr` on member `testrac01`
2014-05-29 12:48:13.999: [ CRSRES][11387] Start of `ora.testrac01.RACLISTENER_TESTRAC01.lsnr` on member `testrac01` succeeded. 2014-05-29 12:48:14.611: [ CRSRES][11394] Attempting to start `ora.testrac02.RACLISTENER_TESTRAC02.lsnr` on member `testrac02`
2014-05-29 12:48:16.840: [ CRSRES][11394] Start of `ora.testrac02.RACLISTENER_TESTRAC02.lsnr` on member `testrac02` succeeded.
查看信息:
testrac01:/home/grid$crs_stat|grep lsnr
NAME=ora.testrac01.RACLISTENER_TESTRAC01.lsnr
NAME=ora.testrac02.RACLISTENER_TESTRAC02.lsnr
11。