天天看點

Data Guard Broker系列之四:資料庫管理

primary資料庫

online:預設狀态。primary資料庫正常打開,日志傳送服務正常傳送日志到standby資料庫。

當 資料庫轉為online狀态的時候,初始化參數log_archive_dest_n和log_archive_dest_state_n會被自動設定以 啟用日志傳送服務,同時primary資料庫以及所有standby資料庫的log_archive_config參數也會被設定,如果需要的話會根據 broker配置中的資訊重新設定資料庫的保護模式,同時将資料庫打開為讀寫模式,最後系統将做一個日志卻換。

log-transport-off:primary資料庫正常打開,日志傳送服務不傳送日志到standby資料庫。

當資料庫從别的狀态切換到log-transport-off狀态的時候,參數log_archive_dest_state_n會被設定成false,這樣到所有standby資料庫的日志傳送将會停止,但是primary資料庫的本地歸檔操作還是正常的。

offline: 資料庫關閉,不再接受broker管理,重新啟動資料庫之後恢複預設狀态。

當資料庫從别的狀态切換到offline狀态的時候,broker會關閉資料庫,當然此時資料庫無法被broker管理了,要重新啟用的話隻需要重新開機資料庫到mount狀态就行了,broker會自動的使資料庫online。

physical standby資料庫

online:預設狀态。資料庫處于mount狀态,日志恢複正常,不能進行隻讀查詢。

當資料庫裝換成online狀态,相關參數被設定以啟用日志恢複。

log-apply-off:資料庫mount,日志恢複停止,不能進行制度查詢。

當資料庫裝換成log-apply-off狀态時,如果之前資料庫online,則日志恢複關閉,如果之後是read-only則關閉資料庫到mount狀态。

read-only:資料庫隻讀打開,可以查詢,日志恢複停止。

當資料庫裝換成read-only狀态時,日志恢複被停止,同時将資料庫打開為隻讀。

offline:資料庫關閉,不再接受broker管理,重新啟動資料庫之後恢複預設狀态。

logical standby資料庫

online:預設狀态。資料庫隻讀打開,日志恢複正常。

轉換為online狀态時,broker将打開資料庫,同時啟用database guard以防止對表資料的修改,同時修改sql應用相關參數啟用sql應用。

log-apply-off:資料庫隻讀打開,日志恢複關。

轉換為log-apply-off狀态時,broker将停止sql應用草操作。

Data Guard Broker系列之四:資料庫管理

資料庫各種轉換路徑

1. 檢視一個資料庫目前的狀态

直接使用show database指令,然後檢視“intended state”一項

dgmgrl> show database torcla

database

  name:            torcla

  role:            physical standby

  enabled:         yes

  intended state:  online

  instance(s):

    torcla

current status for "torcla":

success

2. 修改資料庫的狀态

通過edit指令來修改資料庫的狀态,指令文法如下

edit database 'db_unique_name' set state='database_state';

下面我們來個設定資料庫offline的操作

-- 設定我們的standby資料庫offline

dgmgrl> edit database torcla set state='offline';

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

shutting down instance "torcla"...

ora-01109: database not open

database dismounted.

oracle instance shutdown.

-- 此時再看資料庫的state已經是offline了

sys@torcla> startup mount

oracle instance started.

total system global area 1191182336 bytes

fixedsize                  1259312bytes

variablesize             355207376bytes

databasebuffers          819200000bytes

redobuffers               15515648bytes

database mounted.

  role:            physicalstandby

  enabled:         no

  intendedstate:  offline

shutdown

-- 下面我們啟動下這個資料庫,然後再看資料庫的state,又變成了online

databasemounted.

  intendedstate:  online

currentstatusfor"torcla":

broker管理的資料庫屬性包含兩類:第一類是可監控的屬性,第二類是可配置的屬性。

可監控屬性顧名思義,可監控的屬性是能在broker的界面中看到屬性的設定值,但是不能夠修改。可配置屬性可配置屬性既能監控,同時還能夠動态的修改。可配置屬性在資料庫處于任何狀态的是很都能夠修改,不過當資料庫處于offline狀态或者是disable狀态的時候,屬性的修改會先記錄到broker配置檔案中,在資料庫broker被啟用之後會被應用到據庫中。

對于可配置的資料庫屬性,broker會保證啟用了broker的資料庫它在broker配置檔案後中記錄的資料庫的屬性和資料庫運作所使用的參數是一緻的,但這也有兩種情況:

如果對應的資料庫參數是可以動态更新的,那麼broker配置檔案、sga、spfile這三個地方所涉及的屬性值将會是一樣的。

如果對應的資料庫參數不能動态更新,那麼在資料庫重新開機之前broker配置檔案、sga這兩個地方的參數值是一樣的,spfile中參數值要在資料庫重新啟動之後才能與broker配置檔案值一緻。

1. 同show database verbose指令可以檢視資料庫目前的屬性設定,值顯示為“(monitor)”的自然就是可監控的屬性了,其他的屬性都屬于可配置的。

dgmgrl>  show database verbose torcla

  properties:

    initialconnectidentifier        = 'torcla.mycompany'

    logxptmode                      = 'sync'

    dependency                      = ''

    delaymins                       = '0'

    binding                         = 'optional'

    maxfailure                      = '0'

    maxconnections                  = '1'

    reopensecs                      = '300'

    nettimeout                      = '180'

    logshipping                     = 'on'

    preferredapplyinstance          = ''

    applyinstancetimeout            = '0'

    applyparallel                   = 'auto'

    standbyfilemanagement           = 'manual'

    archivelagtarget                = '3600'

    logarchivemaxprocesses          = '2'

    logarchiveminsucceeddest        = '1'

    dbfilenameconvert               = 'torclb, torcla'

    logfilenameconvert              = 'torclb, torcla'

    faststartfailovertarget         = ''

    statusreport                    = '(monitor)'

    inconsistentproperties          = '(monitor)'

    inconsistentlogxptprops         = '(monitor)'

    sendqentries                    = '(monitor)'

    logxptstatus                    = '(monitor)'

    recvqentries                    = '(monitor)'

    hostname                        = 'orainst.desktop.mycompany.com'

    sidname                         = 'torcla'

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

    standbyarchivelocation          = '/data1/dg/databases/torcla/redolog'

    alternatelocation               = ''

    logarchivetrace                 = '0'

    logarchiveformat                = 'log-%s-%t-%r.arc'

    latestlog                       = '(monitor)'

    topwaitevents                   = '(monitor)'

current status for"torcla":

2. 通過edit database指令修改資料庫屬性,基本文法如下

edit database db_unique_name set property 'property_name' =property_value;

下面實戰一下,修改下資料庫的nettimeout屬性

-- 先看下目前的值

dgmgrl> show database torcla nettimeout

  nettimeout = '60'

-- 将60修改成120

dgmgrl> edit database torcla set property 'nettimeout'=120;

property "nettimeout" updated

-- 再看torclb的broker日志檔案,可以看到broker在修改log_archive_dest_2值

dg2009-08-31-07:21:25        020 executing sql [altersystemsetlog_archive_dest_2 =  'service="(description=(address_list=(address=(protocol=tcp)(host=orainst.desktop.mycompany.com)(port=8000)))(connect_data=(service_name=torcla_xpt.mycompany)(instance_name=torcla)(server=dedicated)))"', '   lgwr sync affirm delay=0 optional max_failure=0 max_connections=1   reopen=300 db_unique_name="torcla" register net_timeout=120  valid_for=(online_logfile,primary_role)']

-- 這個時候torcla的broker日志檔案也有動作,是在同步broker配置……

dg2009-08-31-07:21:32        020drcx: startreceivingmetadatafile: /data1/dg/10.2.0.2/a10db/dbs/dr2torcla.dat

使用broker配置日志傳送管理需要涉及下面這些可配置的資料庫屬性。

logshipping決定是否傳送日志到指定的資料庫,和primary資料庫的狀态log-transport-off不同的是log-transport-off會停止向所有的standby資料庫傳送日志。

on:傳送日志到指定資料庫

off:不傳送日志到指定資料庫

logxptmode這個屬性設定的是log_archive_dest_n中傳送模式那部分

sync:相當于lgwr, sync, affirm

async:相當于lgwr, async, noaffirm

arch:相當于arch

standbyarchivelocation指定standby資料庫上從primary接收的歸檔日志的存放位置,和standby自己本地的日志歸檔不一樣,standby資料庫本地的日志歸檔由log_archive_dest_n指定。當然這個值最好設定和本地歸檔位置一樣最好。alternatelocation這個屬性是和standbyarchivelocation配合使用,如果設定了這兒屬性,一旦standbyarchivelocation指定的目錄因為磁盤滿之類的原因fail了的話資料庫就會歸檔日志存放在這個屬性指定的位置上。dependency這個參數設定一個standby資料庫的歸檔日志依賴于别的那個standby或者是primary資料庫,這個參數在多個資料庫放在一個機器上的是很很有用,可以保證不用再同一個機器上存好幾份同樣的歸檔日志。

日志應用相關的可配置參數有下面這些。

同時适應于redo apply和sql apply的

applyinstancetimeout

delaymins

preferredapplyinstance

隻适用于redo apply的屬性

applyparallel

隻适用于sql apply的屬性

lsbyaskiptxncfgpr

lsbydskiptxncfgpr

lsbyaskipcfgpr

lsbydskipcfgpr

lsbyaskiperrorcfgpr

lsbydskiperrorcfgpr

lsbymaxeventsrecorded

lsbytxnconsistency

lsbyrecordskiperrors

lsbyrecordskipddl

lsbyrecordappliedddl

lsbymaxsga

保護模式與其他設定之間的關系

保護模式 日志傳送模式 是否需要standby日志? 是否能和fast-start failover一起用

maxprotection

sync

maxavailability

maxperformance

async或arch

async時是

ps:在maxavailability和maxprotection保護模式下,standby database的standby redo logfile組個數必須大于等于standby database的standby redo logfile組數,并且standby redo logfile的大小必須大于等于redo logfile. 同時,standby redo logfile組的編号(v$standby_log.group#)必須于primary database上的standby redo logfile組編号(v$log.group#)一緻。

使用broker來設定保護模式也是通過edit configuration來操作

-- 先看下目前的設定,是maxperformance

dgmgrl> show configuration

configuration

  name:                fsf

  enabled:             yes

  protectionmode:     maxperformance

  fast-start failover: disabled

  databases:

    torcla - physical standby database

    torclb - primary database

-- 然後我們将它變更為maxavailability

dgmgrl> edit configuration set protection mode as maxavailability;

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

shutting down instance "torclb"...

database closed.

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

starting instance "torclb"...

  protectionmode:     maxavailability

  fast-startfailover: disabled

currentstatusfor"fsf":

1. 當更新保護模式的時候,broker會自動的重新開機primary資料庫。降低保護模式級别的時候是不需要重新開機資料庫的。

2. switchover操作不會改變目前的保護模式。

3. 做手工的failover之後,如果原來保護模式是maxprotection的話會被自動降級為maxperformance;如果是其他模式的話則保持不變。

4. fast-start failover所作的自動的failover操作不會改變資料庫的保護模式。

5. 做disable操作或remove database之前,broker會檢查disable之後是否還能保證滿足目前的保護模式,如果不能的話disable/remove會失敗。

6. fast-start failover啟用的是很不能做disable configuration操作。

broker會自動的收集同一個配置之下的所有資料庫的健康狀态,管理者隻需要通過簡單的show指令就可以檢視資料庫的狀态了。指令格式如下

show database db_unique_name statue_name

可用的狀态指令清單如下:

statusreport顯示所有broker檢查到的問題logxptstatus顯示日志傳送的狀态inconsistentproperties顯示不一緻的資料庫屬性inconsistentlogxptprops顯示不一緻的日志傳送設定

指令操作示例

dgmgrl> show database torclb statusreport

status report

       instance_name   severityerror_text

               torclb      errorora-16737: theredotransportserviceforstandbydatabase"torcla"hasanerror

dgmgrl> show database orclt1cn_alogxptstatus

logtransportstatus

primary_instance_namestandby_database_name               status

             torcla            torclb

dgmgrl> show database torcla inconsistentproperties

inconsistentproperties

   instance_name        property_name         memory_value         spfile_value         broker_value

dgmgrl> show database torcla inconsistentlogxptprops

inconsistentlogtransportproperties

   instance_name         standby_name        property_name         memory_value         broker_value

參考至:http://www.dbabeta.com/2009/learn-data-guard-broker_db-management.html

如有錯誤,歡迎指正

郵箱:[email protected]

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