前一篇 https://blog.csdn.net/Hehuyi_In/article/details/94384431 介绍了SwitchOver & Failover的概念、区别及利用sql操作的方法。可以看到利用sql来执行需要在主从库均进行操作,命令也多,较为复杂,本篇来看如何利用DG Broker来简化这些操作。
一、 DG Broker安装与配置
1. DG Broker安装
DG Broker其实就是dgmgrl工具,安装Oracle数据库软件或完整的客户端都包含该工具,本文略。
2. 监听修改
按下面修改监听配置,如果不修改监听利用原有的监听也可以,后面会介绍这种方法
主库
LISTENER =
(DESCRIPTION_LIST=
(DESCRIPTION =
(ADDRESS =(PROTOCOL = TCP)(HOST = 192.168.180.43)(PORT = 1521))
(ADDRESS =(PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME= ocrl)
(ORACLE_HOME =/u01/app/oracle/product/12.1.0/db_1)
(SID_NAME =ocrl)
)
(SID_DESC =
(GLOBAL_DBNAME=ocrl_DGMGRL) # 新增部分
(ORACLE_HOME =/u01/app/oracle/product/12.1.0/db_1)
(SID_NAME =ocrl)
)
)
备库
LISTENER =
(DESCRIPTION_LIST=
(DESCRIPTION =
(ADDRESS =(PROTOCOL = TCP)(HOST = 192.168.180.44)(PORT = 1521))
(ADDRESS =(PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME= ocrls)
(ORACLE_HOME =/u01/app/oracle/product/12.1.0/db_1)
(SID_NAME =ocrls)
)
(SID_DESC =
(GLOBAL_DBNAME=ocrls_DGMGRL) #新增部分
(ORACLE_HOME =/u01/app/oracle/product/12.1.0/db_1)
(SID_NAME =ocrls)
)
)
记住要重启监听
lsnrctl stop
lsnrctl start
3. 配置DG Broker
- 修改dg_broker_config_file参数(主备库都执行)
这里就用默认的路径,也可以自己指定。如果是在RAC环境中,这个把这个文件把到共享的存储上面,如果有ASM可以放到ASM中。
show parameter dg_broker_config_file
- 启用BROKER(主备库都执行)
alter system set dg_broker_start=true;
- 创建BROKER配置
在主、备库或者其他安装了dgmgrl的机器(能连到主从库)操作都可以。这里选择在主库执行
ocrl:/home/oracle@oracle1>dgmgrl
DGMGRL>connect sys/oracle@ocrl
DGMGRL>help create
DGMGRL>create configuration dg as primary database is ocrl connect identifier is ocrl;
这里报错 ORA-16698,这个报错出现在12c上,11g不会报错。可以通过在Primary 和 Standby上取消log_archive_dest_n参数来解决,实际这一块的参数应当是交给DG broker 来管理了,不再需要人为介入设置。
主备库都执行
alter system set log_archive_dest_2='';
再次执行
create configuration dg as primarydatabase is ocrl connect identifier is ocrl;
启用配置文件
DGMGRL>enable configuration
增加备库到配置文件中
DGMGRL>help add
DGMGRL>add database ocrls as connect identifier is ocrls;
查看配置文件
DGMGRL>show configuration
查看数据库的配置信息
DGMGRL>show database verbose ocrl
DGMGRL>show database verbose ocrls
注意:broker里连接的service_name是<db_unique_name>_DGMGRL,所以最开始前面要修改监听文件。如果不想修改监听文件,也可以执行下面的命令来修改StaticConnectIdentifier(这就是前面所说的另一种方法)。
DGMGRL>edit database ocrl set property StaticConnectIdentifier='(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.168.43)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ocrl)(INSTANCE_NAME=ocrl)(SERVER=DEDICATED)))';
DGMGRL> edit database ocrls set property StaticConnectIdentifier='(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.168.44)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ocrls)(INSTANCE_NAME=ocrls)(SERVER=DEDICATED)))';
二、 利用DG Broker 进行 SwitchOver
非常简单,就一条命令。
DGMGRL> switchover to ocrls;
再次查看配置文件
DGMGRL> show configuration
发现SwitchOver已经成功完成了
三、 利用DG Broker 进行 Failover
也非常简单,就一条命令
DGMGRL> FAILOVER TO database-name;
# 或者
DGMGRL> FAILOVER TO database-name IMMEDIATE;
分别对应两类Failover
- Complete Failover(默认方法):尝试先将在主库所有重做日志应用到备库,最大程度地减少数据丢失。
- Immediate Failover :不再对备库进行数据应用,立刻进行切换。
四、 Failover后恢复主从关系
Failover 后已禁用的数据库不会从代理配置中删除,但不再由代理管理。要重新启用这些数据库的代理管理,必须恢复或重建主从关系:
- 如果可以恢复主从关系,则数据库将显示以下状态:
ORA-16661:需要恢复备用数据库
- 如果必须从新主库重新创建备库,则将显示以下状态:
ORA-16795:需要重新创建备用数据库
为使REINSTATE命令成功执行,故障转移之前必须已在原主库(待恢复备库)上启用闪回,并且必须有足够的闪回日志。
1. 操作步骤
- 将数据库重新启动到mount状态
- 连接到新主库
- 使用企业管理器或DGMGRL恢复数据库
代理将故障的原主库恢复为与原备库相同类型(物理或逻辑备库)。唯一的例外是故障转移到快照备库,此时发生故障的原主库将恢复为物理备库。
代理恢复在故障转移期间被禁用的旁观者备库,作为备库连到新主库。
2. 使用DGMGRL恢复
连接到代理配置中的任何数据库(要恢复的数据库除外)时,执行:
DGMGRL> REINSTATE DATABASE db_unique_name;
如果能完成,它将变为新主库的备库。如果失败,其状态将更改为 ORA-16795: the standby database needs to be re-created
。那就没办法,只能重搭主从了。
参考
https://blog.csdn.net/shiyu1157758655/article/details/55504026
https://blog.csdn.net/Hehuyi_In/article/details/94384431
https://docs.oracle.com/cd/E11882_01/server.112/e40771/sofo.htm#DGBKR390
https://docs.oracle.com/cd/E11882_01/server.112/e40771/concepts.htm#DGBKR001