聊聊Data Guard中的DG Broker

    DG Broker是Oracle为Data Guard维护提供的一个很不错的工具,从我的实际使用来看,早期的版本中似乎大家都还是存在一定的思维定式,认为手工维护已经足够了。这个工具就不那么需要了,我们完全可以脱离开这些工具来直观的使用命令行的方式来维护,这个观点也没错,不过从与时俱进的角度来看,本来能够让你更轻松的一个工具,如果不用实在是太可惜了。
    DG Broker在数据库端需要启用一个后台进程dmon来维护,这个后台进程启动,需要设置dg_broker_start为true即可,如果要停止,只需要设置这个参数为false即可。如果从系统资源的角度来考虑,那几乎可以忽略不计,如果从搭建的便捷性上来看,Data Guard的搭建有了DG Broker已经几乎没有了技术含量。当然DG Broker毕竟只是一个工具而已,我们得确信能够拿得下手头的活儿,然后借助这个工具的福利来给我们的运维工作带来福利,如果不懂Data Guard的基本原理,不熟悉手工维护,那么还是先把那个坑踩平了再来玩这个工具。工具永远就是一个媒介。好与不好,明心自鉴,过度依赖工具与完全脱离工具,都是两个不可取的极端。
    switchover的操作需要在主备库端进行不少的验证检查,在DG Broker里面只有一个简单的命令switchover to xx。
当然DG Broker需要开启,有几个基本条件,要求一点也不过分
首先是设置spfile
然后是需要设置local_listener
好像其他的硬性要求也没有了。
首先我们来看看基本的配置。
configuration是DG Broker的一个基础设置,在配置上可以添加主备库关系。使用dgmgrl 这个命令即可。
这个配置在$ORACLE_HOME/dbs下会有两个dr开头的文件,在数据库参数中也会看到dg_broker_config_file1和dg_broker_config_file2
这两个配置文件互为镜像,和控制文件的表现差不多。主备库的配置信息是统一通过这类文件来维护的。
这个文件的生成不需要我们特意去控制,启用了配置之后,会自动生成。
创建配置的语句如下,建议是按照db_unique_name的方式来命名会统一一些。
create configuration dg_testdb as
 primary database is testdb
 connect identifier is testdb;
在经过大量的实践之后,个人是推荐添加主库之后,马上enable configuration保证主库的配置正确,可用。然后再添加其他的数据库。
DGMGRL> show configuration;
Configuration - dg_newtest2
  Protection Mode: MaxPerformance
  Databases:
    newtest2  - Primary database
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS

此时的配置就会是这样的形式,小步快进,我们在这个基础上添加相应的备库信息即可。
比如添加备库stestdb,使用如下的语句即可。
 add database stestdb as
 connect identifier is stestdb
 maintained as physical;
 配置完毕,只需要enable database stestdb即可。当然Data Guard的搭建过程中,最关键的一步就是enable database stestdb这一步了,因为这一步会完成如下的几个工作,
在备库创建dg broker config files,几次握手通信之后会生成两个配置文件,然后DG Broker会在后台调用我们手工配置DG的几个命令,当然从后台的日志来看,这个工作还算是蛮智能的了。
配置完成之后,一个标准的输出就是下面的形式了。
DGMGRL> show configuration;
Configuration - dg_testdb
  Protection Mode: MaxPerformance
  Databases:
    testdb  - Primary database
    stestdb - Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS
我们来评估一个数据库的灾备环境是否达标,一个基准就是查看DG Broker的show configuration的结果,必须是SUCCESS,WARNING也不行,Error完全不可接受。
如果是查看主备库的延迟情况,可以使用show database verbose xxxx的方式来查看。延迟情况,网络情况尽收眼底。
来看看DG Broker的一个特色功能 switchover,一个命令即可搞定切换,这个确实是很方便。
当然如果需要达到这种效果,还是有一些额外的配置。
就是在listener.ora中需要配置一个service
比如主库的配置如下:
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = testdb.oracle.com)(PORT = 1521))
      )
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = testdb)
      (ORACLE_HOME = /U01/app/oracle/product/11.2.0.4)
      (SID_NAME = testdb)
    )
   (SID_DESC =
      (GLOBAL_DBNAME = testdb_dgmgrl)
      (ORACLE_HOME = /U01/app/oracle/product/11.2.0.4)
      (SID_NAME = testdb)
    )

备库的service就是stestdb_dgmgrl了。
其实如果查看service情况,会发现后台会自动注册一个testdb_DGB的服务,不过我们还是按照官方的建议来做。
官方的样例如下:
LISTENER = (DESCRIPTION = (ADDRESS_LIST=(ADDRESS=(PROTOCOL=tcp)(HOST=host_name) (PORT=port_num)))) SID_LIST_LISTENER=(SID_LIST=(SID_DESC=(SID_NAME=sid_name) (GLOBAL_DBNAME=db_unique_name_DGMGRL.db_domain) (ORACLE_HOME=oracle_home)))
还有一句额外的补充,

Alternatively, you can use a different static service name. If you do, be sure to modify the StaticConnectIdentifier instance-specific property to reflect the different service name.

这句话需要好好品味。

假设数据库主库的db_unique_name为testdb,备库为stestdb
则切换的过程如下,我们可以自如的切换过去,再切换回来。
dgmgrl sys/xxx@testdb
DGMGRL> show configuration;
Configuration - dg_testdb
  Protection Mode: MaxPerformance
  Databases:
    testdb  - Primary database
    stestdb - Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS

DGMGRL> switchover to stestdb;  --切换过去
Performing switchover NOW, please wait...
Operation requires a connection to instance "testdb" on database "stestdb"
Connecting to instance "testdb"...
Connected.
New primary database "stestdb" is opening...
Operation requires startup of instance "testdb" on database "testdb"
Starting instance "testdb"...
ORACLE instance started.
Database mounted.
Database opened.
Switchover succeeded, new primary is "stestdb"
DGMGRL> switchover to testdb;  --再切换回来
Performing switchover NOW, please wait...
Operation requires a connection to instance "testdb" on database "testdb"
Connecting to instance "testdb"...
Connected.
New primary database "testdb" is opening...
Operation requires startup of instance "testdb" on database "stestdb"
Starting instance "testdb"...
ORACLE instance started.
Database mounted.
Database opened.
Switchover succeeded, new primary is "testdb"
DGMGRL>         
当然需要注意第一句,dgmgrl sys/xxx@testdb
我们得使用这种连接方式完成switchover,如果dgmgrl / 的方式,肯定会收到一个老套的错误。
dgmgrl /
DGMGRL> switchover to testdb;
Performing switchover NOW, please wait...
New primary database "testdb" is opening...
Operation requires startup of instance "testdb" on database "stestdb"
Starting instance "testdb"...
Unable to connect to database
ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

Failed.
Warning: You are no longer connected to ORACLE.

Please complete the following steps to finish switchover:
        start up instance "testdb" of database "stestdb"
 
如果出现这种情况,也别担心,这是需要我们手工启动一下备库即可。
Failover的操作其实是不建议使用show configuration的,因为本身主库已经不可用了,在10g中的反应会慢得多。直接failover to xxx就可以了。
如果一个DG环境很久没有再改动过配置,建议还是删除配置,重新配置一下,因为当时的配置可能验证成功,但是后期可能有些地方已经出现了小问题,DG Broker还是会使用之前的配置信息来检查。
10g版本中的DG Broker我还是颇有微词,备库在READ ONLY状态照样检查结果是SUCCESS,很容易会出现误导,我就因为这个方面大意,结果一个备库丢失了好久的归档,所幸最后及时发现,用跳归档的方式恢复回来了备库,免去了重搭备库的烦恼。

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
报名缘起   去年年底,崔老师发微信说12c OCM可以提上日程了。先不说那不菲的考试费用,单一个C(loud)就够我冷静一下了。最近几次参加线下分享活动,很多主题都离不开Cloud,听得云里雾里的。我问了一下自己,我可以吗?要不再等等吧。   过完年后,几个小伙伴蠢蠢欲动,看着朋友圈有朋友晒出的12c战袍还蛮帅的,走,报名去! 12c OCM考试号称“史上最难”   Oracle于2015年正式推出12c OCM升级考试,和以往的10g、11g OCM不同的是,12c OCM考试还要求考生每场达到最低分
  【 等待事件 】等待事件系列( 3+4 ) --System IO (控制文件) + 日志类等待   1    BLOG 文档结构图     2    前言部分   2.1    导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识, ~O(∩_∩)O~ : ①  控制文件类等待 ② 日志类等待   2.2    相关参考文章链接 【推荐】 等待事件系列(1)--User I/O类型(下) http://blog.itpub.net/26736162/v
今儿需要部署一个Oracle环境,为了简单些,选择了Oracle提供的Linux版本介质:OracleLinux-R6-U2-Server-x86_64-dvd.iso,在安装的过程中碰见了几个常见的问题,简要记录下,便于日后查找。 问题1:无法登陆图形界面   按照正常流程安装后,默认是没有安装图形界面的,因此进入的是命令行界面,若不用静默安装或克隆安装,则必须需要图形界面。于是按照常规做如下操作:  (1) 修改/etc/inittab中id:3:initdefault的3为5。  (2) start

【函数】wm_concat包的订制 - 2016-09-20 14:09:39

  【 函数 】 wm_concat 包的订制   1    BLOG 文档结构图     2    前言部分   2.1    导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识, ~O(∩_∩)O~ : ①  利用系统包创建 WM_CONCAT 函数 (重点) ② ORA-00904: "wm_concat":invalid identifier 错误解决 ③  订制自己的 WM_CONCAT 函数 ④  listagg 分析函数的使用 ⑤ ORA-0
数据迁移中有一种解决方案很有亮点,如果表的数据量大,迁移涉及的表不多,同时对于维护时间有要求的情况下,物化视图的prebuilt方式就是一种很不错的选择。 大体的步骤和方法如下: 假设源环境是test_source,目标环境是test_target 在源环境中test_source的操作如下: Create table test_mv as select *from all_objects  ; alter table test_mv modify(object_id primary key); creat

【MySQL】5.7新特性之六 - 2016-09-15 17:09:05

写在前面   本系列文章基于 5.7.12 版本讲述MySQL的新特性。从安装,文件结构,SQL ,优化 ,运维层面 复制,GITD等几个方面展开介绍 5.7 的新特性和功能。同时也建议大家跟踪官方blog和官方文档,以尽快知悉其新的变化。 6.1  优化(工具方面)增强   5.7 版本中如果一个会话正在执行sql,且该sql 是支持explain的,那么我们可以通过指定会话id,查看该sql的执行计划。 EXPLAIN  [ options ]   FOR  CONNECTION connection
工具用于查看指定时间内show global status指标的变化,能够帮助运维人员了解系统负载的走势 本工具在5.5 5.6 5.7中测试通过 源码我放在百度云盘了 http://pan.baidu.com/s/1mhIeKp6 源码一共5个文件 conmysql.c main.c findv.c other.c type.h 如果源码编译使用如下方法 1、建立一个MYSQL用户用于监控,不需要什么权限只要能够show global status 即可 mysql create user mmon@'l
本文以双节点RAC为例,揭示了在执行select及DML操作过程中,Cache Fusion在幕后是如何对block进行锁管理的。 ###实例1上查询scott.t0820_1表 select * from scott.t0820_1;         ID ----------          2 select dbms_rowid.rowid_relative_fno(rowid) rfno,dbms_rowid.rowid_block_number(rowid) blkno from scott.
【故障处理】队列等待之 enq: US - contention 案例 1    BLOG 文档结构图       2    前言部分 2.1    导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识, ~O(∩_∩)O~ : ① enq: US - contention 等待事件的解决 ② 一般等待事件的解决办法 ③ 队列等待的基本知识   Tips: ① 本文在 ITpub ( http://blog.itpub.net/26736162 )、博客园
    在Oracle 10g的中搭建Data Guard环境真是一个纠结,目前大体都是采用两种方式,一种是rman备份,一种是duplicate的方式,但是这两个地方不够让我满意,一来是rman备份数据量不小,需要先在本地生成备份,然后拷贝到备库去,这个搭建周期略长,另外一个就是推荐的方式duplicate,在10g中有些鸡肋的味道,本地备份,然后拷贝到备库,然后动用duplicate的方式,这样的方式还不如手工rman的方式同步来得顺心顺意,所以在10g中我是不怎么喜欢duplicate方式。当然11g