以下指令均在Standby端執行
1.如果是使用ARCH傳遞redo資料,那麼執行以下指令:
檢查是否有gap archive
SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;
如果有則register
ALTER DATABASE REGISTER PHYSICAL LOGFILE 'filespec1';
實行Failover:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
ALTER DATABASE ACTIVATE STANDBY DATABASE;
ALTER DATABASE MOUNT;
ALTER DATABASE OPEN;
2.如果是使用LGWR傳遞redo資料,那麼執行以下指令:
如果是由于網絡問題而導緻需要切換,那麼通常standby端的RFS程序并不會意識到primary已經不可通路,是以RFS程序也不會釋放目前的standby redo log檔案。
如果是primary端的資料庫執行個體由于故障中斷,那麼一般情況下standby端的RFS程序會立刻意識到primary已經不可通路,也就會立刻釋放目前的standby redo log檔案。
隻要RFS程序沒有釋放standby redo log檔案,那麼執行ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH指令就會在alertlog檔案中發現如下的報錯資訊
Warning: log 4 of thread 1 is being archived or modified
Recovery interrupted.
Media Recovery failed with error 261
如果在報上述錯誤的時候,執行SWITCH,那麼将會出現下面的錯誤:
ORA-16139: media recovery required
是以必須檢查alertlog檔案,直到發現如下資訊才表示RFS程序已經釋放了standby redo log檔案,這時候才可以作FINISH:
RFS: Possible network disconnect with primary database
促使RFS程序釋放standby redo log 檔案有兩種方法:
1. 等待RFS程序的network timeout,通常需要等待8分鐘左右
2. 關閉standby資料庫,再重新開啟,這樣會強制RFS程序釋放standby redo log
我們可以通過v$managed_standby視圖來監控RFS程序何時釋放
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;
alertlog中将顯示如下資訊,表示finish成功:
Terminal Incomplete Recovery: UNTIL CHANGE 3738452
Terminal Incomplete Recovery: End-Of-Redo log allocation
Terminal Incomplete Recovery: log 4 reserved for thread 1 seq# 8772
TERMINAL RECOVERY changing datafile format version from 8.0.0.0.0 to
9.0.0.0.0
Switching logfile format version from 8.0.0.0.0 to 9.0.0.0.0
Terminal Incomplete Recovery: clearing standby redo logs.
Terminal Incomplete Recovery: thread 1 seq# 8772 redo required
Terminal Incomplete Recovery: End-Of-Redo log /global/oradata/ctsdb/stdby_redo04.log
Identified end-of-REDO for thread 1 sequence 8772
Terminal Incomplete Recovery: end checkpoint SCN 3738453
Media Recovery Complete
Switching logfile format version from 9.0.0.0.0 to 8.0.0.0.0
Terminal Incomplete Recovery: successful completion
Begin: Wait for standby logfiles to be archived
Wed Sep 1 13:42:28 2004
ARC1: Evaluating archive log 4 thread 1 sequence 8772
ARC0: Evaluating archive log 4 thread 1 sequence 8772
ARC1: Beginning to archive log 4 thread 1 sequence 8772
ARC0: Unable to archive log 4 thread 1 sequence 8772
Creating archive destination LOG_ARCHIVE_DEST_1: '/global/oradata/ctsdb/archive/arch1_8772.log'
Log actively being archived by another process
ARC1: Completed archiving log 4 thread 1 sequence 8772
Wed Sep 1 13:42:43 2004
End: All standby logfiles have been archived
Resetting standby activation ID 4038461969 (0xf0b60a11)
Completed: ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH
FINSH成功之後再執行SWITCH:
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
SWITCH成功之後,重新啟動資料庫:
SHUTDOWN IMMEDIATE;
STARTUP;
使用Data Guard Broker
建立Management Server repository:
emca
啟動Management Server:
oemctl start oms
檢查Management Server狀态:
oemctl status oms sysman/oem_temp@bftest
啟動Intelligent Agent:
agentctl start agent
如果啟動agent報錯,則檢查相應的log檔案,如果log檔案中有如下錯誤:
Failed while initializing user subsystem
Error initializing subsystems
nmiumini_initializeUM: Unable to initialize UQAgent
則進行如下操作之後,重新啟動agent:
rm $ORACLE_HOME/network/agent/*.q
alter system set resource_manager_plan='SYSTEM_PLAN' scope=both;
在所有站點上将BROKER啟動。
SQL> ALTER SYSTEM SET DG_BROKER_START=TRUE SCOPE=BOTH;
System altered.
SQL> SHOW PARAMETER DG_BROKER_START
NAME TYPE VALUE
------------------------------------
dg_broker_start boolean TRUE
連接配接Data Guard Manager,必須使用具有sysdba權限的使用者連接配接到Primary庫上
>dgmgrl
DGMGRL> connect sys/dba
建立配置方案
DGMGRL> CREATE CONFIGURATION 'cts' AS
PRIMARY SITE IS 'bftest'
RESOURCE IS 'ctsdb'
HOSTNAME IS 'bftest'
INSTANCE NAME IS 'ctsdb'
SERVICE NAME IS 'ctsdb.primary'
SITE IS MAINTAINED AS PHYSICAL;
建立備用站點方案
DGMGRL> CREATE SITE 'report'
HOSTNAME IS 'report'
SERVICE NAME IS 'ctsdb.standby'
激活配置方案
DGMGRL> ENABLE CONFIGURATION;
激活資源
DGMGRL> ENABLE RESOURCE 'ctsdb';
資源的日志傳送模式必須和Primary庫的資料保護模式相比對,比如資料保護模式是maximize availability,那麼需要配置資源的LogXptMode屬性為SYNC方式。
DGMGRL>ALTER RESOURCE 'ctsdb' ON SITE 'Boston' SET PROPERTY LogXptMode=SYNC;
DGMGRL>ALTER RESOURCE 'report_db' ON SITE 'Beijing' SET PROPERTY LogXptMode=SYNC;
DGMGRL> ALTER CONFIGURATION SET PROTECTION MODE AS MAXAVAILABILITY;
檢視資源情況
DGMGRL> show resource verbose 'ctsdb';
檢視某個節點上資源中的某一屬性
DGMGRL> show resource verbose 'ctsdb' 'LogXptMode' on site 'Boston';
DGMGRL> SHOW RESOURCE 'ctsdb' LogXptStatus;
檢視Broker的日志
DGMGRL> show log latest on site 'Boston';
檢視資料庫告警日志
DGMGRL> show log alert latest on site 'Boston';
檢視資源的各種屬性
DGMGRL> SHOW RESOURCE 'ctsdb' SendQEntries;
DGMGRL> SHOW RESOURCE 'report_db' SbyLogQueue;
DGMGRL> show resource verbose 'ctsdb' InconsistentLogXptProps;
修改資源屬性,将自動修改資料庫的相應初始化參數
DGMGRL> ALTER RESOURCE product_db on site v280 SET PROPERTY StandbyArchiveDest = '/global/oradata/ctsdb/archive';
Property "standbyarchivedest" updated.
DGMGRL> ALTER RESOURCE product_db on site v280 SET PROPERTY StandbyFileManagement = 'AUTO';
Property "standbyfilemanagement" updated.
DGMGRL> ALTER RESOURCE product_db on site v280 SET PROPERTY ArchiveLagTarget = '3600';
Property "archivelagtarget" updated.
停止Data Guard環境中的某個節點
DGMGRL> ALTER RESOURCE 'report_db' ON SITE 'Beijing' SETSTATE='offline';
啟動Data Guard環境中的某個節點
DGMGRL> ALTER RESOURCE 'report_db' ON SITE 'Beijing' SETSTATE='LOGICAL-APPLY-ON';
修改 Data Guard環境中的某個節點的狀态
DGMGRL> ALTER RESOURCE 'report_db' ON SITE 'v480' SETSTATE='READ-ONLY';
先停止連接配接到備用庫上的所有連接配接
DGMGRL> ALTER RESOURCE 'report_db' ON SITE 'v480' SETSTATE='PHYSICAL-APPLY-ON';
停止Broker
SQL> ALTER SYSTEM SET DG_BROKER_START=FALSE;
作Switchover
DGMGRL> SWITCHOVER TO 'v480';
然後關閉Pirmary和Standby,重新啟動
七.在Cluster環境中的主備切換步驟
在應用中cluster環境是很常見的,下面簡單介紹一下在Sun Cluster 3.0的環境中,如果作Data Guard主備資料庫的Switchover工作。
1.由于Cluster環境的監控,我們要手動關閉資料庫的話,必須先關閉cluster,單獨起一個節點的oracle。其中listener.ora.sigle的配置檔案是預先寫好的監聽配置,主要不同是用主機的真實IP替換原先Cluster環境中的虛拟IP。
/usr/cluster/bin/scswitch -F -g oracle-rg
mount /global/oradata
cd /export/home/oracle/app/oracle/product/9.2.0/network/admin
cp listener.ora.sigle listener.ora
lsnrctl start
lsnrctl start listener_dg
sqlplus “/ as sysdba”
startup
2.在SQL*Plus中依次進行以下操作,完成切換Primary和Standby的工作
主資料庫端:
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY;
STARTUP NOMOUNT;
ALTER DATABASE MOUNTSTANDBY DATABASE;
備用資料庫端:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
八.參考文檔
Oracle Data Guard Concepts and Administration Release 2 (9.2)
Oracle9i Data Guard Broker Release 2 (9.2)
技術專題總結:standby Database - snowhite、chao_ping
Oracle 9i備用資料庫配置使用參考手冊 - piner
[作者簡介]
張樂奕,通常使用的網名為kamus,也曾用過seraphim,現在任職于北京某大型軟體公司,Oracle資料庫DBA,主要負責證券行業的核心交易系統資料庫管理及維護工作。
熱切關注Oracle技術和相關作業系統技術,出沒于各大資料庫技術論壇,目前是中國最大的Oracle技術論壇www.itpub.net的資料庫管理版版主,