Oracle单实例数据库迁移到Oracle RAC 环境之(3)--主备库Switchover

时间:2021-07-01 07:45:27

Oracle单实例数据库迁移到Oracle RAC 环境之(3)--主备库Switchover

系统环境:

操作系统:RedHat EL55

Oracle : Oracle 11.2.0.1.0

集群软件:Oracle GI 11.2.0.1.0

本案例采用的是基于DataGuard的迁移方式

Oracle单实例数据库迁移到Oracle RAC 环境之(3)--主备库Switchover

主备库实施切换,将RAC database切换成主库,既可以完成数据的迁移。

主库:

8:18:00 SYS@ cuug>select name,dbid,database_role,protection_mode,switchover_status from v$database;

NAME            DBID DATABASE_ROLE    PROTECTION_MODE      SWITCHOVER_STATUS

--------- ---------- ---------------- -------------------- --------------------

CUUG      1329392875 PRIMARY          MAXIMUM PERFORMANCE  TO STANDBY

备库:

SQL> select name,dbid,database_role,protection_mode,switchover_status from v$database;

NAME            DBID DATABASE_ROLE    PROTECTION_MODE      SWITCHOVER_STATUS

--------- ---------- ---------------- -------------------- --------------------

CUUG      1329392875 PHYSICAL STANDBY MAXIMUM PERFORMANCE  NOT ALLOWED



1、首先将主库(单实例)切换成备库

18:20:51 SYS@ cuug>alter database commit to switchover to standby with session shutdown ;Database altered.

18:21:25 SYS@ cuug>shutdown
ORA-01507: database not mounted
ORACLE instance shut down.

18:21:55 SYS@ cuug>startup mount;
ORACLE instance started.
Total System Global Area  418484224 bytes
Fixed Size                  1336932 bytes
Variable Size             264243612 bytes
Database Buffers          146800640 bytes
Redo Buffers                6103040 bytes
Database mounted.

18:22:03 SYS@ cuug>select name,dbid,database_role,protection_mode,switchover_status from v$database;
NAME            DBID DATABASE_ROLE    PROTECTION_MODE      SWITCHOVER_STATUS
--------- ---------- ---------------- -------------------- --------------------
CUUG      1329392875 PHYSICAL STANDBY MAXIMUM PERFORMANCE  TO PRIMARY
Elapsed: 00:00:00.01
18:22:08 SYS@ cuug>recover managed standby database disconnect from session;
Media recovery complete.

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;

NAME            DBID DATABASE_ROLE    PROTECTION_MODE      SWITCHOVER_STATUS

--------- ---------- ---------------- -------------------- --------------------

CUUG      1329392875 PRIMARY          MAXIMUM PERFORMANCE  RESOLVABLE GAP

SQL> alter system switch logfile;

System altered.

SQL> select name,dbid,database_role,protection_mode,switchover_status from v$database;

NAME            DBID DATABASE_ROLE    PROTECTION_MODE      SWITCHOVER_STATUS

--------- ---------- ---------------- -------------------- --------------------

CUUG      1329392875 PRIMARY          MAXIMUM PERFORMANCE  TO STANDBY

@至此,DG切换成功


3、启动node2上的Instnace(stddb2)

SQL> startupORACLE instance started.Total System Global Area  418484224 bytesFixed Size                  1336932 bytesVariable Size             318769564 bytesDatabase Buffers           92274688 bytesRedo Buffers                6103040 bytes

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

---------- ---------- ---------- ---------------- ----------

         1          1         31 CURRENT            52428800

         2          1         29 INACTIVE           52428800

         3          1         30 ACTIVE             52428800

缺少thread 2的日志,对于RAC应该有两个thread !

2)添加thread 2日志组

SQL> alter database add logfile thread 2 ('+dg1','+rcy1') size 50m;Database altered.SQL> alter database add logfile thread 2 ('+dg1','+rcy1') size 50m;Database altered.SQL> alter database add logfile thread 2 ('+dg1','+rcy1') size 50m;Database altered.SQL> select group#,member from v$logfile order by 1;    GROUP# MEMBER---------- --------------------------------------------------         1 +DG1/stddb/onlinelog/redo01a.log         1 +RCY1/stddb/onlinelog/redo01b.log         2 +RCY1/stddb/onlinelog/redo02b.log         2 +DG1/stddb/onlinelog/redo02a.log         3 +DG1/stddb/onlinelog/redo03a.log         3 +RCY1/stddb/onlinelog/redo03b.log         4 +DG1/stddb/onlinelog/group_4.280.848169735         4 +RCY1/stddb/onlinelog/group_4.287.848169817         5 +DG1/stddb/onlinelog/group_5.281.848169749         5 +RCY1/stddb/onlinelog/group_5.288.848169827         6 +DG1/stddb/onlinelog/group_6.282.848169759    GROUP# MEMBER---------- --------------------------------------------------         6 +RCY1/stddb/onlinelog/group_6.289.84816983112 rows selected.

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> startup ORACLE instance started.Total System Global Area  418484224 bytesFixed Size                  1336932 bytesVariable Size             318769564 bytesDatabase Buffers           92274688 bytesRedo Buffers                6103040 bytesDatabase mounted.Database opened.

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 ~]$ srvctl start database -d stddb通过node1连接:[oracle@node1 ~]$ sqlplus '/as sysdba'SQL*Plus: Release 11.2.0.1.0 Production on Wed May 21 19:18:37 2014Copyright (c) 1982, 2009, Oracle.  All rights reserved.Connected to:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - ProductionWith the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,Data Mining and Real Application Testing optionsSQL> select instance_name,status from gv$instance;INSTANCE_NAME    STATUS---------------- ------------stddb1           OPENstddb2           OPEN

通过node2连接:

[oracle@node2 admin]$ export ORACLE_SID=stddb2[oracle@node2 admin]$ sqlplus '/as sysdba'SQL*Plus: Release 11.2.0.1.0 Production on Wed May 21 19:19:53 2014Copyright (c) 1982, 2009, Oracle.  All rights reserved.Connected to:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - ProductionWith the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,Data Mining and Real Application Testing options

@至此,整个数据迁移的工作全部完成,对于单实例的原来的主库,可以继续作为备库构建容灾的环境,保护数据安全!

本文出自 “天涯客的blog” 博客,请务必保留此出处http://tiany.blog.51cto.com/513694/1415383