天天看點

Oracle9i資料庫DataGuard實施及維護手冊3

以下指令均在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的資料庫管理版版主,