天天看點

Oracle DG之Switchover

實體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資料庫即可。