GBase 8s
其他
文章

GBase 8s Enterprise Replication 主‑目标复制示例

发表于2026-09-03 13:35:57372次浏览1个评论

Enterprise Replication(简称 ER)是 GBase 8s 重要的数据复制能力,主‑目标(主从)复制模式是最常用的复制场景:仅将主端的数据变更同步复制到目标端,目标端本地产生的数据修改不会反向同步回主端,适用于数据分发、报表卸载、读写分离等业务场景。

本文基于官方示例文档完整演示 ER 主‑目标复制的环境准备、服务器组定义、复制对象创建与激活的全流程,所有命令、输出样例均保留原文,可供运维人员做环境部署、功能验证参考。

1. 复制环境准备

本示例的复制环境由以下组成:

三台计算机(s1 、s2 和 s3)分别是数据库服务器 usa 、italy 和 japan 的主机。每台计算机都具有与其它两台计算机的活动网络连接。

数据库服务器 usa 、italy 和 japan 分别是数据库服务器组 g_usa 、g_italy 和 g_japan 的成员。

每个数据库服务器的 sqlhosts 文件必须具有以下连接信息:

g_usa    group     -      -          i=1
usa      ontlitcp  s1     techpubs1  g=g_usa
g_italy  group     -      -          i=8
italy    ontlitcp  s2     techpubs2  g=g_italy
g_japan  group     -      -          i=6
japan    ontlitcp  s3     techpubs6  g=g_japan

必须为行数据创建 sbspace 并将 CDR_QDATA_SBSPACE 参数设置为该 sbspace 的位置。

除了在 italy 和 japan 上创建样本数据库之外,此示例中的所有命令都是从计算机 s1 上发出的。

用于本示例的数据库是具有日志记录的完全相同的 stores_demo 数据库,如下所示:

在 usa 数据库服务器上创建名为 stores 的数据库:

s1> dbaccessdemo -log stores

在 italy 数据库服务器上创建名为 stores 的数据库:

s1> rlogin s2
s2> dbaccessdemo -log stores

在 japan 数据库服务器上创建名为 stores 的数据库:

s1> rlogin s3
s3> dbaccessdemo -log stores

2. 主‑目标示例

在主‑目标复制中,只有对主表的更改才复制到复制中的其他表中。不会复制对辅助表的更改。

在本示例中,把 g_usa 和 g_italy 数据库服务器组定义为 Enterprise Replication 服务器并创建复制 repl1。

要定义数据库服务器组并创建复制:

  1. 创建并将 usa 数据库服务器定义为复制服务器的数据库:
cdr define server --init g_usa

--init 选项指定该服务器是一个新的复制服务器。在定义复制服务器时,必须使用数据库服务器组的名称( g_usa)而不是数据库服务器的名称。

2. 显示所定义的复制服务器,以验证定义是否成功:

cdr list server

命令返回以下信息:

SERVER    ID STATE    STATUS    QUEUE   CONNECTION CHANGED
          ----------------------------------------------------------
  g_usa         1            Active             Local     0

3. 将另一个数据库服务器 italy 定义为复制服务器:

cdr define server --connect=italy --init  --sync=g_usa g_italy

--connect 选项允许您在 s1 计算机上工作时定义 italy。--sync 选项指示此命令将已定义的复制服务器(g_usa)用作新定义的模式。--sync 选项也将两个复制服务器链接到一个复制环境中。

4. 验证第二个定义是否成功:

cdr list server

命令返回以下信息:

SERVER    ID STATE    STATUS    QUEUE   CONNECTION CHANGED
        ----------------------------------------------------------
   g_italy     8           Active   Connected 0       JUN 14 14:38:44 2000
   g_usa      1           Active   Local     0

5. 定义复制 repl1:

cdr define replicate --conflict=ignore repl1 \
        "P stores@g_usa:informix.manufact" \
        "select * from manufact" \
        "R stores@g_italy:informix.manufact" \
        "select * from manufact"

说明:以上为单条完整命令,行末尾反斜杠\代表命令换行延续。

这一步指定应该忽略冲突,并描述了复制中的两个参与者 usa 和 italy :

  • P 表示在该复制中 usa 是主服务器。即,如果选择的列中的任何数据更改,那么更改的数据应当发送到辅助服务器上。
  • R 表示在该复制中 italy 是辅助服务器(仅接收)。指定的表和列接收从主服务器发送的信息。对 italy 上那些列的更改不会被复制。

6. 显示所定义的复制,以便可以验证定义是否成功:

cdr list replicate

命令返回以下信息:

CURRENTLY DEFINED REPLICATES
          ------------------------------------------------
          REPLICATE:     repl1
          STATE:         Inactive
          CONFLICT:      Ignore
          FREQUENCY:     immediate
          QUEUE SIZE:    0
          PARTICIPANT:   g_usa:informix.manufact
          g_italy:informix.manufact

步骤 5 定义了一个复制,但未使该复制活动。步骤 6 的输出显示复制的状态是 INACTIVE。

7. 使复制变成活动状态:

cdr start repl1

8. 显示复制,这样您可以验证 STATE 是否已更改为 ACTIVE:

cdr list replicate

命令返回以下信息:

CURRENTLY DEFINED REPLICATES
            ------------------------------------------------
            REPLICATE:     repl1
            STATE:         Active
            CONFLICT:      Ignore
            FREQUENCY:     immediate
            QUEUE SIZE:    0
            PARTICIPANT:   g_usa:informix.manufact
            g_italy:informix.manufact

如果对 manufact 表进行了任何更改,那么更改将复制到复制的其他参与者上。

关键点总结:

  1. ER 复制配置必须使用服务器组名,不要直接写实例名;
  2. P代表主参与者,R代表接收参与者,主‑目标模式下仅主端变更向外同步;
  3. cdr define replicate仅创建复制规则,必须执行cdr start复制才真正生效;
  4. 前置条件务必配置好sqlhosts、CDR_QDATA_SBSPACE 对应的 sbspace,否则复制环境无法正常初始化。

大家在实操过程中,如果遇到 cdr 命令报错、复制状态异常、数据不同步等问题,欢迎在社区评论区留言交流,后续可以补充 ER 复制常见排错思路。

评论

登录后才可以发表评论
用户头像
郝老师发表于 1个月前
很专业