千家信息网

DM7数据复制中数据库级复制的原理及用法是什么

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,DM7数据复制中数据库级复制的原理及用法是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。DM 的数据复制可以在表级,模式级和库级进行
千家信息网最后更新 2026年11月02日DM7数据复制中数据库级复制的原理及用法是什么

DM7数据复制中数据库级复制的原理及用法是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

DM 的数据复制可以在表级,模式级和库级进行配置,表级复制因为不能同步DDL,所以必须要求主从段表的结构必须完全一致。 本篇我们看下数据库级数据复制的配置过程。
下面举一个简单的例子来说明数据复制的配置。
1. 准备工作
参与复制的复制实例的信息如下表所示。
数据库 实例名 IP地址 数据库端口号 MAL端口号 文件目录
复制数据库 jydm 10.10.10.180 5236 5241 /dm_home/dmdba/dmdbms/data/
主数据库 hy 10.10.10.184 5236 5242 /dm_home/dmdba/dmdbms/data/
从数据库 wy 10.10.10.185 5236 5243 /dm_home/dmdba/dmdbms/data/

假设主数据库上存在hy用户,从数据库上存在wy用户,现需要创建一个主数据库上的hy用户到从数据库上wy用户的同步复制关系,其名称为REPHY2WY。

2. 参数设置
修改3台DM数据库的dm.ini 文件,添加如下内容:
数据库 dm.ini 设置
复制数据库 INSTANCE_NAME = jydm
PORT_NUM = 5236
MAL_INI = 1
主数据库 INSTANCE_NAME = hy
PORT_NUM = 5236
MAL_INI = 1
从数据库 INSTANCE_NAME = wy
PORT_NUM = 5236
MAL_INI = 1

配置dmmal.ini 文件
修改dmmal.ini文件,添加如下内容。Dmmal 配置文件默认没有,可以从示例目录下复制过来修改。

[root@shard1 ini_script]# pwd/dm_home/dmdba/dmdbms/samples/ini_script[root@shard1 ini_script]# ls -lrt总用量 48-rwxr-xr-x 1 dmdba dinstall  890 2月  14 2019 dmarch_example.ini-rwxr-xr-x 1 dmdba dinstall 1966 2月  14 2019 dmdcr_cfg_example.ini-rwxr-xr-x 1 dmdba dinstall  631 2月  14 2019 dmdcr_example.ini-rwxr-xr-x 1 dmdba dinstall 1537 2月  14 2019 dminit_example.ini-rwxr-xr-x 1 dmdba dinstall 2070 2月  14 2019 dmmal_example.ini-rwxr-xr-x 1 dmdba dinstall 1277 2月  14 2019 dmmonitor_example.ini-rwxr-xr-x 1 dmdba dinstall  288 2月  14 2019 dmmpp_example.ini-rwxr-xr-x 1 dmdba dinstall 1679 2月  14 2019 dmtimer_example.ini-rwxr-xr-x 1 dmdba dinstall 1241 2月  14 2019 dmwatch_example.ini-rwxr-xr-x 1 dmdba dinstall 2146 2月  14 2019 dmwatcher_example.ini-rwxr-xr-x 1 dmdba dinstall  522 2月  14 2019 dmwmon_example.ini-rwxr-xr-x 1 dmdba dinstall  636 2月  14 2019 sqllog_example.ini

在每个数据库服务器上创建一个dmmal.ini文件,每个dmmal.ini 配置必须一致:

MAL_CHECK_INTERVAL = 5MAL_CONN_FAIL_INTERVAL = 5[MAL_jydm]MAL_INST_NAME = jydmMAL_HOST = 10.10.10.180MAL_PORT = 5241MAL_INST_PORT = 5236 MAL_INST_HOST = 10.10.10.180[MAL_hy]MAL_INST_NAME = hyMAL_HOST = 10.10.10.184MAL_PORT = 5242MAL_INST_PORT = 5236 MAL_INST_HOST = 10.10.10.184[MAL_wy] MAL_INST_NAME =wyMAL_HOST = 10.10.10.185MAL_PORT = 5243MAL_INST_PORT = 5236 MAL_INST_HOST =10.10.10.185[dmdba@shard1 jydm]$ cat dmmal.iniMAL_CHECK_INTERVAL = 5MAL_CONN_FAIL_INTERVAL = 5[MAL_jydm]MAL_INST_NAME = jydmMAL_HOST = 10.10.10.180MAL_PORT = 5241MAL_INST_PORT = 5236 MAL_INST_HOST = 10.10.10.180[MAL_hy]MAL_INST_NAME = hyMAL_HOST = 10.10.10.184MAL_PORT = 5242MAL_INST_PORT = 5236 MAL_INST_HOST = 10.10.10.184[MAL_wy] MAL_INST_NAME =wyMAL_HOST = 10.10.10.185MAL_PORT = 5243MAL_INST_PORT = 5236 MAL_INST_HOST =10.10.10.185[dmdba@jydm2 hy]$ cat dmmal.iniMAL_CHECK_INTERVAL = 5MAL_CONN_FAIL_INTERVAL = 5[MAL_jydm]MAL_INST_NAME = jydmMAL_HOST = 10.10.10.180MAL_PORT = 5241MAL_INST_PORT = 5236 MAL_INST_HOST = 10.10.10.180[MAL_hy]MAL_INST_NAME = hyMAL_HOST = 10.10.10.184MAL_PORT = 5242MAL_INST_PORT = 5236 MAL_INST_HOST = 10.10.10.184[MAL_wy] MAL_INST_NAME =wyMAL_HOST = 10.10.10.185MAL_PORT = 5243MAL_INST_PORT = 5236 MAL_INST_HOST =10.10.10.185[dmdba@jydm3 wy]$ cat dmmal.iniMAL_CHECK_INTERVAL = 5MAL_CONN_FAIL_INTERVAL = 5[MAL_jydm]MAL_INST_NAME = jydmMAL_HOST = 10.10.10.180MAL_PORT = 5241MAL_INST_PORT = 5236 MAL_INST_HOST = 10.10.10.180[MAL_hy]MAL_INST_NAME = hyMAL_HOST = 10.10.10.184MAL_PORT = 5242MAL_INST_PORT = 5236 MAL_INST_HOST = 10.10.10.184[MAL_wy] MAL_INST_NAME =wyMAL_HOST = 10.10.10.185MAL_PORT = 5243MAL_INST_PORT = 5236 MAL_INST_HOST =10.10.10.185

对3个数据库都要启用mal_ini参数

SQL> sp_set_para_value(2,'MAL_INI',1);DMSQL executed successfullyused time: 7.465(ms). Execute id is 23.

复制数据库初始化
如果是第一次使用复制数据库,需要对复制数据库执行初始化操作。通过执行系统函数SP_INIT_REP_SYS(create_flag)来初始化复制数据库。其主要作用是创建复制用户(SYSREP/SYSREP)和创建复制数据库上需要的系统表。SP_INIT_REP_SYS 的参数create_flag为1时表示创建用户和系统表,为0时表示删除用户和系统表。

开始初始化:

SQL> SP_INIT_REP_SYS(1);DMSQL executed successfullyused time: 115.960(ms). Execute id is 30.SQL> conn SYSREP/SYSREPServer[LOCALHOST:5236]:mode is normal, state is openlogin used time: 9.684(ms)SQL> select table_name from user_tables;LINEID     TABLE_NAME       ---------- -----------------1          RPS_GROUPS2          RPS_INSTANCES3          RPS_REPLICATIONS4          RPS_TABMAPS5          RPS_FAULT_HISTORY6          RPS_CONFLICTS7          RPS_TIMERS7 rows gotused time: 170.443(ms). Execute id is 31.

创建的7张复制系统表如下:
1) 复制组表
CREATE TABLE SYSREP.RPS_GROUPS (
NAME VARCHAR(128), // 复制组名
ID INT, // 复制组ID
DESC$ VARCHAR(1000), // 描述
CLUSTER PRIMARY (NAME)
);
2) 复制节点实例表
CREATE TABLE SYSREP.RPS_INSTANCES(
INST_NAME VARCHAR(128), // 复制节点实例名
GRP_ID INT, // 复制组ID
INST_ID INT, // 实例在复制组中编号
FAULT_TIMEOUT INT, // 故障超时处理值,以秒为单位,0为立即超时
VALID_FLAG CHAR(1), // 节点系统状态
FAULT_TIME DATETIME, // 节点故障开始时间
NET_VALID_FLAG CHAR(1), // 网络状态
NET_FAULT_TIME DATETIME, // 网络故障开始时间
CLUSTER PRIMAY KEY(GRP_ID, INST_NAME)
);
3) 复制关系表
CREATE TABLE SYSREP.RPS_REPLICATIONS(
REP_NAME VARCHAR(128), // 复制名
GRP_ID INT, // 复制组ID
REP_ID INT, // 复制ID,全局唯一
MINST_ID INT, // 主节点实例编号
SINST_ID INT, // 从节点实例编号
ARCH_DIR VARCHAR(256), // 主节点归档日志路径
FAULT_TIMEOUT INT, // 故障超时处理值,以秒为单位,0为立即超时
VALID_FLAG CHAR(1), // 复制关系状态
FAULT_TIME DATETIME, // 故障开始时间
SYNC_FLAG INTEGER //指定同步或异步复制
TIMER_NAME VARCHAR(128) //指定异步复制的定时器(同步复制没有此项)
DESC$ VARCHAR(1000), // 复制描述
CLUSTER PRIMARY KEY(GRP_ID, REP_NAME)
);
4) 复制映射表
CREATE TABLE SYSREP.RPS_TABMAPS(
REP_ID INT, //复制ID
MSCH_NAME VARCHAR(128), //主表模式名
MTAB_NAME VARCHAR(128), //主表名
MSCH_ID INT, //主表模式ID
MTAB_ID INT, //主表ID
SSCH_NAME VARCHAR(128), //从表模式名
STAB_NAME VARCHAR(128), //从表名
SSCH_ID INT, //从表模式ID
STAB_ID INT, //从表ID
READONLY_MODE INT, //映射模式1:只读模式,0:非只读模式
CLUSTER PRIMARY KEY(REP_ID, MTAB_ID, STAB_ID)
);
5) 复制故障历史表
CREATE TABLE SYSREP.REP_FAULT_HISTORY(
GRP_NAME VARCHAR(128), // 复制组
OBJ_NAME VARCHAR(128), // 故障节点或关系
FAULT_TYPE VARCHAR(128), // 故障类型描述
START_TIME DATETIME, // 故障开始时间
END_TIME DATETIME // 故障结束时间
);
6) 复制冲突历史表
CREATE TABLE SYSREP.RPS_CONFLICTS
(
SEQ_NO BIGINT // 冲突序号
REP_ID INT, // 对应复制号
INST_ID INT, // 产生冲突的节点编号
TABLE_ID INT, // 冲突表ID
TYPE TINYINT // 操作类型
OCC_TIME DATETIME, // 冲突产生时间
KEY_DATA VARCHAR(8000), // 冲突数据的PK值,如包含多个KEY值,则以逗号分隔。如键值超长则截断
);
7) 复制定时器表
CREATE TABLE SYSREP.RPS_TIMERS (
NAME VARCHAR(128), // 定时器名称
TYPE$ INT, // 定时类型,取值可参见SP_RPS_CREATE_TIMER
FERQ_INTERVAL INT, // 间隔天数
FREQ_SUB_INTERVAL INT, // 间隔的月/周(调度类型决定)数
FREQ_MINUTE_INTERVAL INT, // 间隔的分钟数
START_TIME TIME, // 开始时间
END_TIME TIME, // 结束时间
DURING_START_DATE DATETIME // 开始时间点
DURING_END_DATE DATETIME, // 结束时间点
NO_END_DATA_FLAG INTEGER //是否有结束日期(0:有结束日期;1:没有结束日期)
DESC$ VARCHAR(1000), // 定时器描述
CLUSTER PRIMARY KEY(REP_NAME)
);
配置模式级复制

启动3台服务器,启动的顺序不分先后。

[root@shard1 jydm]# systemctl stop DmServicejydm.service[root@shard1 jydm]# systemctl start DmServicejydm.service[root@jydm2 ~]# systemctl stop DmServicehy.service[root@jydm2 ~]# systemctl start DmServicehy.service[root@jydm3 ~]# systemctl stop DmServicewy.service[root@jydm3 ~]# systemctl start DmServicewy.service

登录复制数据库(RPS jydm),保证服务器状态为OPEN,开始复制配置。

[dmdba@shard1 bin]$ ./disql sysdba/abcdServer[LOCALHOST:5236]:mode is normal, state is openlogin used time: 9.851(ms)disql V7.1.6.46-Build(2018.02.08-89107)ENT Connected to: DM 7.1.6.46

创建复制组REP_GRP_hy2wy

SQL> SP_RPS_ADD_GROUP('REP_GRP_hy2wy', '主从同步复制');DMSQL executed successfullyused time: 32.545(ms). Execute id is 26.SQL> select * from SYSREP.RPS_GROUPS;LINEID     NAME          ID          DESC$       ---------- ------------- ----------- ------------1          REP_GRP_hy2wy 3           主从同步复制used time: 1.073(ms). Execute id is 27.

开始设置

SQL> SP_RPS_SET_BEGIN('REP_GRP_hy2wy');DMSQL executed successfullyused time: 0.530(ms). Execute id is 57.

添加复制关系

SQL> SP_RPS_ADD_REPLICATION ('REP_GRP_hy2wy', 'REPhy2wy', 'hy到wy的同步复制', 'hy', 'wy', NULL, '/dm_home/dmdba/dmdbms/dmreplog');DMSQL executed successfullyused time: 2.529(ms). Execute id is 29.

添加数据库级复制

SQL> SP_RPS_ADD_DB_MAP('REPhy2wy', 0);DMSQL executed successfullyused time: 0.597(ms). Execute id is 30.

提交设置

SQL> SP_RPS_SET_APPLY();DMSQL executed successfullyused time: 00:00:05.035. Execute id is 31.SQL>  select * from SYSREP.RPS_REPLICATIONS;LINEID     REP_NAME GRP_ID      REP_ID      MINST_ID    SINST_ID    ARCH_DIR                       FAULT_TIMEOUT VALID_FLAG  FAULT_TIME                  SYNC_FLAG   TIMER_NAME DESC$           ---------- -------- ----------- ----------- ----------- ----------- ------------------------------ ------------- ----------- --------------------------- ----------- ---------- ----------------1          REPhy2wy 3           4           7           8           /dm_home/dmdba/dmdbms/dmreplog -1            0           NULL                        1           NULL       hy到wy的同步复制used time: 1.277(ms). Execute id is 32.SQL> select * from SYSREP.RPS_INSTANCES;LINEID     INST_NAME GRP_ID      INST_ID     FAULT_TIMEOUT VALID_FLAG  FAULT_TIME                  NET_VALID_FLAG NET_FAULT_TIME             ---------- --------- ----------- ----------- ------------- ----------- --------------------------- -------------- ---------------------------1          hy        3           7           -1            0           NULL                        0              NULL2          wy        3           8           -1            0           NULL                        0              NULLused time: 1.014(ms). Execute id is 33.SQL> select * from SYSREP.RPS_TABMAPS;LINEID     REP_ID      MSCH_NAME MTAB_NAME MSCH_ID     MTAB_ID     SSCH_NAME STAB_NAME SSCH_ID     STAB_ID     READONLY_MODE---------- ----------- --------- --------- ----------- ----------- --------- --------- ----------- ----------- -------------1          4           NULL      NULL      -1          -1          NULL      NULL      -1          -1          0used time: 1.129(ms). Execute id is 34.

至此,数据库级复制配置完成。注意一点,DM的复制配置必须在开始复制配置之前执行SP_RPS_SET_BEGIN,配置完成之后执行SP_RPS_SET_APPLY提交。

验证同步
在主库上的hy用户下创建一个测试表t4

SQL> create table t4 as select * from sysobjects;executed successfullyused time: 12.280(ms). Execute id is 12.SQL> select count(*) from t4;LINEID     COUNT(*)            ---------- --------------------1          1480used time: 1.256(ms). Execute id is 13.

在从库上的wy用户查询这个表t4

SQL> select count(*) from t4;select count(*) from t4;[-2106]:Error in line: 1Invalid table or view name [T4].used time: 0.423(ms). Execute id is 0.

可以看到创建表的DDL语句没有同步到wy用户下。

在主库上创建用户jy

SQL> create user jy identified by "abcd";executed successfullyused time: 4.940(ms). Execute id is 5.SQL> grant dba,resource to jy;executed successfullyused time: 2.929(ms). Execute id is 6.

在从库上登录用户jy

[dmdba@jydm3 bin]$ ./disql jy/abcd[-70028]:Create SOCKET connection failure.disql V7.1.6.46-Build(2018.02.08-89107)ENT username:

从从库上的日志可以看到故障信息

2019-12-20 00:15:08 [WARNING] database P0000029732 main_thread  rps sys init failed, code:-8748

从复制数据库上查看复制故障信息

SQL> select * from SYSREP.RPS_FAULT_HISTORY;LINEID     GRP_NAME      OBJ_NAME FAULT_TYPE         START_TIME                  END_TIME                   ---------- ------------- -------- ------------------ --------------------------- ---------------------------1          REP_GRP_hy2wy REPhy2wy REPLICATION FAULT  2019-12-20 00:14:23.366210  2019-12-20 00:15:24.0420322          REP_GRP_hy2wy wy       INSTANCE SYS FAULT 2019-12-20 00:14:23.366210  2019-12-20 00:15:24.0420323          REP_GRP_hy2wy REPhy2wy REPLICATION FAULT  2019-12-20 00:16:23.386842  NULL4          REP_GRP_hy2wy wy       INSTANCE SYS FAULT 2019-12-20 00:16:23.386842  NULLused time: 1.179(ms). Execute id is 4.

从测试结果可以看到数据库级的数据复制不支持DDL,数据库的数据复制对创建用户的操作处理异常,会导致从库奔溃。

看完上述内容,你们掌握DM7数据复制中数据库级复制的原理及用法是什么的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

数据 数据库 用户 故障 配置 时间 同步 模式 节点 实例 文件 系统 冲突 内容 定时器 状态 类型 主从 信息 参数 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 苏州找大状互联网科技有限公司 重生之互联网科技帝国 互联网科技资迅 麻工互联网科技 艾特科技互联网 智慧科技互联网 互联网教育科技公司vipkid 福建科技产业互联网发展 赶超互联网科技 微信多开 青岛科技大学互联网大赛研究生 阿大互联网科技有限公司 互联网科技与大数据专业 洛阳共同富裕互联网科技有限公司 每天都有哪些好的互联网科技 皮皮虾互联网科技有限公司 互联网科技快讯热点 互联网相关科技技术 广东鹅鹅鹅互联网科技有限公司 世界互联网科技成果奖 深圳互联网科技园地址 科技互联网产品 关于新基建和互联网科技 鑫亿盛互联网科技 互联网女皇 腾讯科技 创业天下互联网科技有限公司 晓花互联网科技有限公司网址 民营互联网公司国防科技 35岁以上互联网科技行业 科技互联网公司两年变化 东风日产互联网科技公司叫什么
0