Data Guard Broker 基础
1 Data Guard Broker配置要求:
数据库版本为:企业版10G R1以上,可以是单实例或者rac环境;
在主库和备库上的COMPATIBLE参数必须设定为9.2.0或更高;
必须有oracle网络支持,GLOBAL_DBNAME属性必须设定为db_uniquename_DGMGRL.db_domain;
DG_BROKER_START参数要设置为TRUE;
主库必须运行在归档模式;
使用spfile来保证broker的配置文件和服务器初始化参数文件的一致;
所有的数据库必须在mount(物理备库)或者open(主库和逻辑备库)状态;
在rac环境下还需要配置DB_BROKER_CONFIG_FILEn参数,将该参数指定共享存储上;
rac环境下,需要在OCR中要设定start_options参数为mount;
srvctladd database -d <db_unique_name> -o <ORACLE_HOME> -s mount 或者 srvctlmodify database -d <db_unique_name> -o <ORACLE_HOME> -s mount
dataguard broker体系结构示意图:
1.1 Broker
DataGuard环境设置了Broker后,当主库出现一下情况,Broker就会自动进行主备库的切换。
1)Instance Failure
2)Shutdown Abort
3)Offline Datafiles due to I/O error
4)Network disconnection
切换时,Observer会将备库变成主库。 同时Observer 通过应用Flashback log将原来的主库变成备库。 所以,Data Guard Broker必须开启Flashback,同时将DG 配置在maximum availability模式。
DataGuard Broker 会在所有的主备库上使用自己的DMON进程和配置文件进行通信。当我们将DG_BROKER_START 设置为true之后,DMON进程就会启动。 对于Broker的配置文件,我们可以通过Enterprise Manger 或者使用DGMGRL命令进行创建。
Broker的配置文件有自己的参数和设置。 Data Guard 允许有多分配置文件,所以我们需要在DG_BROKER_CONFIG_FILEn 参数里指定正确的配置文件。 要注意的是, 这个控制文件是二进制文件,不要手动去修改它, 这样会破坏这个文件。
如果是RAC 环境, 所有的实例有一份Broker 配置文件。 该文件放在共享设备上。
1.2 MaximumAvailability模式
最高可用性(Maximum availability):这种模式在不影响Primary数据库可用前提下,提供最高级别的数据保护策略。其实现方式与最大保护模式类似,也是要求本地事务在提交前必须至少写入一台Standby数据库的Standby Redologs中,不过与最大保护模式不同的是,如果出现故障导致Standby数据库无法访问,Primary数据库并不会被Shutdown,而是自动转为最高性能模式,等Standby数据库恢复正常之后,Primary数据库又会自动转换成最高可用性模式。
Maximumprotection/AVAILABILITY模式必须满足以下条件:
(1)Redo Archival Process: LGWR
(2)Network Tranmission mode: SYNC
(3)Disk Write Option: AFFIRM
(4)Standby Redo Logs: Yes
(5)standby database type: Physical Only
启动flashbackdatabase.
主库: 这个操作也需要在非open 状态执行。 主库需要shutdown后,启动到mount 状态执行。
SQL> Alterdatabase flashback on;
备库:需要先取消recover 进程,不然会报错。
2 进入DG BORKER 管理接口
.[oracle@DB-MASTERDBMAST]dgmgrl
DGMGRL for Linux: Version11.2.0.4.0 - 64bit Production
Copyright (c) 2000, 2009,Oracle. All rights reserved.
欢迎使用 DGMGRL, 要获取有关信息请键入 "help"。
DGMGRL> help
可使用以下命令:
add 在中介配置中添加备用数据库
connect 连接到 Oracle 数据库实例
convert 将数据库从一种类型转换为另一种
create 创建中介配置
disable 禁用配置, 数据库或快速启动故障转移
edit 编辑配置, 数据库或实例
enable 启用配置, 数据库或快速启动故障转移
exit 退出程序
failover 将备用数据库更改为主数据库
help 显示命令的说明和语法
quit 退出程序
reinstate 将标记为恢复的数据库更改为可行的备用数据库
rem DGMGRL 会忽略注释
remove 删除配置, 数据库或实例
show 显示有关配置, 数据库或实例的信息
shutdown 关闭当前正在运行的 Oracle 数据库实例
sql 执行 SQL 语句
start 启动快速启动故障转移观察程序
startup 启动 Oracle 数据库实例
stop 停止快速启动故障转移观察程序
switchover 在主数据库和备用数据库之间切换角色
使用 "help<command>" 可以查看各个命令的语法
3 连接主库
DGMGRL> connectsys/oracle@DBMAST
已连接。
4 创建配置文件
DGMGRL> help create
创建中介配置
语法:
CREATE CONFIGURATION <configurationname> AS
PRIMARY DATABASE IS <database name>
CONNECT IDENTIFIER IS <connect identifier>;
DGMGRL> createconfiguration dg_broker_mast as primary database is DBMAST connect identifieris DBMAST;
已创建配置"dg_broker_mast", 其中主数据库为 "dbmast"
DGMGRL> showconfiguration;
配置 - dg_broker_mast
保护模式: MaxPerformance
数据库:
dbmast - 主数据库
快速启动故障转移: DISABLED
配置状态:
DISABLED
DGMGRL> enable configuration;
已启用。
DGMGRL> show configuration;
配置 - dg_broker_mast
保护模式: MaxPerformance
数据库:
dbmast - 主数据库
快速启动故障转移: DISABLED
配置状态:
SUCCESS
5添加备数据库
ADD DATABASE <databasename> <--显示名称
[AS CONNECT IDENTIFIERIS <connect identifier>] ßTNSNAME
[MAINTAINED AS{PHYSICAL|LOGICAL}];
添加standby database到配置
DGMGRL> add database dbsalve as connect identifier is dbsalve maintained as physical;
这里的参数要说明一下.add database ‘dbsalve′ ,这儿的dbsalve是指database的db_unique_name,
而AS CONNECT IDENTIFIER IS dbsalve这里的dbsalve是指tnsname.ora连接到standby database的net service name.
6 要配置成最大可用模式,
先把备库先移除去. 修改主库成最大可用模式后
DGMGRL> show configuration
配置 - dg_borker_mast_conf
保护模式: MaxAvailability
数据库:
dbmast - 主数据库
快速启动故障转移: DISABLED
配置状态:
SUCCESS
7 重新添加备库
DGMGRL> add database DBSALVE as connect identifier is DBSALVE maintained as physical;
已添加数据库 "dbsalve"
DGMGRL> show configuration
配置 - dg_borker_mast_conf
保护模式: MaxAvailability
数据库:
dbmast - 主数据库
dbsalve - 物理备用数据库 (禁用)
快速启动故障转移: DISABLED
配置状态:
SUCCESS
DGMGRL> enable database dbsalve;
显示主和备库所有属性信息
DGMGRL> show database verbose dbmast;
数据库 - dbmast
角色: PRIMARY
预期状态: TRANSPORT-ON
实例:
DBMAST
属性:
DGConnectIdentifier ='dbmast'
ObserverConnectIdentifier =''
LogXptMode = 'SYNC'
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 =''
InconsistentProperties = '(monitor)'
InconsistentLogXptProps ='(monitor)'
SendQEntries = '(monitor)'
LogXptStatus = '(monitor)'
RecvQEntries = '(monitor)'
ApplyLagThreshold = '0'
TransportLagThreshold ='0'
TransportDisconnectedThreshold ='30'
SidName = 'DBMAST'
StaticConnectIdentifier ='(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=DB-MASTER)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=DBMAST_DGMGRL)(INSTANCE_NAME=DBMAST)(SERVER=DEDICATED)))'
StandbyArchiveLocation ='/u05/arch_backup'
AlternateLocation = ''
LogArchiveTrace = '0'
LogArchiveFormat = '%t_%s_%r.archlog'
TopWaitEvents = '(monitor)'
数据库状态:
SUCCESS
DGMGRL> show database verbose dbsalve;
数据库 - dbsalve
角色: PHYSICAL STANDBY
预期状态: APPLY-ON
传输滞后: 0 秒 (已在 0 秒之前计算)
应用滞后: 0 秒 (已在 0 秒之前计算)
应用速率: 5.31 MB/秒
实时查询: ON
实例:
DBSALVE
属性:
DGConnectIdentifier ='dbsalve'
ObserverConnectIdentifier =''
LogXptMode = 'SYNC'
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 = '/u04/DBMAST, /u04/DBSALVE'
LogFileNameConvert ='/u01/online_log_flash/DBMAST, /u02/onlinelog/DBSALVE'
FastStartFailoverTarget =''
InconsistentProperties ='(monitor)'
InconsistentLogXptProps ='(monitor)'
SendQEntries = '(monitor)'
LogXptStatus = '(monitor)'
RecvQEntries = '(monitor)'
ApplyLagThreshold = '0'
TransportLagThreshold ='0'
TransportDisconnectedThreshold ='30'
SidName = 'DBSALVE'
StaticConnectIdentifier ='(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=DB-Salve)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=DBSALVE_DGMGRL)(INSTANCE_NAME=DBSALVE)(SERVER=DEDICATED)))'
StandbyArchiveLocation ='/u05/arch_backup'
AlternateLocation = ''
LogArchiveTrace = '0'
LogArchiveFormat = '%t_%s_%r.archlog'
TopWaitEvents = '(monitor)'
数据库状态:
SUCCESS