`

Data Guard Broker系列之四:数据库管理

 
阅读更多

数据库状态管理

数据库状态分类

broker管理的数据库可以存在多种不同的状态,在DG中扮演不同角色的数据的状态类型也不一样,详细状态如下。

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管理,重新启动数据库之后恢复默认状态。
    当数据库从别的状态切换到OFFLINE状态的时候,broker会关闭数据库,当然此时数据库无法被broker管理了,要重新启用的话只需要重启数据库到MOUNT状态就行了,broker会自动的使数据库ONLINE。
logical Standby数据库
  • ONLINE:默认状态。数据库只读打开,日志恢复正常。
    转换为ONLINE状态时,broker将打开数据库,同时启用database guard以防止对表数据的修改,同时修改SQL应用相关参数启用SQL应用。
  • LOG-APPLY-OFF:数据库只读打开,日志恢复关。
    转换为LOG-APPLY-OFF状态时,broker将停止SQL应用草操作。
  • OFFLINE:数据库关闭,不再接受broker管理,重新启动数据库之后恢复默认状态。
    当数据库从别的状态切换到OFFLINE状态的时候,broker会关闭数据库,当然此时数据库无法被broker管理了,要重新启用的话只需要重启数据库到MOUNT状态就行了,broker会自动的使数据库ONLINE。
数据库各种转换路径
数据库各种转换路径

 

相关DGMGRL命令

1. 查看一个数据库当前的状态

直接使用show database命令,然后查看“Intended State”一项

DGMGRL> show database torcla
Database
 
Name:            torcla
 
Role:            PHYSICAL STANDBY
 
Enabled:         YES
 
Intended StateONLINE
 
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.
DGMGRL> show database torcla
Database
 
Name:            torcla
 
Role:            PHYSICALSTANDBY
 
Enabled:         NO
 
IntendedStateOFFLINE
 
Instance(s):
    
torcla
 
Current status for "torcla":
SHUTDOWN
 
-- 下面我们启动下这个数据库,然后再看数据库的state,又变成了ONLINE
SYS@torcla> startup mount
ORACLE instance started.
 
Total System Global Area 1191182336 bytes
FixedSize                  1259312bytes
VariableSize             355207376bytes
DatabaseBuffers          819200000bytes
RedoBuffers               15515648bytes
Databasemounted.
 
DGMGRL> show database torcla
Database
 
Name:            torcla
 
Role:            PHYSICALSTANDBY
 
Enabled:         YES
 
IntendedStateONLINE
 
Instance(s):
    
torcla
 
Currentstatusfor"torcla":
SUCCESS

数据库属性管理

数据库属性分类

broker管理的数据库属性包含两类:第一类是可监控的属性,第二类是可配置的属性。

可监控属性
顾名思义,可监控的属性是能在broker的界面中看到属性的设定值,但是不能够修改。
可配置属性
可配置属性既能监控,同时还能够动态的修改。可配置属性在数据库处于任何状态的是很都能够修改,不过当数据库处于OFFLINE状态或者是DISABLE状态的时候,属性的修改会先记录到broker配置文件中,在数据库broker被启用之后会被应用到据库中。

对于可配置的数据库属性,broker会保证启用了broker的数据库它在broker配置文件后中记录的数据库的属性和数据库运行所使用的参数是一致的,但这也有两种情况:

  • 如果对应的数据库参数是可以动态更新的,那么broker配置文件、SGA、spfile这三个地方所涉及的属性值将会是一样的。
  • 如果对应的数据库参数不能动态更新,那么在数据库重启之前broker配置文件、SGA这两个地方的参数值是一样的,spfile中参数值要在数据库重新启动之后才能与broker配置文件值一致。

显示/修改数据库属性

1. 同show database verbose命令可以查看数据库当前的属性设置,值显示为“(monitor)”的自然就是可监控的属性了,其他的属性都属于可配置的。

DGMGRLshow database verbose torcla
 
Database
 
Name:            torcla
 
Role:            PHYSICALSTANDBY
 
Enabled:         YES
 
IntendedStateONLINE
 
Instance(s):
    
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":
SUCCESS

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
DG2009-08-31-07:21:32        020DRCX: Receivingblock#1, 86 blocks.

日志传送管理

使用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数据库,这个参数在多个数据库放在一个机器上的是很很有用,可以保证不用再同一个机器上存好几份同样的归档日志。

除了上面几个重要的设置之外还有Binding、MaxFailure、NetTimeout、ReopenSecs这几个属性,这些属性会在数据库加入broker的时候自动导入,通常不需要修改。

日志应用管理

日志应用相关的可配置参数有下面这些。

同时适应于Redo Apply和SQL Apply的
  • ApplyInstanceTimeout
  • DelayMins
  • PreferredApplyInstance
只适用于Redo Apply的属性
  • ApplyParallel
只适用于SQL Apply的属性
  • LsbyASkipTxnCfgPr
  • LsbyDSkipTxnCfgPr
  • LsbyASkipCfgPr
  • LsbyDSkipCfgPr
  • LsbyASkipErrorCfgPr
  • LsbyDSkipErrorCfgPr
  • LsbyMaxEventsRecorded
  • LsbyTxnConsistency
  • LsbyRecordSkipErrors
  • LsbyRecordSkipDdl
  • LsbyRecordAppliedDdl
  • LsbyMaxSga
  • LsbyMaxServers

数据库保护模式

设置数据库的保护模式

保护模式与其他设置之间的关系

 

保护模式 日志传送模式 是否需要standby日志? 是否能和fast-start failover一起用
MAXPROTECTION SYNC
MAXAVAILABILITY SYNC
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.
Database dismounted.
ORACLE instance shutdown.
Operation requires startup of instance "torclb" on database "torclb"
Starting instance "torclb"...
ORACLE instance started.
Database mounted.
DGMGRL> show configuration
 
Configuration
 
Name:                FSF
 
Enabled:             YES
 
ProtectionMode:     MaxAvailability
 
Fast-StartFailover: DISABLED
 
Databases:
    
torcla - Physical standby database
    
torclb - Primary database
 
Currentstatusfor"FSF":
SUCCESS

broker还是很聪明的,会自动的关闭primary数据库然后将保护模式修改为MaxAvailability。

不同的保护模式对broker操作的影响

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

如有错误,欢迎指正

邮箱:czmcj@163.com

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics