Oracle Linux环境RAC迁移到异机RAC
RMAN duplicate备份集方式
1.1 迁移环境
源数据库
操作系统:CentsOS 7.2
Oracle数据库版本:11.2.0.4 RAC
ORACLE_SID:ORCLDB
DB_NAME:ORCLDB
目标数据库
操作系统:CentOS 7.5
Oracle数据库版本:11.2.0.4 RAC
即将创建ORACLE_SID:ORCLDB
即将创建DB_NAME:ORCLDB
1.2 迁移准备
1、在迁移前需要在rac源数据库做好RMAN全备,以及归档日志备份。在新RAC环境还原时需要考虑pfile中控制文件的路径。
2、备注此案例中新rac环境已存在实例orcl,迁移完毕之后可将此实例从srvctl中删除
1.3 迁移步骤
1.3.1 源服务器做RMAN全备
rman target /
run{
allocate channel c1 device type disk;
allocate channel c2 device type disk;
allocate channel c3 device type disk;
backup as compressed backupset database format '/u01/rman/full_%d_%U.bak';
backup as compressed backupset archivelog all format '/u01/rman/arch_%d_%U.bak';
backup current controlfile format '/u01/rman/ctl_%d_%U.bak';
release channel c1;
release channel c2;
release channel c3;
}
1.3.2 拷贝备份到新环境RAC数据库服务器
在rac新环境中建立rman的备份目录“/u01/rman"
scp /u01/rman/* oracle@172.16.4.41:/u01/rman
1.3.3 在新rac环境中关闭rac数据库
srvctl stop database -d orcl
1.3.4 编辑新rac环境参数文件
*.audit_trail='none'
*.cluster_database=FALSE
*.compatible='11.2.0.4.0'
*.control_files='+ORADATA/orcldb/controlfile/control1.ctl'
*.db_block_size=8192
*.db_create_file_dest='+ORADATA'
*.db_domain=''
*.db_name='orcldb'
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.memory_target=830472192
*.open_cursors=300
*.processes=150
*.remote_listener='rac-scan:1521'
*.remote_login_passwordfile='exclusive'
undo_tablespace='UNDOTBS1'
*.sessions=170
*.LOG_ARCHIVE_DEST_1='LOCATION=+arch'
db_file_name_convert='+DATA/orcldb/datafile/','+ORADATA/orcldb/datafile/','+DATA/orcldb/tempfile/temp.267.980502675','+ORADATA/o
rcldb/tempfile/temp'
log_file_name_convert='+DATA/orcldb/onlinelog/group_1.270.983698797','+ORADATA/orcldb/onlinelog/group_1','+DATA/orcldb/onlinelog
/group_2.265.983698797','+ORADATA/orcldb/onlinelog/group_2','+DATA/orcldb/onlinelog/group_3.263.983698797','+ORADATA/orcldb/onli
nelog/group_3','+DATA/orcldb/onlinelog/group_4.262.983698797','+ORADATA/orcldb/onlinelog/group_4'
备注:
1、db_file_name_convert源数据库与新数据的数据文件、临时文件
2、log_file_name_convert日志组需要对应
1.3.5 新环境rac数据库启动到nomount
sqlplus / as sysdba
startup nomount;
1.3.6 通过RMAN辅助实例duplicate恢复
[oracle@rac1:/home/oracle]$rman auxiliary /
connected to auxiliary database: ORCLDB (not mounted)
RMAN> duplicate database to orcldb backup location '/u01/rman/';
输出过程:
Starting Duplicate Db at 2018-12-13 18:58:50
contents of Memory Script:
{
sql clone "create spfile from memory";
}
executing Memory Script
sql statement: create spfile from memory
contents of Memory Script:
{
shutdown clone immediate;
startup clone nomount;
}
executing Memory Script
Oracle instance shut down
connected to auxiliary database (not started)
Oracle instance started
Total System Global Area 826753024 bytes
Fixed Size 2257760 bytes
Variable Size 541068448 bytes
Database Buffers 281018368 bytes
Redo Buffers 2408448 bytes
contents of Memory Script:
{
sql clone "alter system set db_name =
''ORCLDB'' comment=
''Modified by RMAN duplicate'' scope=spfile";
sql clone "alter system set db_unique_name =
''ORCLDB'' comment=
''Modified by RMAN duplicate'' scope=spfile";
shutdown clone immediate;
startup clone force nomount
restore clone primary controlfile from '/u01/rman/ctl.bak';
alter clone database mount;
}
executing Memory Script
sql statement: alter system set db_name = ''ORCLDB'' comment= ''Modified by RMAN duplicate'' scope=spfile
sql statement: alter system set db_unique_name = ''ORCLDB'' comment= ''Modified by RMAN duplicate'' scope=spfile
Oracle instance shut down
Oracle instance started
Total System Global Area 826753024 bytes
Fixed Size 2257760 bytes
Variable Size 541068448 bytes
Database Buffers 281018368 bytes
Redo Buffers 2408448 bytes
Starting restore at 2018-12-13 18:59:33
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=29 device type=DISK
channel ORA_AUX_DISK_1: restoring control file
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:03
output file name=+ORADATA/orcldb/controlfile/control1.ctl
Finished restore at 2018-12-13 18:59:37
database mounted
released channel: ORA_AUX_DISK_1
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=29 device type=DISK
RMAN-05529: WARNING: DB_FILE_NAME_CONVERT resulted in invalid ASM names; names changed to disk group only.
contents of Memory Script:
{
set until scn 2054396;
set newname for datafile 1 to
"+oradata";
set newname for datafile 2 to
"+oradata";
set newname for datafile 3 to
"+oradata";
set newname for datafile 4 to
"+oradata";
set newname for datafile 5 to
"+oradata";
set newname for datafile 6 to
"+ORADATA/orcldb/datafile/admin.dbf";
restore
clone database
;
}
executing Memory Script
executing command: SET until clause
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
Starting restore at 2018-12-13 18:59:41
using channel ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00001 to +oradata
channel ORA_AUX_DISK_1: restoring datafile 00005 to +oradata
channel ORA_AUX_DISK_1: reading from backup piece /u01/rman/full_ORCLDB_1ttklkgm_1_1.bak
channel ORA_AUX_DISK_1: piece handle=/u01/rman/full_ORCLDB_1ttklkgm_1_1.bak tag=TAG20181213T095950
channel ORA_AUX_DISK_1: restored backup piece 1
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:35
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00002 to +oradata
channel ORA_AUX_DISK_1: restoring datafile 00006 to +ORADATA/orcldb/datafile/admin.dbf
channel ORA_AUX_DISK_1: reading from backup piece /u01/rman/full_ORCLDB_1utklkgn_1_1.bak
channel ORA_AUX_DISK_1: piece handle=/u01/rman/full_ORCLDB_1utklkgn_1_1.bak tag=TAG20181213T095950
channel ORA_AUX_DISK_1: restored backup piece 1
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:25
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00003 to +oradata
channel ORA_AUX_DISK_1: restoring datafile 00004 to +oradata
channel ORA_AUX_DISK_1: reading from backup piece /u01/rman/full_ORCLDB_1stklkgm_1_1.bak
channel ORA_AUX_DISK_1: piece handle=/u01/rman/full_ORCLDB_1stklkgm_1_1.bak tag=TAG20181213T095950
channel ORA_AUX_DISK_1: restored backup piece 1
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:07
Finished restore at 2018-12-13 19:00:49
contents of Memory Script:
{
switch clone datafile all;
}
executing Memory Script
datafile 1 switched to datafile copy
input datafile copy RECID=7 STAMP=994791649 file name=+ORADATA/orcldb/datafile/system.278.994791583
datafile 2 switched to datafile copy
input datafile copy RECID=8 STAMP=994791649 file name=+ORADATA/orcldb/datafile/sysaux.280.994791617
datafile 3 switched to datafile copy
input datafile copy RECID=9 STAMP=994791649 file name=+ORADATA/orcldb/datafile/undotbs1.282.994791643
datafile 4 switched to datafile copy
input datafile copy RECID=10 STAMP=994791649 file name=+ORADATA/orcldb/datafile/undotbs2.283.994791643
datafile 5 switched to datafile copy
input datafile copy RECID=11 STAMP=994791649 file name=+ORADATA/orcldb/datafile/users.279.994791583
datafile 6 switched to datafile copy
input datafile copy RECID=12 STAMP=994791649 file name=+ORADATA/orcldb/datafile/admin.dbf
contents of Memory Script:
{
set until scn 2054396;
recover
clone database
delete archivelog
;
}
executing Memory Script
executing command: SET until clause
Starting recover at 2018-12-13 19:00:49
using channel ORA_AUX_DISK_1
starting media recovery
channel ORA_AUX_DISK_1: starting archived log restore to default destination
channel ORA_AUX_DISK_1: restoring archived log
archived log thread=2 sequence=20
channel ORA_AUX_DISK_1: restoring archived log
archived log thread=1 sequence=29
channel ORA_AUX_DISK_1: reading from backup piece /u01/rman/arch_ORCLDB_2jtkll5e_1_1.bak
channel ORA_AUX_DISK_1: piece handle=/u01/rman/arch_ORCLDB_2jtkll5e_1_1.bak tag=TAG20181213T101021
channel ORA_AUX_DISK_1: restored backup piece 1
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:03
archived log file name=+ARCH/orcldb/archivelog/2018_12_13/thread_1_seq_29.392.994791651 thread=1 sequence=29
archived log file name=+ARCH/orcldb/archivelog/2018_12_13/thread_2_seq_20.391.994791651 thread=2 sequence=20
channel clone_default: deleting archived log(s)
archived log file name=+ARCH/orcldb/archivelog/2018_12_13/thread_1_seq_29.392.994791651 RECID=2 STAMP=994791654
channel clone_default: deleting archived log(s)
archived log file name=+ARCH/orcldb/archivelog/2018_12_13/thread_2_seq_20.391.994791651 RECID=1 STAMP=994791653
media recovery complete, elapsed time: 00:00:01
Finished recover at 2018-12-13 19:00:55
Oracle instance started
Total System Global Area 826753024 bytes
Fixed Size 2257760 bytes
Variable Size 541068448 bytes
Database Buffers 281018368 bytes
Redo Buffers 2408448 bytes
contents of Memory Script:
{
sql clone "alter system set db_name =
''ORCLDB'' comment=
''Reset to original value by RMAN'' scope=spfile";
sql clone "alter system reset db_unique_name scope=spfile";
shutdown clone immediate;
startup clone nomount;
}
executing Memory Script
sql statement: alter system set db_name = ''ORCLDB'' comment= ''Reset to original value by RMAN'' scope=spfile
sql statement: alter system reset db_unique_name scope=spfile
Oracle instance shut down
connected to auxiliary database (not started)
Oracle instance started
Total System Global Area 826753024 bytes
Fixed Size 2257760 bytes
Variable Size 541068448 bytes
Database Buffers 281018368 bytes
Redo Buffers 2408448 bytes
sql statement: CREATE CONTROLFILE REUSE SET DATABASE "ORCLDB" RESETLOGS ARCHIVELOG
MAXLOGFILES 192
MAXLOGMEMBERS 3
MAXDATAFILES 1024
MAXINSTANCES 32
MAXLOGHISTORY 654
LOGFILE
GROUP 1 ( '+ORADATA/orcldb/onlinelog/group_1' ) SIZE 50 M REUSE,
GROUP 2 ( '+ORADATA/orcldb/onlinelog/group_2' ) SIZE 50 M REUSE
DATAFILE
'+ORADATA/orcldb/datafile/system.278.994791583'
CHARACTER SET ZHS16GBK
sql statement: ALTER DATABASE ADD LOGFILE
INSTANCE 'i2'
GROUP 3 ( '+ORADATA/orcldb/onlinelog/group_3' ) SIZE 50 M REUSE,
GROUP 4 ( '+ORADATA/orcldb/onlinelog/group_4' ) SIZE 50 M REUSE
contents of Memory Script:
{
set newname for tempfile 1 to
"+ORADATA/orcldb/tempfile/temp";
switch clone tempfile all;
catalog clone datafilecopy "+ORADATA/orcldb/datafile/sysaux.280.994791617",
"+ORADATA/orcldb/datafile/undotbs1.282.994791643",
"+ORADATA/orcldb/datafile/undotbs2.283.994791643",
"+ORADATA/orcldb/datafile/users.279.994791583",
"+ORADATA/orcldb/datafile/admin.dbf";
switch clone datafile all;
}
executing Memory Script
executing command: SET NEWNAME
renamed tempfile 1 to +ORADATA/orcldb/tempfile/temp in control file
cataloged datafile copy
datafile copy file name=+ORADATA/orcldb/datafile/sysaux.280.994791617 RECID=1 STAMP=994791694
cataloged datafile copy
datafile copy file name=+ORADATA/orcldb/datafile/undotbs1.282.994791643 RECID=2 STAMP=994791694
cataloged datafile copy
datafile copy file name=+ORADATA/orcldb/datafile/undotbs2.283.994791643 RECID=3 STAMP=994791694
cataloged datafile copy
datafile copy file name=+ORADATA/orcldb/datafile/users.279.994791583 RECID=4 STAMP=994791694
cataloged datafile copy
datafile copy file name=+ORADATA/orcldb/datafile/admin.dbf RECID=5 STAMP=994791694
datafile 2 switched to datafile copy
input datafile copy RECID=1 STAMP=994791694 file name=+ORADATA/orcldb/datafile/sysaux.280.994791617
datafile 3 switched to datafile copy
input datafile copy RECID=2 STAMP=994791694 file name=+ORADATA/orcldb/datafile/undotbs1.282.994791643
datafile 4 switched to datafile copy
input datafile copy RECID=3 STAMP=994791694 file name=+ORADATA/orcldb/datafile/undotbs2.283.994791643
datafile 5 switched to datafile copy
input datafile copy RECID=4 STAMP=994791694 file name=+ORADATA/orcldb/datafile/users.279.994791583
datafile 6 switched to datafile copy
input datafile copy RECID=5 STAMP=994791694 file name=+ORADATA/orcldb/datafile/admin.dbf
Reenabling controlfile options for auxiliary database
Executing: alter database force logging
contents of Memory Script:
{
Alter clone database open resetlogs;
}
executing Memory Script
database opened
Finished Duplicate Db at 2018-12-13 19:01:47
1.3.7 查看rac环境的undo表空间
在节点一查看undo参数
show parameter undo_tablespace
在节点一执行命令使节点2使用undotbs2表空间
alter system set undo_tablespace='UNDOTBS2' scope=spfile sid='orcldb2';
1.3.8 查看rac环境的日志组是否正常
set line 150
col member for a40
col status for a5
col IS_RECOVERY_DEST_FILE for a3
col type for a6
col GROUP# for 99
select * from v$logfile;
GROUP# STATU TYPE MEMBER IS_
------ ----- ------ ---------------------------------------- ---
2 ONLINE +ORADATA/orcldb/onlinelog/group_2 NO
1 ONLINE +ORADATA/orcldb/onlinelog/group_1 NO
3 ONLINE +ORADATA/orcldb/onlinelog/group_3 NO
4 ONLINE +ORADATA/orcldb/onlinelog/group_4 NO
1.3.9 生成spfile文件
create spfile='+ORADATA/orcldb/spfileorcldb.ora' from pfile;
1.3.10 编辑节点1的pfile
pfile中内容指向共享存储的spfile
[oracle@rac1:/u01/app/oracle/product/11.2.0/db_1/dbs]$vi initorcldb1.ora
SPFILE='+ORADATA/orcldb/spfileorcldb.ora'
1.3.11 重启数据库
shutdown immediate;
startup;
1.3.12查看rac集群参数
SQL> show parameter cluster_database
NAME TYPE VALUE
------------------------------------ ---------- -----
cluster_database boolean FALSE
cluster_database_instances integer 1
SQL> show parameter instance_number
NAME TYPE VALUE
------------------------------------ ---------- -----
instance_number integer 0
SQL> show parameter thread
NAME TYPE VALUE
------------------------------------ ---------- -------
thread integer 0
1.3.13 恢复两个节点为集群环境
alter system set cluster_database=true scope=spfile sid='*';
alter system set cluster_database_instances=2 scope=spfile sid='*';
alter system set instance_number=1 scope=spfile sid='orcldb1';
alter system set instance_number=2 scope=spfile sid='orcldb2';
alter system set thread=1 scope=spfile sid='orcldb1';
alter system set thread=2 scope=spfile sid='orcldb2';
1.3.14 重启数据库
1.3.15 在节点2编辑pfile
[oracle@rac2:/u01/app/oracle/product/11.2.0/db_1/dbs]$vi initorcldb1.ora
SPFILE='+ORADATA/orcldb/spfileorcldb.ora'
1.3.16 启动节点2数据库
export ORACLE_SID=orcldb2
sqlplus / as sysdba
startup
检查两个节点数据库状态
1.3.17 调整rac环境资源管理
在集群资源管理中增加新数据库orcldb
[oracle@rac1:/home/oracle]$srvctl add database -d orcldb -o $ORACLE_HOME
在节点1增加实例名orcldb1
[oracle@rac1:/home/oracle]$srvctl add instance -d orcldb -i orcldb1 -n rac1
在节点2增加实例名orcldb2
[oracle@rac1:/home/oracle]$srvctl add instance -d orcldb -i orcldb2 -n rac2
删除集群中原先存在的实例orcl
[oracle@rac1:/home/oracle]$srvctl remove database -d orcl
Remove the database orcl? (y/[n]) y
1.3.18 测试srvctl组件启动数据库
[oracle@rac1:/home/oracle]$srvctl start database -d orcldb
FAQ
RMAN> duplicate database to orcl backup location ‘/u01/rman/’ spfile set CLUSTER_DATABASE=FALSE;
文档 ID 1335479.1