GBase 8s
其他
文章

南大通用GBase 8s ER 复制:智能大对象(BLOB/CLOB)空间类型同步

发表于2026-09-10 17:47:28335次浏览2个评论

前言

Enterprise Replication(ER)作为 GBase 8s 的数据复制组件,除支持常规行数据复制外,也支持智能大对象 Smart‑BLOB(BLOB、CLOB)字段的数据同步。智能大对象存储于 sbspace 空间,在配置 ER 复制时有特定的使用约束与操作流程。

本文基于 GBase8sV8.8_TL_3.5.1 版本,完整演示 sbspace 空间创建、大对象表构建、ER 复制定义、数据插入验证全流程,帮助大家完成 BLOB/CLOB 字段多节点 ER 复制验证与落地。

1. 智能大对象空间类型同步

说明:智能大对象空间不支持直接插入,需要使用函数filetoblob和filetoclob完成大对象数据写入。

1.1 创建智能大对象 sbspace 空间

三个节点均执行下面操作

cd $GBASEDBTDIR/storage
chown gbasedbt:gbasedbt subspace
chmod 660 sbspace
onspaces -c -S sbspace -p $GBASEDBTDIR/storage/sbspace -o 0 -s 100000 -k 2
onmode -wf SBSPACENAME=sbspace

1.2 CLOB 大对象 ER 复制测试

三个节点 testdb 数据库都执行建表语句:

create table t3(id int, col clob, primary key(id)) with CRCOLS put col in(sbspace);

在 er01 节点定义 ER 复制并启动复制:

cdr define replicate -C timestamp testdb_t3 "testdb@er01:gbasedbt.t3"  "select * from t3" "testdb@er02:gbasedbt.t3"  "select * from t3" "testdb@er03:gbasedbt.t3"  "select * from t3"

cdr start repl testdb_t3

er01 节点准备测试文件,插入 CLOB 大对象数据:

cd /home/llh/gbaseER1
echo 'abc' > clob.txt

dbaccess testdb -
insert into t3  values (1,filetoclob('/home/llh/gbaseER1/clob.txt','server'));

查询验证三节点数据同步结果,er01/er02/er03 实例数据完全一致:

select cdrserver,cdrtime,* from t3;

输出样例:

cdrserver  1
cdrtime    1757137060
id         1
col        abc

1 row(s) retrieved.

1.3 BLOB 大对象 ER 复制测试

三个节点 testdb 数据库都执行建表语句:

create table t4(id int, col blob, primary key(id)) with CRCOLS put col in(sbspace);

在 er01 节点定义 ER 复制并启动复制:

cdr define replicate -C timestamp testdb_t4 "testdb@er01:gbasedbt.t4"  "select * from t4" "testdb@er02:gbasedbt.t4"  "select * from t4" "testdb@er03:gbasedbt.t4"  "select * from t4"

cdr start repl testdb_t4

er01 节点准备测试文件,插入 BLOB 大对象数据:

cd /home/llh/gbaseER1
echo 'blob' > blob.txt

dbaccess testdb -
insert into t4  values (1,filetoblob('/home/llh/gbaseER1/blob.txt','server'));

查询三节点数据,数据同步完成:

select cdrserver,cdrtime,* from t4;

输出样例:

cdrserver  1
cdrtime    1757137522
id         1
col        <SBlob Data>

1 row(s) retrieved.

在 er03 节点,使用lotofile函数把 BLOB 字段导出为本地文件,校验内容正确性:

select lotofile(col,'/home/llh/gbaseER3/blobout.txt!','server') from t4;

输出:

(expression)  /home/llh/gbaseER3/blobout.txt

1 row(s) retrieved.

读取导出文件校验内容:

cd /home/llh/gbaseER3
cat blobout.txt

文件输出内容:blob

总结:

  1. ER 复制支持智能大对象 BLOB、CLOB 同步,全部参与复制的节点都需要预先创建 sbspace 智能大对象空间,并且设置SBSPACENAME参数;
  2. 大对象不能直接 insert 字面量,必须使用filetoclob、filetoblob从服务端本地文件载入;可使用lotofile将大对象导出到数据库服务器磁盘做内容校验;
  3. 建表需要使用put col in(sbspace)指定大对象存储位置,同时带上with CRCOLS增加复制列,保障 ER 复制正常工作;
  4. 复制定义选用‑C timestamp时间戳冲突解析策略,适配多节点 ER 复制场景。

实操中如果出现大对象复制不同步、sbspace 权限报错、大对象导出失败等问题,欢迎社区留言,后续可补充对应的排查思路。

评论

登录后才可以发表评论
用户头像
GBase用户28017发表于 1个月前
这两种类型用得较。
GBase用户51829发表于 1个月前
CLOB和BLOB应用比较多,已收藏