Oracle单实例数据库迁移到Oracle RAC 环境之(3)--主备库Switchover
系统环境:
操作系统:RedHat EL55
Oracle : Oracle 11.2.0.1.0
集群软件:Oracle GI 11.2.0.1.0
本案例采用的是基于DataGuard的迁移方式
主备库实施切换,将RAC database切换成主库,既可以完成数据的迁移。
主库:
8:18:00 SYS@ cuug>select name,dbid,database_role,protection_mode,switchover_status from v$database;
NAMEDBID DATABASE_ROLE PROTECTION_MODE SWITCHOVER_STATUS
--------- ---------- ---------------- -------------------- --------------------
CUUG 1329392875PRIMARYMAXIMUM PERFORMANCETO STANDBY
备库:
SQL> select name,dbid,database_role,protection_mode,switchover_status from v$database;
NAMEDBID DATABASE_ROLE PROTECTION_MODE SWITCHOVER_STATUS
--------- ---------- ---------------- -------------------- --------------------
CUUG 1329392875PHYSICAL STANDBYMAXIMUM PERFORMANCE NOT ALLOWED
1、首先将主库(单实例)切换成备库
18:20:51SYS@cuug>alterdatabasecommittoswitchovertostandbywithsessionshutdown;Databasealtered.18:21:25SYS@cuug>shutdownORA-01507:databasenotmountedORACLEinstanceshutdown.18:21:55SYS@cuug>startupmount;ORACLEinstancestarted.TotalSystemGlobalArea418484224bytesFixedSize1336932bytesVariableSize264243612bytesDatabaseBuffers146800640bytesRedoBuffers6103040bytesDatabasemounted.18:22:03SYS@cuug>selectname,dbid,database_role,protection_mode,switchover_statusfromv$database;NAMEDBIDDATABASE_ROLEPROTECTION_MODESWITCHOVER_STATUS---------------------------------------------------------------------------CUUG1329392875PHYSICALSTANDBYMAXIMUMPERFORMANCETOPRIMARYElapsed:00:00:00.0118:22:08SYS@cuug>recovermanagedstandbydatabasedisconnectfromsession;Mediarecoverycomplete.
2、将备库(RAC)切换成主库
SQL> alter database commit to switchover to primary;
Database altered.
SQL> alter database open;
Database altered.
SQL> select name,dbid,database_role,protection_mode,switchover_status from v$database;
NAMEDBID DATABASE_ROLE PROTECTION_MODE SWITCHOVER_STATUS
--------- ---------- ---------------- -------------------- --------------------
CUUG 1329392875PRIMARYMAXIMUM PERFORMANCE RESOLVABLE GAP
SQL> alter system switch logfile;
System altered.
SQL> select name,dbid,database_role,protection_mode,switchover_status from v$database;
NAMEDBID DATABASE_ROLE PROTECTION_MODE SWITCHOVER_STATUS
--------- ---------- ---------------- -------------------- --------------------
CUUG 1329392875 PRIMARYMAXIMUM PERFORMANCE TO STANDBY
@至此,DG切换成功
3、启动node2上的Instnace(stddb2)
SQL>startupORACLEinstancestarted.TotalSystemGlobalArea418484224bytesFixedSize1336932bytesVariableSize318769564bytesDatabaseBuffers92274688bytesRedoBuffers6103040bytes
ORA-01618: redo thread 2 is not enabled - cannot mount
启动失败,解决方法:
1)查看实例1的redo日志
SQL> select group#,thread#,sequence#,status,bytes from v$log;
GROUP# THREAD# SEQUENCE# STATUS BYTES
---------- ---------- ---------- ---------------- ----------
1131 CURRENT52428800
2129 INACTIVE52428800
3130 ACTIVE 52428800
缺少thread 2的日志,对于RAC应该有两个thread !
2)添加thread 2日志组
SQL>alterdatabaseaddlogfilethread2('+dg1','+rcy1')size50m;Databasealtered.SQL>alterdatabaseaddlogfilethread2('+dg1','+rcy1')size50m;Databasealtered.SQL>alterdatabaseaddlogfilethread2('+dg1','+rcy1')size50m;Databasealtered.SQL>selectgroup#,memberfromv$logfileorderby1;GROUP#MEMBER------------------------------------------------------------1+DG1/stddb/onlinelog/redo01a.log1+RCY1/stddb/onlinelog/redo01b.log2+RCY1/stddb/onlinelog/redo02b.log2+DG1/stddb/onlinelog/redo02a.log3+DG1/stddb/onlinelog/redo03a.log3+RCY1/stddb/onlinelog/redo03b.log4+DG1/stddb/onlinelog/group_4.280.8481697354+RCY1/stddb/onlinelog/group_4.287.8481698175+DG1/stddb/onlinelog/group_5.281.8481697495+RCY1/stddb/onlinelog/group_5.288.8481698276+DG1/stddb/onlinelog/group_6.282.848169759GROUP#MEMBER------------------------------------------------------------6+RCY1/stddb/onlinelog/group_6.289.84816983112rowsselected.
3)激活thread 2
SQL> alter database enable thread 2;
Database altered.
4)再从node 2 open database
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-30012: undo tablespace 'UNDOTBS2' does not exist or of wrong type
Process ID: 10707
Session ID: 1 Serial number: 3
看来是缺少undo tablespace;
回到node 1添加表空间:
SQL> alter system set db_create_file_dest='+dg1';
System altered.
SQL> create undo tablespace undotbs2;
Tablespace created.
重新在node2上启动Instance:
SQL>startupORACLEinstancestarted.TotalSystemGlobalArea418484224bytesFixedSize1336932bytesVariableSize318769564bytesDatabaseBuffers92274688bytesRedoBuffers6103040bytesDatabasemounted.Databaseopened.
SQL> show parameter undo
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS2
SQL>
@至此,node2上的Instance 启动完毕,数据迁移完成。
4、将RAC上的database和Instance注册到CRS
由于RAC是基于CRS管理的,需要把database和instance注册到CRS里进行管理
1)注册数据库
[oracle@node1 ~]$srvctl add database -d stddb -o $ORACLE_HOME -n cuug
2)注册实例
[oracle@node1 ~]$srvctl add instance -d stddb -i stddb1 -n node1
[oracle@node1 ~]$srvctl add instance -d stddb -i stddb2 -n node2
3)启动数据库
[oracle@node1~]$srvctlstartdatabase-dstddb通过node1连接:[oracle@node1~]$sqlplus'/assysdba'SQL*Plus:Release11.2.0.1.0ProductiononWedMay2119:18:37Copyright(c)1982,,Oracle.Allrightsreserved.Connectedto:OracleDatabase11gEnterpriseEditionRelease11.2.0.1.0-ProductionWiththePartitioning,RealApplicationClusters,AutomaticStorageManagement,OLAP,DataMiningandRealApplicationTestingoptionsSQL>selectinstance_name,statusfromgv$instance;INSTANCE_NAMESTATUS----------------------------stddb1OPENstddb2OPEN
通过node2连接:
[oracle@node2admin]$exportORACLE_SID=stddb2[oracle@node2admin]$sqlplus'/assysdba'SQL*Plus:Release11.2.0.1.0ProductiononWedMay2119:19:53Copyright(c)1982,,Oracle.Allrightsreserved.Connectedto:OracleDatabase11gEnterpriseEditionRelease11.2.0.1.0-ProductionWiththePartitioning,RealApplicationClusters,AutomaticStorageManagement,OLAP,DataMiningandRealApplicationTestingoptions
@至此,整个数据迁移的工作全部完成,对于单实例的原来的主库,可以继续作为备库构建容灾的环境,保护数据安全!