达梦数据库搭建DMHS的原理及参数意义

1、实现原理:

DMHS(达梦数据实时同步软件)的基础实现原理主要涉及源端数据库、目标端数据库、源端DMHS服务以及目标端DMHS服务之间的交互和操作。具体来说,DMHS通过以下模块实现数据的实时同步:

源端DMHS服务:主要由装载模块(LOAD)、日志捕获分析模块(CPT)以及管理服务模块(MGR)组成。其中,CPT模块采用优化的日志扫描算法,快速捕获分析增量日志数据,并将分析完成后的日志数据转换为内部的消息格式,然后通过网络将消息发送至目标端DMHS服务。

目标端DMHS服务:由执行模块(EXEC)和管理服务模块(MGR)组成。当接收到源端的日志消息后,DMHS服务对消息进行处理,通过多线程并行执行的方式将同步数据应用至目标端数据库,实现数据实时同步。

管理模块(MGR):作为DMHS同步服务的启动框架,根据配置文件加载并启动相关的功能模块。

2、搭建DMHS的第一步要先开启归档和逻辑日志:

我们可以在达梦数据库的bin路径下/home/dmdba/dm/dmdbms/bin找到dm.ini的配置文件,修改其中的归档文件和逻辑日志,默认0是关闭状态,1是开启:

ARCH_INI = 1
RLOG_APPEND_LOGIC = 1
注意: dm.ini 配置参数中 “FAST_COMMIT” 必须为 0,否则会导致逻辑日志不全而影响同步。
3、添加归档日志dmarch.ini,一般我们会放在/dbdata/dmdata/DAMENG下面:
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /opt/dmdbms/arch # 归档目录
ARCH_FILE_SIZE = 128 # 归档文件大小,单位 MB
ARCH_SPACE_LIMIT = 0 # 空间大小限制, 0 表示不限制
4、修改配置文件后,我们需要重启达梦数据库服务,使配置文件生效,我们可以使用sql命令来检查归档文件配置的准确性:
SELECT ARCH_DEST, ARCH_FILE_SIZE FROM SYS.V$DM_ARCH_INI WHERE ARCH_TYPE='LOCAL'
AND ARCH_IS_VALID='Y';
如果查询结果显示如下,则说明配置成功:
然后我们需要检查逻辑日志配置的正确性,使用sql:
SELECT PARA_VALUE FROM SYS.V$DM_INI WHERE PARA_NAME = 'RLOG_APPEND_LOGIC';
如果查询结果显示如下,则配置正确:
在线日志配置是否正确可以通过sql命令查询:
SELECT PATH FROM SYS.V$RLOGFILE;
日过查询结果显示如下,则配置正确:
最后需要检查下配置的FAST_COMMIT参数是否为0,sql命令 select para_value from v$dm_ini where para_name = 'FAST_COMMIT';
查询结果如下,则配置正确:
5、检查完以后,我们需要配置DDL,如果要求DDL同步,那么需要创建DDL触发器和辅助表,其中在达梦DMHS的安装目录下scripts的子目录中有“ddl_sql_dm7.sql”的sql文件,我们需要打开管理工具运行该sql文件,或者在disql窗口里面start 该sql文件,注意创建时需要用SYSDBA用户登录。
检查创建的触发器和辅助表是否有效,可以使用sql:

select owner, table_name from dba_tables where owner = 'SYSDBA' and table_name like 'DMHS%' and status = 'VALID';

若查询结果如下,则说明创建成功:
触发器检查sql语句:

select owner, trigger_name from dba_triggers where owner = 'SYSDBA' and trigger_name like 'DMHS%' and status = 'Y';

若查询结果如下,则说明创建成功:

6、上述步骤完成后,我们就可以安装DMHS了,安装的时候我们需要注意以下地方,配错后可能会找不到对应的依赖:

7、安装完成后我们需要配置对应的配置文件,修改配置dmhs.hs文件,我们需要明白每个参数的意义,如下:

<?xml version="1.0" encoding="GB2312"?>
<dmhs>
    <base>
        <lang>ch</lang>
        <mgr_port>5345</mgr_port>   #管理端口,取值范围在 1000~ 65535     
        <ckpt_interval>60</ckpt_interval> #检查点间隔,取值范围在 10~ 65535, 默认值 60
        <siteid>1</siteid> #NET 模块投递数据时,数据来源的站点号
    </base>
    <cpt>
        <db_type>dm7</db_type>
        <db_server>127.0.0.1</db_server>
        <db_user>SYSDBA</db_user>
        <db_pwd>SYSDBA</db_pwd>
        <db_port>5236</db_port>
        <db_ssl_path></db_ssl_path> #连接目标端数据库时使用的 SSL 链路安全库路径
        <db_ssl_pwd></db_ssl_pwd> #连接源端数据库时使用的 SSL 链路的加密口令
        <parse_thr>1</parse_thr> #日志分析线程数,取值范围在 1-16,默认值 1
        <ddl_mask>op:obj</ddl_mask> <!--DDL配置项-->
        <arch><!--归档清理配置项-->
            <clear_interval>600</clear_interval> #归档日志清理间隔,取值范围在 60-65535,单位秒
            <clear_flag>2</clear_flag> #归档日志清理选项,选配 0(不操作)1(删除)2(移走),默认 0
            <bak_dir>/dmarch/arch_bak</bak_dir>
        </arch>
        <send><!-- 发送模块配置 -->
            <ip>192.168.1.109</ip> #对端ip
            <mgr_port>5345</mgr_port>
            <data_port>5346</data_port> #需在投递到下一级的备用 DMHS NET 模块监听端口
            <trigger>1</trigger><!-- 是否忽略触发器,默认为0,限定值0,1 -->
            <constraint>1</constraint><!-- 是否忽略约束,默认为0,限定值0,1 -->
            <identity>1</identity> #指示下一级数据入库时,自增列处理方式,0(启用)或 1(忽略),默认值为 1
            <net_turns>0</net_turns> #是否启用网闸模式,0(禁用)或 1(启用)
            <filter><!--过滤配置项-->
                <enable><!-- 白名单,所有允许同步的表 -->
                    <item>SYSDBA.*</item>
                </enable>
            </filter>
            <map><!--映射配置项-->
              <item>SYSDBA.*==DMHS.*</item>
            </map>
        </send>
    </cpt>
</dmhs>

配置要求:

1)siteid全局唯一,即DMHS同步系统涉及的所有节点的siteid必须全局唯一,不允许有重复值;
2)DDL配置项,如果不需要DDL同步,那么就配置为空,即<ddl_mask></ddl_mask>,相应地DMHS DDL触发器和辅助表也不需要创建;
3)归档清理配置项,clear_flag为1表示清除,即DMHS将同步完成的归档文件删除;为2,表示将同步完成的归档移到bak_dir目录下;为0,表示不作任何操作;
4)过滤配置项,本示例配置了白名单,即enable,也可以配置黑名单,详见DMHS用户手册。其过滤的规则是:先判断白名单,然后判断黑名单。如果存在重叠的情况,那么也是会被过滤的;
5)映射配置项,表示存在不同模式之间的表同步,例如本示例中源端的SYSDBA模式下的表映射成目的端的DMHS模式下同名的表。

8、如果是单项同步,则目的端配置文件则无发送模块(send),配置如下:

<?xml version="1.0" encoding="GB2312"?>

<dmhs>
    <base>
        <lang>ch</lang>
        <mgr_port>5345</mgr_port>
        <chk_interval>2</chk_interval> #检查时间,单位秒
        <ckpt_interval>45</ckpt_interval> #检查点间隔,取值范围在 10~ 65535, 默认值 60
        <siteid>2</siteid> #NET 模块投递数据时,数据来源的站点号
    </base>
    <recv>
    <data_port>5346</data_port> #备用 DMHS NET 模块监听端口
    <exec>
        <check_index>0</check_index> #是否允许自动创建索引,可选 0(禁用)或 1(启用),默认值 1
        <db_type>dm8</db_type>
        <db_server>127.0.0.1</db_server>
        <db_user>SYSDBA</db_user>
        <db_pwd>SYSDBA</db_pwd>
        <db_port>5236</db_port>
        <db_name></db_name>
        <exec_mode>1</exec_mode>
        <exec_thr>16</exec_thr> #EXEC 模块用来数据入库的工作线程数,取值范围在 1-1024,默认值为 4
        <exec_sql>512</exec_sql> #EXEC 模块缓存事务 SQL 语句的内存大小,取值范围在 32-40960,单位 M,默 认值 512

        <exec_trx>5000</exec_trx> #允许缓存事务的个数,取值范围在 1000-10000,默认值 5000
        <exec_rows>250</exec_rows> #数据入库时允许的最大批量行数,取值范围在 1-2000,默认值 1000
        <exec_policy>2</exec_policy>
        <msg_col_size>8000</msg_col_size> #事务入库出错时的执行策略,可选 01 2,默认为 1
        <level>0</level> #级联等级,取值为 0 3 65535,默认为 0
           <affect_row>0</affect_row> #是否启用影响行数检查,可选 0(禁用)/1(启用),默认值 1
        <tag> #自定义对象修改标识功能,该参数是一个功能标签,需要配置它的子项
        <schema></schema> #针对性的关注某个模式下的表的变动,指定关注的模式名
        <sql></sql> #自定义的更新 SQL 语句 可根据情况自行定义,如无可删除此tag
        <before_commit>0</before_commit>
         </tag> 
     </exec>
     </recv>    

</dmhs>

9、配置完成后,启动DMHS服务,初始装载是将源端数据库中的初始数据装载到目的端数据库,使DMHS同步的时刻源和目的端的同步表数据一致:

开启目的端服务:./dmhs_serverd start

start目的端服务:
./dmhs_serverd start
./dmhs_console
DMHS >connect
DMHS >start exec

开启源端DMHS服务:./dmhs_serverd start

初始装载:

./dmhs_serverd start
./dmhs_console

DMHS >connect

DMHS >start cpt

DMHS >COPY 0 "SCH.NAME IS NOT NULL" DICT|LSN
DMHS >copy 0 "sch.name='SYSDBA'" DICT|LSN|CREATE|INSERT|INDEX(当数据量非常大时可以选择模式同步)

exit

在dmhs目录下有对应的log日志,可进入查询log日志

10、装载完成后,则可以开启同步:

源端执行:
./dmhs_console
DMHS >start

达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值