暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

oracle11.2g下主库rac和备库单库下配置dg broker

原创 杜分军 2021-03-03
1756

官方对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”
官方解释:
dg.png

根据官方说明,我这里环境为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)主库切换为备库时候,需要听到其它节点实例,再进行切换;

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论