注册
DMDRS单向同步dm8-dm8(一)
技术分享/ 文章详情 /

DMDRS单向同步dm8-dm8(一)

9999 2026/04/03 42 0 0

本次谈论的是单向单机DM—单机DM
通过DMDRS,将源数据库DMDRS模式下所有表的全量数据和增量数据同步到目标数据库的DMDRS模式下面。
1.数据库准备工作
image.png
image.png

注意:siteid是必配参数:配置时请确保源DMDRS和目标DMDRS服务站点号的唯一性,如果重复,会造成链路中数据复制的混乱

1.1 配置

源库:

1.开启逻辑日志和归档

开启归档配置

方法1:静态配置
dm.ini里面的参数改成ARCH_INI = 1
[root@localhost DAMENG]# cd /dm8/data/DAMENG
[root@localhost DAMENG]# cat dmarch.ini

image.png

方法二:动态配置
image.png

开启逻辑日志配置
RLOG_APPEND_LOGIC参数值有1,2,3.设置根据实际情况来配置:
1:如果有主键列,记录UPDATE和DELETE操作时只包含主键列信息,若没有主键列则包含所有列信息。
2:不论是否有主键列,记录UPDATE和DELETE操作时都包含所有列的信息。
3:记录UPDATE时包含更新列的信息以及ROWID,记录DELETE时只有ROWID
本次设置RLOG_APPEND_LOGIC=1
SQL> call sp_set_para_value(1,‘RLOG_APPEND_LOGIC’,1);
检查ARCH_INI和RLOG_APPEND_LOGIC参数配置是否都是1。
SQL> select para_name, para_value, sess_value, file_value
from V$DM_INI where para_name = ‘ARCH_INI’;

SQL> select para_name, para_value, sess_value, file_value from V$DM_INI where para_name = ‘RLOG_APPEND_LOGIC’;

1.2 配置DDL同步(源库)
DMDRS服务支持DDL同步功能。当应用场景中需要DDL同步时,数据库管理员可按下列方式之一进行配置。
源库是单库或者是DSC时,支持触发器方式和系统表方式配置DDL同步。级联同步和环形同步建议使用系统表方式配置DDL同步
表级同步不支持系统表方式同步DDL。
[dmdba@localhost ~]$ cd /home/dmdba/dmdrs/release/scripts/
[dmdba@localhost scripts]$ ls -l ddl_sql_dm8.sql
-rw-r–r-- 1 dmdba dinstall 49762 Feb 3 14:47 ddl_sql_dm8.sql
方式一:触发器方式(推荐)
SQL> set define off;
SQL> start ddl_sql_dm8.sql
检查建的触发器和表
SQL> select owner, trigger_name from dba_triggers where owner = ‘SYSDBA’ and trigger_name like ‘DRS_%' and status = 'Y'; SQL> select owner, table_name from dba_tables where owner = 'SYSDBA' and table_name like 'DRS_%’ and status = ‘VALID’;
方式二:系统表方式
设置源数据库配置文件“dm.ini”中RLOG_APPEND_SYSTAB_LOGIC参数值为1
1.3 创建源和目标数据库同步用户DMDRS
DMDRS服务运行过程中,使用的数据库同步用户需要一定的权限访问数据库数据,如果不能赋予DMDRS同步用户DBA权限,为确保同步的正确性,数据库管理员可根据应用场景配置数据库同步用户的最小权限
源库:
CREATE USER DMDRS IDENTIFIED by “DMDRS123456”;
grant “RESOURCE”,“PUBLIC”,“VTI”,“SOI”,“SVI” to “DMDRS”;
grant CREATE SESSION to “DMDRS”;
GRANT SELECT ON SYSDBA.DRS_$DDL_LOG TO DMDRS;(源数据库要加上,不然在drscl命令行时start会报错)
GRANT SELECT ON DMHR.CITY TO DMDRS;
GRANT CREATE TABLE TO DMDRS;
GRANT CREATE PACKAGE TO DMDRS;
目标库:
CREATE USER DMDRS IDENTIFIED by “DMDRS123456”;
grant “RESOURCE”,“PUBLIC”,“VTI”,“SOI”,“SVI” to “DMDRS”;
grant CREATE SESSION to “DMDRS”;
GRANT INSERT ANY TABLE TO DMDRS;
GRANT UPDATE ANY TABLE TO DMDRS;
GRANT DELETE ANY TABLE TO DMDRS;
GRANT SELECT ANY TABLE TO DMDRS;
GRANT SELECT ANY SEQUENCE TO DMDRS;
GRANT COMMENT ANY TABLE TO DMDRS;
GRANT CREATE PROCEDURE TO DMDRS;

2 配置:
2.1设置环境变量
DMDRS服务运行过程中,需要使用数据库的驱动文件访问数据库数据。
[dmdba@localhost ~]$ cat .bash_profile
[ -f ~/.bashrc ] && . ~/.bashrc
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/dm8/bin"
export DM_HOME="/dm8"

2.2 DMDRS的配置
DRS使用XML文件作为配置文件,通过XML配置文件配置产品服务功能。常用产品服务的配置文件模板存放于DMDRS安装目录下,配置文件模板名称和默认配置文件名称如下表所示。
源DMDRS文件:cpt.xml
目标DRS文件:exec.xml
2.3 目标DRS文件配置:exec.xml
[dmdba@localhost release]$ cat exec.xml
[dmdba@localhost release]$ cat exec.xml
<?xml version=“1.0” encoding=“GB18030”?>
<drs>
<base>
<mgr_port>5345</mgr_port><!–5345–>
<siteid>2</siteid><!–2-->
</base>
<exec>
<name>exec_dm8</name><!–exec_dm8–>
<login>
<dbtype>dm8</dbtype><!–dm8–>
<server>215.244.11.228</server><!–192.168.20.21–>
<user>DMDRS</user><!–DMDRS–>
<pwd>DMDRS123456</pwd><!–DMDRS–>
<port>5236</port><!–5236–>
</login>
</exec>

前台启动测试是否报错:drsvr相当于disql命令行的命令
[dmdba@localhost release]$ chmod +x drsvr
[dmdba@localhost release]$ ./drsvr exec.xml
image.png

[dmdba@localhost service_template]$ cp /home/dmdba/dmdrs/release/service_template/TemplateService /home/dmdba/dmdrs/release/DrsService
[dmdba@localhost release]$ chmod +x DrsService
[dmdba@localhost release]$ vi DrsService
INSTALL_HOME=/home/dmdba/dmdrs
PROG_DIR=/home/dmdba/dmdrs/release
CONF_PATH=/home/dmdba/dmdrs/release/exec.xml
EXEC_PROG_NAME=drsvr
SERVICE_TYPE_NAME=“drs server”
NEED_LIB_PATH=/dm8/bin/

[dmdba@localhost service_template]$./DrsService start
image.png

2.4 源DMDRS配置:cpt.xml
image.png
源端也可以测试启动是否报错。
[dmdba@localhost release]$ chmod +x drsvr
[dmdba@localhost release]$ ./drsvr exec.xml
截图省略。
[dmdba@localhost service_template]$ cp /home/dmdba/dmdrs/release/service_template/TemplateService /home/dmdba/dmdrs/release/DrsService
[dmdba@localhost release]$ chmod +x DrsService
[dmdba@localhost release]$ vi DrsService
INSTALL_HOME=/home/dmdba/dmdrs
PROG_DIR=/home/dmdba/dmdrs/release
CONF_PATH=/home/dmdba/dmdrs/release/exec.xml
EXEC_PROG_NAME=drsvr
SERVICE_TYPE_NAME=“drs server”
NEED_LIB_PATH=/dm8/bin
[dmdba@localhost service_template]$./DrsService start
image.png

2.5 源端启动控制台
[dmdba@localhost DAMENG]$./drcsl cpt.xml
设置数据库当前最新的日志LSN作为日志解析的起始位置
CSL> alter cpt_dm8 set lsn
将源数据库中DMDRS模式下所有的表添加同步,并在同步之前把源端表的全量数据装载到目标数据库。
CSL> alter cpt_dm8 add table “sch.name=‘DMDRS’”
CSL> start
image.png
image.png

2.6 数据查看
登录目标端11.228机器上面,可以看到有从源端同步过来的DMDRS的数据
image.png

DMDRS支持实时在线增量传输表的数据,在源端建表aa,目标端可以看到表同步过去。
可以看到表aa和table_1日志
[dmdba@localhost log]tail -1000f /home/dmdba/dmdrs/release/log/drs_202603.log
image.png
2.7 遇坑的小结
1.drs包的问题
由于找达梦原厂要的是纯DRS的包,解压出来就只有debug和release这2个目录,不需要执行bin命令安装,解压就可以直接用。
drs所有命令的执行都在release目录下操作。
2.drs.key的问题
达梦原厂给的测试key格式是dmdrsC301900946.key,叫该key mv 到release目录下,重命名dm.key
[dmdba@localhost ~]$ mv dmdrsC301900946.key /home/dmdba/dmdrs/release/dm.key
[dmdba@localhost ~]$ ls -l /home/dmdba/dmdrs/release/dm.key
-rw-r–r-- 1 root root 648 Mar 26 15:54 /home/dmdba/dmdrs/release/dm.key
3.字符集的问题
源和目标的字符集要保持一致,不然drsvr前端启动会有warn提示
image.png
4.源端cpt配置注意点:
[dmdba@localhost release]$ cd /home/dmdba/dmdrs/release
[dmdba@localhost release]$ cat cpt.xml
这块在send要注意是发送到目标端的ip,端口号是5345,是drs的端口号
<send>
<ip>215.244.11.228</ip><!–192.168.20.21–>
<port>5345</port><!–5345–>
5.cpt或者exec前端启动提示内存参数配置较大,提示信息:
mem_size参数配置过大,超过系统剩余内存大小 mem_size: 16G, total_free_size: 2G
在<base>中,添加mem_size参数,调整内存使用。
<base>
<mgr_port>5453</mgr_port><!–5345–>
<siteid>2</siteid><!–2-->
<mem_size>2</mem_size>
</base>

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服