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
如有錯誤,歡迎指正
作者:czmmiao 文章出處:http://czmmiao.iteye.com/blog/2124742