db_unique_name_DGB.db_domain:
service name db_unique_name_DGMGRL.db_domain:
在每个配置了broker的数据库上面都存在一个服务器进程进行 broker的管理操作,这个服务器进程就是Data Guard broker monitor(DMON),而这个DMON所用到的所有配置信息都会保留在一个配置文件中。这个DMON进程和配置文件就构成了每个数据库上 broker的服务器端组件。
* Data guard broker monitor process(DMON):DMON是一个用来管理broker的后台进程,这个进程负责与本地数据库以及远程数据库的DMON进程进行通讯(与远端数据库的DMON进程进行通讯的时候使用的是一个 动态注册 的service name “db_unique_name_DGB.db_domain”)。这个进程负责维护配置文件的正确性以及不同数据库之间配置文件的一致性。在第一次创建一个broker配置文件或者是将一个数据库加入一个现存的broker配置中的时候DMON会先收集现有数据库的DG配置信息并保存到配置文件中。
* 配置文件:配置文件有DMON进行操作,它保存了broker管理的所有的数据库的状态信息,以及数据库相关属性(即数据库的初始化参数信息)的信息。同一个broker配置管理下的每个数据库上面都有一份相同的配置文件。broker的配置管理
broker通过将DG环境划分成数据库配置和数据库这两种对象来简化DG的管理工作。
* 数据库配置对象:数据库配置是一个包含多个数据库信息的集合,这些数据库信息包括数据库对象当前的形态、状态、及属性设置。同时这个集合可以同时混合了物理standby和逻辑standby。
* 数据库对象:数据库对象指的是Primary和standby数据库。一般情况下一个数据库对象只包含一个实例,但是在RAC系统中一个数据库对象会包含多个实例。broker通过将一个DG中的Primary数据库及所有的standby数据库逻辑的组成一个逻辑组来进行集中管理,因此每个broker配置就是一个数据库的逻辑集合,它包含了组成数据库的日志传输服务、日志应用服务等逻辑的对象。DBA可以broker来控制这个逻辑集合的配置,改变它的配置,同时还能监控这个组的整体健康状态。
DMON进程负责设置和维护broker配置,有了DMON的维护之后在实际管理中我们只需要把一个broker配置当初单个的单元管理就行了,剩下的工作由DMON去做,因此当执行一个影响到多个数据库的命令的时候,DMON实际上会进行下面的操作:
1. 在Primary数据库上处理请求。
2. 协调其他相关数据库上的DMON进程处理相应的请求。 3. 更新本地系统中的配置文件。 4. 与其他数据库上的DMON进程通讯以更新各自的配置文件。每组配置文件中可以包含多个broker配置,但是每个数据库只会维护一组配置文件,因此在RAC环境中,配置文件是由组成这个RAC的各个instance共享的。DMON进程负责各个数据库之间配置文件的同步工作。
DMON进程通过配置文件中设定的数据库的参数来控制数据库的行为,这些属性通常都和数据库的某个DG相关的初始化参数相关联,在通过OEM或 DGMGRL修改这些属性的时候,这些属性记录会先保存在配置文件中,然后DMON进程同时也会对相关数据库的参数进行修改,这就要求我们在配置数据库的时候必须使用SPFILE,保证DMON修改之后的参数能保留下来。
使用broker的准备清单在使用Data Guard broker之前需要确定下面这些条件都已存在:
* 必须使用spfile,这样再通过DGMGRL/OEM修改数据库参数之后能够保存下来。
* 设置数据库初始化参数DG_BROKER_START为true,这样保证每次数据库起来的时候DMON进程也会自动起来。 * 当使用RAC环境的时候要确保参数DG_BROKER_CONFIG_FILEn都指向一个所有实例都能访问的共享位置。 * 当不适用Oracle默认端口启动数据库时必须设置LOCAL_LISTENER参数以保证service name <db_unique_name>_DGB.<db_domain>能被正确的注册。 * 在listener.ora中静态的添加service name db_unique_name_DGMGRL.db_domain的注册,这个service name会在DGMGRL重启数据库的时候用到,通过DGMGRL重启数据库时DMON进程会先将数据库关闭,然后DGMGRL再用service name _DGMGRL.db_domain通过listener连接到数据库,再发出启动的命令,添加方法如下: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)))