官方对Data Guard Broker描述:
The Oracle Data Guard broker is a distributed management framework that automates and centralizes the creation, maintenance, and monitoring of Oracle Data Guard configurations. The following list describes some of the operations the broker automates and simplifies:
Creating Oracle Data Guard configurations that include one primary database, new or existing standbys (physical, logical, snapshot, and far sync), and redo transport services and log apply services. The standbys can be Oracle Real Application Clusters (Oracle RAC) databases.
Adding additional new or existing standbys (physical, logical, snapshot, far sync, Oracle RAC or non-Oracle RAC) to an existing Data Guard configuration.
Managing the protection mode for the broker configuration.
Invoking switchover or failover with a single command to initiate and control complex role changes across all databases in the configuration.
Configuring failover to occur automatically upon loss of the primary database, increasing availability without manual intervention.
Monitoring the status of the entire configuration, capturing diagnostic information, reporting statistics such as the Redo Apply rate and the redo generation rate, and detecting problems quickly with centralized monitoring, testing, and performance tools.
Assessing whether a database is ready to become a primary.
You can perform all management operations locally or remotely through the broker’s easy-to-use interfaces: the Oracle Data Guard management pages in Cloud Control, and the Oracle Data Guard command-line interface called DGMGRL.
环境描述:主库为rac(两个节点),备库是单库;
(1)主库(rac)下配置:
配置DG_BROKER_START参数(动态参数)
检查主库上dg_broker_start参数
SQL> show parameter dg_broker_start;
NAME TYPE VALUE
dg_broker_start boolean FALSE
启动dg_broker_start参数
SQL> alter system set dg_broker_start=true sid=’*’;
System altered.
SQL> show parameter dg_broker_start;
NAME TYPE VALUE
dg_broker_start boolean TRUE
配置DG_BROKER_CONFIG_FILE参数
检查默认配置参数
SQL> show parameter dg_broker_config
NAME TYPE VALUE
dg_broker_config_file1 string /u01/app/oracle/product/11.2.0
/db_1/dbs/dr1racdb.dat
dg_broker_config_file2 string /u01/app/oracle/product/11.2.0
/db_1/dbs/dr2racdb.dat
[grid@rac1 ~]$ asmcmd
ASMCMD> cd database/racdb
ASMCMD> mkdir DATAGUARDCONFIG
+database/racdb/dataguardconfig
SQL> alter system set dg_broker_config_file1=’+database/racdb/dataguardconfig/dgracdb1.ora’ scope=spfile sid=’’;
System altered.
SQL> alter system set dg_broker_config_file2=’+database/racdb/dataguardconfig/dgracdb2.ora’ scope=spfile sid=’’;
System altered.
重启主库参数生效;
[grid@rac2 ~]$ srvctl stop database -d racdb
[grid@rac2 ~]$ srvctl start database -d racdb
SQL> show parameter dg
NAME TYPE VALUE
dg_broker_config_file1 string +DATABASE/racdb/dataguardconfig/dgracdb1.ora
dg_broker_config_file2 string +DATABASE/racdb/dataguardconfig/dgracdb2.ora
dg_broker_start boolean TRUE
配置静态监听(加入专门管理DGMGRL)–RAC下两个节点都要配置
[grid@rac1 admin]$ pwd
/u01/app/11.2.0/grid/network/admin
[grid@rac1 admin]$ vi listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME=ora11g1)
(ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1)
(SID_NAME=racdb)
)
(SID_DESC =
(GLOBAL_DBNAME=racdb_dgmgrl)
(ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1)
(SID_NAME=racdb)
)
)
重启监听:
[grid@rac1 admin]$ lsnrctl reload
(2)备库配置
配置DG_BROKER_START参数(动态参数)
SQL> show parameter dg_broker_start;
NAME TYPE VALUE
dg_broker_start boolean FALSE
SQL> alter system set dg_broker_start = true;
System altered.
SQL> show parameter dg_broker_start;
NAME TYPE VALUE
dg_broker_start boolean TRUE
说明:启用db_broker_start后后台会启动如下进程:
oracle 29395 1 0 07:43 ? 00:00:00 ora_dmon_std
oracle 29397 1 0 07:43 ? 00:00:00 ora_insv_std
配置静态监听
[oracle@standbydb admin]$ vi listener.ora
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = std)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME = std)
)
(SID_DESC =
(GLOBAL_DBNAME = std_dgmgrl)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME = std)
)
)
[oracle@standbydb admin]$ lsnrctl reload
(3)配置broker(可以在主库任意一个节点、备库上或其它服务器上,我这里是在主库的rac1主机上)
创建dg broker
启动dgmgrl命令:
[oracle@rac1 ~]$ dgmgrl sys/oracle@racdb
DGMGRL for Linux: Version 11.2.0.1.0 - 64bit Production
Copyright © 2000, 2009, Oracle. All rights reserved.
Welcome to DGMGRL, type “help” for information.
Connected.
DGMGRL>
显示具体配置(我这里还没开始配置)
DGMGRL> show configuration
ORA-16532: Data Guard broker configuration does not exist
Configuration details cannot be determined by DGMGRL
DGMGRL>
配置主库:
DGMGRL> create configuration DGRACDB as primary database is racdb connect identifier is RACDB;
Configuration “DGRACDB” created with primary database “racdb”
DGMGRL>
注:create configuration ‘DGRACDB’ ,指的是broker名字;
primary database is ‘racdb’,这里指主库的dbuniquename;
connect identifier is RACDB,指的是tnsname.ora的net service name.
注意区分大小。
显示配置信息:
DGMGRL> show configuration
Configuration - DGRACDB
Protection Mode: MaxPerformance
Databases:
racdb - Primary database
Fast-Start Failover: DISABLED
Configuration Status:
DISABLED
添加备库设置:
DGMGRL> add database std as connect identifier is STD maintained as physical;
Database “std” added
注:add database ‘std’ ,这里的std是指database的dbuniquename,而as connect identifier is 'STD’这里的STD是指tnsname.ora连接到standby database的net service name.注意区分大小,默认为小写;
显示配置信息:
DGMGRL> show configuration
Configuration - DGRACDB
Protection Mode: MaxPerformance
Databases:
racdb - Primary database
std - Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
DISABLED
启动配置
DGMGRL> enable configuration
Enabled.
再次查看配置信息:
DGMGRL> show configuration
Configuration - DGRACDB
Protection Mode: MaxPerformance
Databases:
racdb - Primary database
Warning: ORA-16532: Data Guard broker configuration does not exist
std - Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
WARNING
DGMGRL> show configuration
Configuration - dgracdb
Protection Mode: MaxPerformance
Databases:
racdb - Primary database
std - Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
ORA-16610: command “ENABLE DATABASE racdb” in progress
DGM-17017: unable to determine configuration status
DGMGRL> show configuration
Configuration - dgracdb
Protection Mode: MaxPerformance
Databases:
racdb - Primary database
std - Physical standby database (disabled) -----------------原因是:我的备库为read only状态,需要设为mount状态。
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS
DGMGRL> show database verbose racdb
DGMGRL> show database verbose std
Database - std
Role: PHYSICAL STANDBY
Intended State: APPLY-ON
Transport Lag: (unknown)
Apply Lag: (unknown)
Real Time Query: OFF
Instance(s):
std
Properties:
DGConnectIdentifier = ‘std’
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 = ‘+DATABASE/racdb/datafile, /u01/app/oracle/oradata/std/datafile, +DATABASE/racdb/tempfile, /u01/app/oracle/oradata/std/tempfile’
LogFileNameConvert = ‘+DATABASE/racdb/onlinelog, /u01/app/oracle/oradata/std, +DATABASE/racdb/standbylog, /u01/app/oracle/oradata/std’
FastStartFailoverTarget = ‘’
StatusReport = ‘(monitor)’
InconsistentProperties = ‘(monitor)’
InconsistentLogXptProps = ‘(monitor)’
SendQEntries = ‘(monitor)’
LogXptStatus = ‘(monitor)’
RecvQEntries = ‘(monitor)’
HostName = ‘standbydb’
SidName = ‘std’
StaticConnectIdentifier = ‘(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=standbydb)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=std_DGMGRL)(INSTANCE_NAME=std)(SERVER=DEDICATED)))’
StandbyArchiveLocation = ‘/u01/app/arch’
AlternateLocation = ‘’
LogArchiveTrace = ‘0’
LogArchiveFormat = ‘%t_%s_%r.dbf’
TopWaitEvents = ‘(monitor)’
Database Status:
DISABLED
解决办法:(备库)read only->mounted
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 417546240 bytes
Fixed Size 2213936 bytes
Variable Size 335546320 bytes
Database Buffers 75497472 bytes
Redo Buffers 4288512 bytes
Database mounted.
SQL> alter database recover managed standby database disconnect from session;
Database altered.
SQL> select name,open_mode,database_role,switchover_status from v$database;
NAME OPEN_MODE DATABASE_ROLE SWITCHOVER_STATUS
RACDB MOUNTED PHYSICAL STANDBY NOT ALLOWED
再次执行:
DGMGRL> enable database std
Enabled.
DGMGRL> show configuration
Configuration - dgracdb
Protection Mode: MaxPerformance
Databases:
racdb - Primary database
std - Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS
(4)测试switchover
DGMGRL> switchover to std;
Performing switchover NOW, please wait…
Error: ORA-16535: Oracle Restart or Oracle Clusterware prevented completion of broker operation
Failed.
Unable to switchover, primary database is still “racdb”
官方解释:

根据官方说明,我这里环境为rac环境,先关闭其它节点数据库实例
[root@rac2 ~]# su - grid
[grid@rac2 ~]$ srvctl stop instance -d racdb -n rac2
[grid@rac2 ~]$ srvctl status instance -d racdb -i racdb1,racdb2
Instance racdb1 is running on node rac1
Instance racdb2 is not running on node rac2
再执行主备切换:
DGMGRL> switchover to std
Performing switchover NOW, please wait…
New primary database “std” is opening…
Operation requires shutdown of instance “racdb1” on database “racdb”
Shutting down instance “racdb1”…
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
Operation requires startup of instance “racdb1” on database “racdb”
Starting instance “racdb1”…
ORACLE instance started.
Database mounted.
Switchover succeeded, new primary is “std”
DGMGRL> show configuration
Configuration - dgracdb
Protection Mode: MaxPerformance
Databases:
std - Primary database
racdb - Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS
此时再查看主备库状态:
原备库->主库:
SQL> select name,open_mode,database_role,switchover_status from v$database;
NAME OPEN_MODE DATABASE_ROLE SWITCHOVER_STATUS
RACDB READ WRITE PRIMARY TO STANDBY
原主库->备库:
SQL> select name,open_mode,database_role,switchover_status from v$database;
NAME OPEN_MODE DATABASE_ROLE SWITCHOVER_STATUS
RACDB MOUNTED PHYSICAL STANDBY NOT ALLOWED
说明:RAC(11.2.0.1)主库切换为备库时候,需要听到其它节点实例,再进行切换;




