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。
-
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。
-
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”一项
Database
Name: torcla
Role: PHYSICAL STANDBY
Enabled: YES
Intended State: ONLINE
Instance(s):
torcla
Current status for "torcla":
SUCCESS
2. 修改数据库的状态
通过edit命令来修改数据库的状态,命令语法如下
下面我们来个设置数据库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
IntendedState: OFFLINE
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
IntendedState: ONLINE
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)”的自然就是可监控的属性了,其他的属性都属于可配置的。
Database
Name: torcla
Role: PHYSICALSTANDBY
Enabled: YES
IntendedState: ONLINE
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命令修改数据库属性,基本语法如下
下面实战一下,修改下数据库的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:不传送日志到指定数据库
- SYNC:相当于LGWR, SYNC, AFFIRM
- ASYNC:相当于LGWR, ASYNC, NOAFFIRM
- ARCH:相当于ARCH
除了上面几个重要的设置之外还有Binding、MaxFailure、NetTimeout、ReopenSecs这几个属性,这些属性会在数据库加入broker的时候自动导入,通常不需要修改。
日志应用管理
日志应用相关的可配置参数有下面这些。
同时适应于Redo Apply和SQL Apply的- ApplyInstanceTimeout
- DelayMins
- PreferredApplyInstance
- ApplyParallel
- 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来操作
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命令就可以查看数据库的状态了。命令格式如下
可用的状态命令列表如下:
StatusReport显示所有broker检查到的问题LogXptStatus显示日志传送的状态InconsistentProperties显示不一致的数据库属性InconsistentLogXptProps显示不一致的日志传送设定命令操作示例
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
如有错误,欢迎指正