下面再讨论一下主库是RAC,备用库是单机的switchover过程:
1).首先在主库完成以下操作:
SQL> select dest_id,thread#,max(sequence#) from v$archived_log group by dest_id,thread#;
DEST_ID THREAD# MAX(SEQUENCE#)
---------- ---------- --------------
2 1 153
1 2 119
1 1 153
2 2 119
SQL> alter system switch logfile;
System altered.
SQL> select dest_id,thread#,max(sequence#) from v$archived_log group by dest_id,thread#;
DEST_ID THREAD# MAX(SEQUENCE#)
---------- ---------- --------------
2 1 154
1 2 120
1 1 154
2 2 120
确保Data Guard环境正常工作。
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
--------------------
TO STANDBY
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY ;
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY
*
ERROR at line 1:
ORA-01105: mount is incompatible with mounts by other instances
必须先停止其他实例,只保留一个实例。
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY ;
Database altered.
SQL> shutdown immediate
ORA-01092: ORACLE instance terminated. Disconnection forced
SQL> exit
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options
[oracle@rhel1 admin]$ sql
SQL*Plus: Release 11.2.0.2.0 Production on Tue Apr 9 01:43:09 2013
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup mount
ORACLE instance started.
Total System Global Area 784998400 bytes
Fixed Size 2230600 bytes
Variable Size 486540984 bytes
Database Buffers 289406976 bytes
Redo Buffers 6819840 bytes
Database mounted.
SQL> alter database open read only;
Database altered.
2).接下来在备用库上执行以下操作:
SQL> alter database recover managed standby database cancel;
Database altered.
操作主库之前已经cancel;
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY
*
ERROR at line 1:
ORA-16139: media recovery required
需要做一下恢复操作。
SQL> alter database recover managed standby database;
alter database recover managed standby database
*
ERROR at line 1:
ORA-01013: user requested cancel of current operation
前台恢复操作,一定时间后按下Ctrl+C终止。
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
Database altered.
SQL> ALTER DATABASE OPEN;
Database altered.
SQL> select database_role from v$database;
DATABASE_ROLE
----------------
PRIMARY
备库已经变成了主库,切换成功。
3).在原来的主数据库执行以下操作:
SQL> select database_role from v$database;
DATABASE_ROLE
----------------
PHYSICAL STANDBY
原有的主库已经变成了备用库。
4).启动原来主库的其他实例。
SQL> startup
ORACLE instance started.
Total System Global Area 784998400 bytes
Fixed Size 2230600 bytes
Variable Size 473958072 bytes
Database Buffers 301989888 bytes
Redo Buffers 6819840 bytes
Database mounted.
Database opened.
SQL> select database_role,open_mode from v$database;
DATABASE_ROLE OPEN_MODE
---------------- --------------------
PHYSICAL STANDBY READ ONLY
作为备库实例启动正常。
5).在现有主库做一下日志切换测试。
SQL> alter system switch logfile;
System altered.
SQL> select dest_id,thread#,max(sequence#) from v$archived_log group by dest_id,thread#;
DEST_ID THREAD# MAX(SEQUENCE#)
---------- ---------- --------------
2 1 160
1 2 121
1 1 160
2 2 122
SQL> alter system switch logfile;
System altered.
SQL> r
1* alter system switch logfile
System altered.
SQL> select dest_id,thread#,max(sequence#) from v$archived_log group by dest_id,thread#;
DEST_ID THREAD# MAX(SEQUENCE#)
---------- ---------- --------------
2 1 162
1 2 121
1 1 162
2 2 122
SQL> select dest_id,thread#,max(sequence#) from v$archived_log group by dest_id,thread#;
DEST_ID THREAD# MAX(SEQUENCE#)
---------- ---------- --------------
2 1 162
1 2 121
1 1 162
2 2 122
从上面的日志切换测试来看,首先日志传输服务工作正常,且只有thread 1在工作,因为现有的主库是单实例嘛。
在现有的备库上执行以下查询:
SQL> select group#,thread#,status from v$standby_log;
GROUP# THREAD# STATUS
---------- ---------- ----------
5 1 ACTIVE
6 1 UNASSIGNED
7 1 UNASSIGNED
8 2 UNASSIGNED
9 2 UNASSIGNED
10 2 UNASSIGNED
6 rows selected.
从上面的查询可以看出,只有一个Standby Redo Log在工作,也是因为主库变成了单实例数据库。
--end--