實體STANDBY的SWITCHOVER切換會把目前的一個實體STANDBY切換為PRIMARY資料庫,而PRIMARY資料庫且變成實體STNADBY資料庫。
一般SWITCHOVER切換都是計劃中的切換,特點是在切換後,不會丢失任何的資料,而且這個過程是可逆的,整個DATA GUARD環境不會被破壞,原來DATA GUARD環境中的所有實體和邏輯STANDBY都可以繼續工作。
在進行DATA GUARD的實體STANDBY切換前需要注意:
确認主庫和從庫間網絡連接配接通暢;
确認沒有活動的會話連接配接在資料庫中;
PRIMARY資料庫處于打開的狀态,STANDBY資料庫處于MOUNT狀态;
確定STANDBY資料庫處于ARCHIVELOG模式;
如果設定了REDO應用的延遲,那麼将這個設定去掉;
確定配置了主庫和從庫的初始化參數,使得切換完成後,DATA GUARD機制可以順利的運作。
登陸PRIMARY資料庫:
[oracle@yangtk2 ~]$ sqlplus "/ as sysdba"
SQL*Plus: Release 11.1.0.6.0 - Production on Thu Nov 8 02:20:13 2007
Copyright (c) 1982, 2007, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> SET PAGES 100 LINES 120
SQL> SET SQLP 'PRI_SQL> '
PRI_SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
--------------------
SESSIONS ACTIVE
PRI_SQL> SELECT COUNT(*) FROM V$SESSION WHERE USERNAME IS NOT NULL;
COUNT(*)
----------
1
雖然目前資料庫的狀态是SESSIONS ACTIVE而不是TO STANDBY,但是查詢V$SESSION會話,确認除了目前會話外,其他都是系統會話,那麼就可以在主庫進行SWITCHOVER切換了:
PRI_SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY;
Database altered.
PRI_SQL> SHUTDOWN IMMEDIATE
ORA-01507: database not mounted
ORACLE instance shut down.
PRI_SQL> STARTUP MOUNT
ORACLE instance started.
Total System Global Area 267825152 bytes
Fixed Size 1299316 bytes
Variable Size 159386764 bytes
Database Buffers 104857600 bytes
Redo Buffers 2281472 bytes
Database mounted.
重新開機資料庫,啟動到MOUNT狀态,注意,9i及以前版本需要START NOMOUNT,然後ALTER DATABASE MOUNT STANDBY DATABASE。
下面登陸STANDBY資料庫:
[oracle@yangtk ~]$ sqlplus "/ as sysdba"
SQL*Plus: Release 11.1.0.6.0 - Production on Sat Oct 20 12:16:01 2007
Copyright (c) 1982, 2007, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> SET PAGES 100 LINES 120
SQL> SET SQLP 'STB_SQL> '
STB_SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
--------------------
TO PRIMARY如果SWITCHOVER_STATUS的狀态為switchover pending,則需要先進行恢複再進行switchover
select switchover_status from v$database;
SWITCHOVER_STATUS
--------------------
SWITCHOVER PENDING
STB_SQL> alter database commit to switchover to primary;
alter database commit to switchover to primary
*
ERROR at line 1:
ORA-16139: media recovery required
STB_SQL> alter database recover managed standby database disconnect from session;
Database altered.
STB_SQL> alter database recover managed standby database cancel;
Database altered.
STB_SQL> select switchover_status from v$database;
SWITCHOVER_STATUS
--------------------
TO PRIMARY
下面就可以将STANDBY資料庫切換到PRIMARY資料庫:
STB_SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
Database altered.
STB_SQL> ALTER DATABASE OPEN;
Database altered.
STANDBY資料庫已經切換為PRIMARY資料庫,下面隻需要啟動将STANDBY開始接收并恢複主庫的日志就可以了。回到切換前的主庫現在的從庫:
PRI_SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
Database altered.
SWITCHOVER切換完成,最後檢查一下歸檔是否可以正常傳遞到STANDBY資料庫即可。