
数据库状态管理
数据库状态分类
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。

查看主备数据库当前状态
直接使用show database命令,然后查看“Intended State”一项
DGMGRL> show database oms; /*主库查看 */
Database - oms
Role: PRIMARY
Intended State: TRANSPORT-ON
Instance(s):
oms
Database Status:
SUCCESS
DGMGRL>
DGMGRL> show database stoms; // 备库查看
Database - stoms
Role: PHYSICAL STANDBY
Intended State: APPLY-ON
Transport Lag: 0 seconds
Apply Lag: 0 seconds
Real Time Query: ON
Instance(s):
oms
Database Status:
SUCCESS
DGMGRL>
修改数据库的状态
通过edit命令来修改数据库的状态,命令语法如下:
EDIT DATABASE 'db_unique_nmae' SET STATE='database_state';
---设置standby数据库OFFLINE
DGMGRL> edit database stoms set state='OFFLINE';
操作要求关闭实例 "oms" (在数据库 "stoms" 上)
正在关闭实例 "oms"...
ORA-01031: insufficient privileges
警告: 您不再连接到 ORACLE。
请执行以下步骤以完成操作:
关闭实例 "oms" (属于数据库 "stoms")
-- 此时再看数据库的state已经是OFFLINE了
DGMGRL> show database stoms;
Database - stoms
Role: PHYSICAL STANDBY
Intended State: OFFLINE
Transport Lag: (unknown)
Apply Lag: (unknown)
Real Time Query: OFF
Instance(s):
oms
Database Status:
SHUTDOWN
DGMGRL>
--启动下这个数据库,然后再看数据库的state,又变成了ONLINE
DGMGRL> edit database stoms set state='ONLINE';
成功。
DGMGRL> show database stoms;
Database - stoms
Role: PHYSICAL STANDBY
Intended State: APPLY-ON
Transport Lag: 0 seconds
Apply Lag: 0 seconds
Real Time Query: OFF
Instance(s):
oms
Database Status:
SUCCESS
DGMGRL>
数据库属性管理
数据库属性分类
Broker管理的数据库属性包含两类:第一类是可监控的属性,第二类是可配置的属性。
可监控属性
顾名思义,可监控的属性是能在broker的界面中看到属性的设定值,但是不能够修改。
可配置属性
可配置属性既能监控,同时还能够动态的修改。可配置属性在数据库处于任何状态的是很都能够修改,不过当数据库处于OFFLINE状态或者是DISABLE状态的时候,属性的修改会先记录到broker配置文件中,在数据库broker被启用之后会被应用到据库中。
对于可配置的数据库属性,broker会保证启用了broker的数据库它在broker配置文件后中记录的数据库的属性和数据库运行所使用的参数是一致的,但这也有两种情况:
· 如果对应的数据库参数是可以动态更新的,那么broker配置文件、SGA、spfile这三个地方所涉及的属性值将会是一样的。
· 如果对应的数据库参数不能动态更新,那么在数据库重启之前broker配置文件、SGA这两个地方的参数值是一样的,spfile中参数值要在数据库重新启动之后才能与broker配置文件值一致。
显示和修改数据属性
同show database verbose命令可以查看数据库当前的属性设置,值显示为“(monitor)”的自然就是可监控的属性了,其他的属性都属于可配置的。
DGMGRL> show database verbose oms; 查看主库//
Database - oms
Role: PRIMARY
Intended State: TRANSPORT-ON
Instance(s):
oms
Properties:
DGConnectIdentifier = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.13.199.22)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SID=oms)))'
ObserverConnectIdentifier = ''
LogXptMode = 'ASYNC'
DelayMins = '0'
Binding = 'optional'
MaxFailure = '0'
MaxConnections = '1'
ReopenSecs = '300'
NetTimeout = '30'
RedoCompression = 'DISABLE'
LogShipping = 'ON'
PreferredApplyInstance = ''
ApplyInstanceTimeout = '0'
ApplyParallel = 'AUTO'
StandbyFileManagement = 'AUTO'
ArchiveLagTarget = '0'
LogArchiveMaxProcesses = '4'
LogArchiveMinSucceedDest = '1'
DbFileNameConvert = ''
LogFileNameConvert = ''
FastStartFailoverTarget = ''
StatusReport = '(monitor)'
InconsistentProperties = '(monitor)'
InconsistentLogXptProps = '(monitor)'
SendQEntries = '(monitor)'
LogXptStatus = '(monitor)'
RecvQEntries = '(monitor)'
HostName = 'oms'
SidName = 'oms'
StaticConnectIdentifier = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.13.199.22)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=oms_DGMGRL)(INSTANCE_NAME=oms)(SERVER=DEDICATED)))'
StandbyArchiveLocation = '/data/archivelog'
AlternateLocation = ''
LogArchiveTrace = '0'
LogArchiveFormat = '%t_%s_%r.arc'
TopWaitEvents = '(monitor)'
Database Status:
SUCCESS
DGMGRL> show database verbose stoms; //备库//
Database - stoms
Role: PHYSICAL STANDBY
Intended State: APPLY-ON
Transport Lag: 0 seconds
Apply Lag: 0 seconds
Real Time Query: OFF
Instance(s):
oms
Properties:
DGConnectIdentifier = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.13.195.39)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SID=oms)))'
ObserverConnectIdentifier = ''
LogXptMode = 'ASYNC'
DelayMins = '0'
Binding = 'OPTIONAL'
MaxFailure = '0'
MaxConnections = '1'
ReopenSecs = '300'
NetTimeout = '30'
RedoCompression = 'DISABLE'
LogShipping = 'ON'
PreferredApplyInstance = ''
ApplyInstanceTimeout = '0'
ApplyParallel = 'AUTO'
StandbyFileManagement = 'AUTO'
ArchiveLagTarget = '0'
LogArchiveMaxProcesses = '4'
LogArchiveMinSucceedDest = '1'
DbFileNameConvert = ''
LogFileNameConvert = ''
FastStartFailoverTarget = ''
StatusReport = '(monitor)'
InconsistentProperties = '(monitor)'
InconsistentLogXptProps = '(monitor)'
SendQEntries = '(monitor)'
LogXptStatus = '(monitor)'
RecvQEntries = '(monitor)'
HostName = 'tc_195_39'
SidName = 'oms'
StaticConnectIdentifier = '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.13.195.39)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=stoms_DGMGRL)(INSTANCE_NAME=oms)(SERVER=DEDICATED)))'
StandbyArchiveLocation = '/data/archivelog'
AlternateLocation = ''
LogArchiveTrace = '0'
LogArchiveFormat = '%t_%s_%r.arc'
TopWaitEvents = '(monitor)'
Database Status:
SUCCESS
DGMGRL>
修改数据库的属性
通过edit database命令来修改数据库的属性,命令语法如下:
EDIT DATABASE 'db_unique_name' SET PROPERTY 'property_name' =property_value;
---修改数据库的NetTimeout属性
-- 先看下当前的值
DGMGRL> show database oms NetTimeout;
NetTimeout = '30'
-- 将30修改成60
DGMGRL> edit database oms set property 'NetTimeout'=60;
Property "NetTimeout" updated
DGMGRL> show database oms NetTimeout; 查看已经修改成60//
NetTimeout = '60'
日志传送管理
使用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时是 | 否 |
通过edit configuration来操作设置broker保护模式
---先查看当前设置
DGMGRL> show configuration
配置 - dg_oms
保护模式: MaxPerformance
数据库:
oms - 主数据库
stoms - 物理备用数据库
快速启动故障转移: DISABLED
配置状态:
SUCCESS
DGMGRL>
-- 然后将它变更为MaxAvailability
DGMGRL> edit configuration set protection mode as maxavailability;
Error: ORA-16627: operation disallowed since no standby databases would remain to support protection mode
Failed.
DGMGRL>
不同的保护模式对broker操作的影响
· 当升级保护模式的时候,broker会自动的重启primary数据库。降低保护模式级别的时候是不需要重启数据库的。
· switchover操作不会改变当前的保护模式。
· 做手工的failover之后,如果原来保护模式是MaxProtection的话会被自动降级为MaxPerformance;如果是其他模式的话则保持不变。
· fast-start failover所作的自动的failover操作不会改变数据库的保护模式。
· 做disable操作或remove database之前,broker会检查disable之后是否还能保证满足当前的保护模式,如果不能的话disable/remove会失败。
· fast-start failover启用的是很不能做disable configuration操作。
数据库监控状态查看
Broker会自动的收集同一个配置之下的所有数据库的健康状态,管理员只需要通过简单的show命令就可以查看数据库的状态了。命令格式如下
show database db_unique_name statue_name
可用的状态命令列表如下:
StatusReport 显示所有broker检查到的问题
DGMGRL> show database oms statusreport
STATUS REPORT
INSTANCE_NAME SEVERITY ERROR_TEXT
LogXptStatus 显示日志传送的状态
DGMGRL> show database oms LogXptStatus
LOG TRANSPORT STATUS
PRIMARY_INSTANCE_NAME STANDBY_DATABASE_NAME STATUS
oms stoms
InconsistentProperties 显示不一致的数据库属性
DGMGRL> show database oms InconsistentProperties
INCONSISTENT PROPERTIES
INSTANCE_NAME PROPERTY_NAME MEMORY_VALUE SPFILE_VALUE BROKER_VALUE
DGMGRL>
InconsistentLogXptProps 显示不一致的日志传送设定






