天天看點

Data Guard Broker系列之二:Data Guard Broker配置實戰

listener.ora設定

l_dg=

   (address=

        (protocol=tcp)(host=orainst.desktop.mycompany.com)(port=8000)(queuesize=32)

   )

log_file_l_torcla_001=/tmp/l_torclb_001.log

sid_list_l_dg=

  (sid_list =

    (sid_desc=

      (oracle_home=/data1/dg/10.2.0.2/a10db)

      (sid_name=torcl)

    )

本地tnsname.ora的設定

torcl.mycompany=

 (description=

        (enable=broken)

        (address_list=

                (address=(protocol=tcp)(host=orainst.desktop.mycompany.com)(port=8000))

        )

        (connect_data=

                (sid=torcl)

  )

torcla.mycompany=

        (sdu= 32767)

                (service_name=torcla.mycompany)

                (server=dedicated)

torclb.mycompany=

                (service_name=torclb.mycompany)

dg的相關設定

-- 保護模式

sys@torclb> select database_role,  protection_mode, open_mode, switchover_statusfrom v$database;

database_role        protection_mode           open_mode       switchover_status

-------------------- ------------------------- --------------- --------------------

primary              maximum performance       readwrite      sessions active

-- 日志歸檔相關設定

sys@torclb> show parameter log_archive_dest_1

name                                 type                              value

------------------------------------ --------------------------------- ------------------------------

log_archive_dest_1                   string                            location="/data1/dg/databases/

                                                                       torclb/redolog", valid_for=(onl

                                                                       ine_logfile,all_roles)

sys@torclb> show parameter log_archive_dest_2

log_archive_dest_1                   string                            service=torcla.mycompanyvalid_fo

                                                                       tr=(online_logfile, primary_ro

                                                                       tle)reopen=60optionallgwrs

                                                                       tyncaffirmdb_unique_name=torcla

下面按照上一篇文章所列出的準備工作清單一一做一遍。

不管是primary資料庫還是standby資料庫都要完成這一步,設定完畢後重新開機下資料庫使設定生效。

--在目前的primary上

sys@torclb> create spfile='/data1/dg/10.2.0.2/a10db/dbs/spfiletorclb.ora' from pfile;

file created.

--在目前的standby上

sys@torcla> create spfile='/data1/dg/10.2.0.2/a10db/dbs/spfiletorclb.ora' from pfile;

然後修改init檔案設定spfile參數:

-- primary的init檔案

$cat inittorclb.ora

spfile='spfiletorclb.ora'

-- standby的init檔案

$cat inittorcla.ora

spfile='spfiletorcla.ora'

配置dg_broker_config_filen

這裡我們的dg_broker_config_filen不做特别的設定,使用預設的$oracle_home/dbs目錄以及兩個預設的檔案名dr1.dat和dr2.dat。

當然也可以用sqlplus通過下面語句設定不同的目錄,要注意在兩個資料庫上面都要設定:

alter system set dg_broker_config_file1='/data1/dg/10.2.0.2/a10db/dbs/dr1torcla.dat';

alter system set dg_broker_config_file2='/data1/dg/10.2.0.2/a10db/dbs/dr2torcla.dat'

設定local_listener

這一步設定是為了保證一些service name能正确的被注冊上。

sys@torcla> alter system set local_listener='(description=(address=(protocol=tcp)(host=orainst.desktop.mycompany.com)(port=8000)))' scope=both;

system altered.

在目前的測試環境中primary和standby是在同一機器上面,是以這個service name的設定也是在同一個listener.ora檔案上,設定完了以後的listener.ora如下

     (sid_desc=

      (sid_name=torcla)

      (global_dbname=torcla_dgmgrl.mycompany)

      (sid_name=torclb)

      (global_dbname=torclb_dgmgrl.mycompany)

設定tnsmaes.ora

torcla_dgmgrl.mycompany = 

(description= 

   (address= (protocol = tcp)(host = orainst.desktop.mycompany.com)(port = 8000))

   (connect_data= 

     (service_name=torcla_dgmgrl.mycompany))) 

torclb_dgmgrl.mycompany = 

     (service_name=torclb_dgmgrl.mycompany)))

設定完畢後記得重新開機下listener,然後檢視一下設定的效果:

oracle@orainst[torcla]:~

$lsnrctlservicel_dg|grep'service '

service "torcl"  has 1 instance(s).

service "torcla.mycompany" has 1 instance(s).

service "torcla_dgmgrl.mycompany" has 1 instance(s).

service "torcla_xpt.mycompany" has 1 instance(s).

service "torclb.mycompany" has 1 instance(s).

service "torclb_dgmgrl.mycompany" has 1 instance(s).

service "torclb_xpt.mycompany" has 1 instance(s).

從上面的listener上注冊的服務我們可以看到動态注冊的_xpt已經有了,說明local_listener設定正确,_dgmgrl也配置正确。

這一步是啟動data guard broker monitor(dmon)程序,在兩個資料庫上面都運作下下面的指令

alter system set dg_broker_start=true scope=both;

然後檢視下結果,先看程序是否起來了

$ps -ef|grepdmon|grep -vgrep

oracle   19389     1  009:51 ?        00:00:00ora_dmon_torcla

oracle   19420     1  009:51 ?        00:00:00ora_dmon_torclb

可以看到兩個dmon程序都起來了,接下來看看service name _dgb有沒有被正确的注冊上

$lsnrctl service l_dg| grep 'service '

service "torcl" has 1 instance(s).

service "torcla_dgb.mycompany" has 1 instance(s).

service "torclb_dgb.mycompany" has 1 instance(s).

可以看到service name _dgb也正常的注冊上了,到現在我們前期的準備工就已經全部完成了。

現在我們可以來配置broker了,為了保證配置過程不會因為權限問題導緻問題,我們始終都是用sys連接配接資料庫的。

首先使用dgmgrl連接配接到primary機器上,運作下面的指令:

$dgmgrl sys/[email protected]

dgmgrl for linux: version10.2.0.2.0 - production

copyright(c)2000, 2005, oracle. all rights reserved.

welcome to dgmgrl,  type "help" for information.

connected.

dgmgrl> show configuration

error: ora-16532: data guard broker configuration does not exist

configuration details can not be determined by dgmgrl

目前還沒有任何的配置資訊,現在建立一個配置

dgmgrl> create configuration 'fsf' as

> primary database is 'torclb'

> connect identifier is torclb.mycompany;

configuration "fsf" created with primary database "torclb"

這樣我們就建立了一個名為fsf的broker配置,接下來把standby機器也就入到配置中

dgmgrl> add database 'torcla' as

> connect identifier is torcla.mycompany

> maintained as physical;

database "torcla" added

就這兩步,broker的最基本配置就完成了,這下可以用show configuration來看成果了。

configuration

  name:                fsf

  enabled:             no

  protectionmode:     maxperformance

  fast-start failover: disabled

  databases:

    torclb - primary database

    torcla - physical standby database

current status for "fsf":

disabled

可以看到torclb是primary資料庫,而torcla是physical standby資料庫,不過這是的broker配置的狀态是禁用的,說明我們的兩個資料庫是沒有被broker管理的,隻是加入到了broker配置中了而已,接下來啟用一下。

dgmgrl> enable configuration

enabled.

  enabled:             yes

success

這樣就成了,一個成功的broker配置完成,挺簡單的。

最後我們做一個switchover來檢驗下成果吧,具體的switchover的過程在後面再介紹。

dgmgrl> switchover to torcla

performing switchover now, please wait...

operation requires shutdown of instance "torclb" on database "torclb"

shutting down instance "torclb"...

ora-01109: database not open

database dismounted.

oracle instance shutdown.

operation requires shutdown of instance "torcla" on database "torcla"

shutting down instance "torcla"...

operation requires startup of instance "torclb" on database "torclb"

starting instance "torclb"...

oracle instance started.

database mounted.

operation requires startup of instance "torcla" on database "torcla"

starting instance "torcla"...

switchover succeeded, new primary is "torcla"

    torclb - physical standby database

    torcla - primary database

我們已經成功的将primary資料庫卻換成了torcla,用一個簡單的指令,這個就是broker的優勢所在,簡單!

參考至:http://www.dbabeta.com/2009/learn-data-guard-broker_a-broker-example.html

如有錯誤,歡迎指正

郵箱:[email protected]

作者:czmmiao  文章出處:http://czmmiao.iteye.com/blog/2124742