配置DataGuard Broker
手动进行DG switchover,步骤有些麻烦,是否有更简单的方式呢,可以试试dg broker。
Oracle DataGuard Broker分为Client Side和Server Side。
Client Side可以通过EM和DGMGRL两种工具对服务端进行管理和维护。
Server side会有一个配置文件和一个后台进程叫Data Guard Broker monitor process(DMON)。
DMON:它是一个用来管理Broker的后台进程,这个进程负责本地数据库与standby数据库的DMON进程进行通讯,当主库上接收到一个请求的时候,它会协调其他数据库上的DMON进程处理相应的请求,比如switchover。
同时会更新本地系统中的配置文件,并与standby数据库上的DMON进程进行通信,更新Standby上的配置文件。
1 启用DG Broker
主库、备库
配置DG_BROKER_START参数
|
|
2 调整监听文件
在监听文件中加入DGMGRL静态监听
SERVICE_NAME=PRIMARYDB_DGMGRL 这个service_name参数,默认格式为db_unique_name_DGMGRL,如果这里采用默认格式,那么主备库的监听,就要配置静态监听。
主库
|
|
备库
|
|
监听状态
|
|
如果不采用静态监听的方式,那么就要用手工更改该参数的值
|
|
3 配置broker
|
|
3.1 添加配置
|
|
参数说明:
dgbroker是配置的名称,这里可以随便填
primary database is ‘PRIMARYDB’,这儿的PRIMARYDB是指database的db_unique_name
connect identifier is PRIMARYDB,这里的PRIMARYDB是指tnsname.ora连接到主库的service name.
如果发现创建出错,或者其他原因可以执行
|
|
3.2 新增备库配置
|
|
参数说明:
add database ‘STANDBYDB’,这儿的STANDBYDB是指database的db_unique_name
as connect identifier is STANDBYDB,这里的STANDBYDB是指tnsname.ora连接到备库的service name.
3.3 查看配置
|
|
3.4 启用配置
|
|
3.5 故障处理
enable的过程很慢,而且状态出现error
主库查看broker详细信息
|
|
备库查看broker详细信息
|
|
查看备库详细信息
|
|
此时主备库alert日志均有报错 Fatal NI connect error 12514, connecting to:
备库状态报告3个属性值与数据库设置不一致,重新设置
Warning: ORA-16714: the value of property ArchiveLagTarget is inconsistent with the database setting Warning: ORA-16714: the value of property LogArchiveMaxProcesses is inconsistent with the database setting Warning: ORA-16714: the value of property LogArchiveMinSucceedDest is inconsistent with the database setting
虽然看上去是一致的,但是就是需要重新设置一遍
|
|
再次查看broker详细信息
|
|
主备库都是success
4 测试switchover
4.1 切换库
|
|
4.2 故障处理
首先确认StaticConnectIdentifier的值
|
|
确认监听中已经静态注册上面的service name
再次测试仍有问题,可能与前面alert的Fatal NI connect error 12514
报错有关,错误信息里的链接描述符均去请求一个 db_unique_name_DGB的服务
那么这个 db_unique_name_DGB
的服务究竟是做什么用的呢?
{db_unique_name}_DGB.{db_domain}: This Service is used by the DMON-Processes to communicate between each other DMON是一个用来管理broker的后台进程,这个进程负责与本地数据库以及远程数据库的DMON进程进行通讯(与远端数据库的DMON进程进行通讯的时候使用的是一个动态注册的service name “db_unique_name_DGB.db_domain”)
既然是动态注册,那缘何注册失败呢? 文档 ID 365314.1给出了答案:Database Will Not Register With Listener configured on IP instead of Hostname
将主备的{db_unique_name}_DGB.{db_domain}静态entry删掉,host采用hostname,重启监听测试,switchover成功。
由此可见监听配置里还是采用hostname为好,通过本次事件也解惑了萦绕我心头很久的问题,很多时候建库完毕,使用工具创建动态注册的监听,监听状态里会有很多XDB之类的服务,而我改成静态监听之后(每次都用IP)却没有了之前的自动注册的服务,可见这就是根本原因:Database Will Not Register With Listener configured on IP instead of Hostname
参考链接: