天天看点

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