注册
达梦数据库-搭建DMHS双向同步
培训园地/ 文章详情 /

达梦数据库-搭建DMHS双向同步

Guinsso 2023/03/16 1886 0 0

作为一个达梦的初学者,写这篇文章的目的是为了把学到的新知识做个总结梳理,在整理中查缺补漏,也希望大家看了我的文章能有收获,如有错误的地方欢迎指出。

数据同步工具 (DMHS),可实现同构、异构数据库间的数据同步,基于此工具,可实现在现应急灾备、多业务中心、异构资源信息整合等多种使用场景。以下是DM数据库之间实现的双向同步过程,这里

一、用dts迁移源端数据到目的端,使源端数据和目的端数据一致(也可直接物理备份还原)

key改名为dmhs.key放到/opt/dmhs/bin下

二、修改两端的dm.ini参数,开启归档,重启数据库使参数生效

1、ARCH_INI参数值设置为1

2、RLOG_APPEND_LOGIC参数的值设置为1

3、dmarch.ini放在实例文件夹下。归档文件如下

[ ARCHIVE_LOCAL1]

ARCH_TYPE = LOCAL

ARCH_DEST = /opt/dmdbms/data/DAMENG/arch

ARCH_FILE_SIZE = 512

ARCH_SPACE_LIMIT = 10240

三、安装hs软件--------DDL同步(看情况而定)

两端均在管理工具中的执行/opt/dmhs/scripts/ddl_sql_dm8.sql(DDL同步必要操作)

1、源端dmhs.hs配置文件(放在/opt/dmhs/bin下)

<?xml version=“1.0” encoding=“GB2312”?>

<dmhs>

<base>

    <lang>en</lang>

    <mgr_port>5345</mgr_port>

    <ckpt_interval>60</ckpt_interval>

    <siteid>1</siteid>

    <version>2.0</version>

    <log_size_limit>5</log_size_limit><!-- DMHS的log下的日志文件的总大小单位GB -->

</base>

    <exec>

<recv>

        <mgr_port>5345</mgr_port>

        <data_port>5346</data_port>

    </recv>

        <db_type>DM8</db_type>

        <db_server>192.168.1.1</db_server>

        <db_user>SYSDBA</db_user><!-- 入库事务的执行者,如果不需要使用用户过滤,一般都填SYSDBA -->

        <db_pwd>SYSDBA</db_pwd>

        <db_port>5236</db_port>

        <vpool>128</vpool><!--工作线程私有内存池的大小-->

        <vpools>13</vpools><!--缓存事务使用内存池的个数-->

        <trxid_tables>6</trxid_tables><!--存放事务信息的辅助表个数,分散热点-->

        <exec_thr>8</exec_thr><!--EXEC 模块用来数据入库的工作线程数-->

        <exec_sql>1024</exec_sql><!--EXEC 模块缓存事务 SQL 语句的内存大小,太小会导致缓存事务刷盘,影响IO-->

        <affect_row>0</affect_row><!--是否启用影响行数检查,用于判断数据一致性,但是会影响性能,按需配置-->

        <exec_trx>5000</exec_trx><!--允许缓存事务的个数,超过这个个数,同步会停止-->

        <exec_rows>1000</exec_rows><!--数据入库时允许的最大批量行数,提高性能,加大内存占用,按需配置-->

        <case_sensitive>1</case_sensitive><!--EXEC 模块操作数据库对象时,是否需要保持对象名敏感,大小写敏感的库务必1-->

        <toggle_case>0</toggle_case><!--EXEC 模块操作数据库对象时,是否需要把对象名转换为大小写-->

        <exec_policy>2</exec_policy><!--事务入库出错时的执行策略,出错丢弃整个事务保持一致性用0,尽可能保持同步容忍不一致用2,出错停止用1-->

        <enable_lob_buf>1</enable_lob_buf><!--执行端是否允许大字段缓存-->

        <commit_prepare>1</commit_prepare><!--是否启用提交准备功能,可提高效率-->

        <commit_policy>1</commit_policy><!--事务入库的事务提交策略,1为关联表的提交按照顺序,非关联事务并行执行-->

        <clear_trx_file>1</clear_trx_file><!--是否启用错误事务自动清除功能-->

        <recv_caches>16</recv_caches><!--EXEC 模块用来接收 NET 模块消息的缓存个数,提高并行exec效率,增大内存-->

        <ddl_continue>1</ddl_continue><!--DDL 出错时是否允许继续同步,按需配置-->

        <level>0</level><!--2节点用0,三节点环形用65535-->

    </exec>

<cpt>

    <db_type>DM8</db_type>

    <db_server>192.168.1.1</db_server>

    <db_user>SYSDBA</db_user>

    <db_pwd>SYSDBA</db_pwd>

    <db_port>5236</db_port>

    <idle_time>10</idle_time>

<ddl_mask>op:obj</ddl_mask><!–ddl同步策略,不需要ddl同步的话务必置空而不是不写该标签–>

<parse_thr>4</parse_thr><!–日志分析线程数,可提高日志解析速度,旧版dmhs的ddl同步情况下建议保持默认的1–>

<parse_policy>0</parse_policy><!–解析策略,0 表示解析日志出错时,主动 halt;1 表示忽略解析错误,继续解析,按需配置,源端DM8一般配置1–>

<idle_time>300</idle_time><!–日志分析空闲时间,防止dmhs读取速度赶超redo切换复写速度–>

<read_again_interval>255</read_again_interval><!–开启日志读取二次读取校验日志功能,防止dmhs读取速度赶超redo切换复写速度–>

    <arch>

        <clear_interval>600</clear_interval>

        <clear_flag>0</clear_flag>

    </arch>

    <send>

        <ip>192.168.1.2</ip><!-- 对方IP -->

        <mgr_port>5345</mgr_port>

        <data_port>5346</data_port>

        <net_pack_size>256</net_pack_size>

        <vpools>13</vpools><!--NET 模块内存池的个数-->

        <vpool_size>128</vpool_size><!--缓存事务使用内存池的个数-->

        <case_sensitive>1</case_sensitive><!--NET 模块针对对象名是否大小写敏感,对下面filter过滤有影响,大小写敏感库配置为1-->

        <net_turns>0</net_turns>

        <crc_check>0</crc_check>

        <trigger>1</trigger><!--指示下一级数据入库时,是否需要禁用触发器,配置为1,避免同步的数据触发目的端触发器-->

        <constraint>1</constraint><!--指示下一级数据入库时,是否需要禁用约束-->

        <identity>1</identity><!--1 则表示同步 CPT 中带来的该列值,它的值使用 CPT 中带来的值进行填充;0 则表示启用目标库自增列的属性,目标库自已维护该列的值,按需配置-->

        <filter>

            <enable>

<item>SYSDBA.*</item><!–同步是白名单排除黑名单的差集–>

            </enable>

            <disable>

<item>SYSDBA.TEST*</item>

            </disable>

        </filter>

    </send>

</cpt>

</dmhs>

2、目的端dmhs.hs配置文件

<?xml version=“1.0” encoding=“GB2312”?>

<dmhs>

<base>

    <lang>en</lang>

    <mgr_port>5345</mgr_port>

    <ckpt_interval>60</ckpt_interval>

    <siteid>2</siteid>

    <version>2.0</version>

    <log_size_limit>5</log_size_limit><!-- DMHS的log下的日志文件的总大小单位GB -->

</base>

    <exec>

<recv>

        <mgr_port>5345</mgr_port>

        <data_port>5346</data_port>

    </recv>

        <db_type>DM7</db_type>

        <db_server>192.168.1.2</db_server>

        <db_user>SYSDBA</db_user><!-- 入库事务的执行者,如果不需要使用用户过滤,一般都填SYSDBA -->

        <db_pwd>SYSDBA</db_pwd>

        <db_port>5236</db_port>

        <vpool>128</vpool><!--工作线程私有内存池的大小-->

        <vpools>13</vpools><!--缓存事务使用内存池的个数-->

        <trxid_tables>6</trxid_tables><!--存放事务信息的辅助表个数,分散热点-->

        <exec_thr>8</exec_thr><!--EXEC 模块用来数据入库的工作线程数-->

        <exec_sql>1024</exec_sql><!--EXEC 模块缓存事务 SQL 语句的内存大小,太小会导致缓存事务刷盘,影响IO-->

        <affect_row>0</affect_row><!--是否启用影响行数检查,用于判断数据一致性,但是会影响性能,按需配置-->

        <exec_trx>5000</exec_trx><!--允许缓存事务的个数,超过这个个数,同步会停止-->

        <exec_rows>1000</exec_rows><!--数据入库时允许的最大批量行数,提高性能,加大内存占用,按需配置-->

        <case_sensitive>1</case_sensitive><!--EXEC 模块操作数据库对象时,是否需要保持对象名敏感,大小写敏感的库务必1-->

        <toggle_case>0</toggle_case><!--EXEC 模块操作数据库对象时,是否需要把对象名转换为大小写-->

        <exec_policy>2</exec_policy><!--事务入库出错时的执行策略,出错丢弃整个事务保持一致性用0,尽可能保持同步容忍不一致用2,出错停止用1-->

        <enable_lob_buf>1</enable_lob_buf><!--执行端是否允许大字段缓存-->

        <commit_prepare>1</commit_prepare><!--是否启用提交准备功能,可提高效率-->

        <commit_policy>1</commit_policy><!--事务入库的事务提交策略,1为关联表的提交按照顺序,非关联事务并行执行-->

        <clear_trx_file>1</clear_trx_file><!--是否启用错误事务自动清除功能-->

        <recv_caches>16</recv_caches><!--EXEC 模块用来接收 NET 模块消息的缓存个数,提高并行exec效率,增大内存-->

        <ddl_continue>1</ddl_continue><!--DDL 出错时是否允许继续同步,按需配置-->

        <level>0</level><!--2节点用0,三节点环形用65535-->

    </exec>

<cpt>

    <db_type>DM7</db_type>

    <db_server>192.168.1.2</db_server>

    <db_user>SYSDBA</db_user>

    <db_pwd>SYSDBA</db_pwd>

    <db_port>5236</db_port>

    <idle_time>10</idle_time>

<ddl_mask>op:obj</ddl_mask><!–ddl同步策略,不需要ddl同步的话务必置空而不是不写该标签–>

<parse_thr>4</parse_thr><!–日志分析线程数,可提高日志解析速度,旧版dmhs的ddl同步情况下建议保持默认的1–>

<parse_policy>0</parse_policy><!–解析策略,0 表示解析日志出错时,主动 halt;1 表示忽略解析错误,继续解析,按需配置,源端DM8一般配置1–>

<idle_time>300</idle_time><!–日志分析空闲时间,防止dmhs读取速度赶超redo切换复写速度–>

<read_again_interval>255</read_again_interval><!–开启日志读取二次读取校验日志功能,防止dmhs读取速度赶超redo切换复写速度–>

    <arch>

        <clear_interval>600</clear_interval>

        <clear_flag>0</clear_flag>

    </arch>

    <send>

        <ip>192.168.1.1</ip><!-- 对方IP -->

        <mgr_port>5345</mgr_port>

        <data_port>5346</data_port>

        <net_pack_size>256</net_pack_size>

        <vpools>13</vpools><!--NET 模块内存池的个数-->

        <vpool_size>128</vpool_size><!--缓存事务使用内存池的个数-->

        <case_sensitive>1</case_sensitive><!--NET 模块针对对象名是否大小写敏感,对下面filter过滤有影响,大小写敏感库配置为1-->

        <net_turns>0</net_turns>

        <crc_check>0</crc_check>

        <trigger>1</trigger><!--指示下一级数据入库时,是否需要禁用触发器,配置为1,避免同步的数据触发目的端触发器-->

        <constraint>1</constraint><!--指示下一级数据入库时,是否需要禁用约束-->

        <identity>1</identity><!--1 则表示同步 CPT 中带来的该列值,它的值使用 CPT 中带来的值进行填充;0 则表示启用目标库自增列的属性,目标库自已维护该列的值,按需配置-->

        <filter>

            <enable>

<item>SYSDBA.*</item><!–同步的表示白名单排除黑名单的差集–>

            </enable>

            <disable>

<item>SYSDBA.TEST*</item>

            </disable>

        </filter>

    </send>

</cpt>

</dmhs>

四、启动同步服务,装字典

1、启动两端的dmhs服务

cd /opt/dmhs/bin

./dmhs_server

2、另打开一个窗口,启动两端的执行服务

./dmhs_console进入后

connect 回车

start exec 回车

clear exec lsn;回车

copy 0 “sch.name in (‘xx’,’xx’,…)” dict 回车

start cpt 回车

3、配置service服务

两端/opt/dmhs/bin/service_template下

修改DmhsService

然后cp /opt/dmhs/bin/service_template/DmhsService /etc/init.d/,然后systemctl enable DmhsService

然后就可以exit退出之前源端和目的端的dmhs_server窗口。

通过service DmhsService start后台启动dmhs

vi /etc/rc.local添加如开机自启

/etc/init.d/DmhsService start
————————————————

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服