GBase 8a
安装配置
文章

GBase 8a多VC 镜像使用

发表于2024-12-30 19:33:3318次浏览2个评论

1. 查看VC 的distribution【镜像功能要求两个 VC 的 distribution 的主分片数相同】
gcadmin showdistribution vc vc1
gcadmin showdistribution vc vc2

2. 比对两个 VC 的 HASHMAP 是否相同
select distinct(res.r), count(res.r) from (select count(*) r from
gbase.nodedatamap t where t.data_distribution_id in (1,2) group by
t.hashkey, t.nodeid) res group by res.r;

3. 同化 HASHMAP:镜像表所属的两个 VC 创建相同的 hashmap:
 - 两个集群创建相同的 distribution;
 - 初始化时创建相同的 HASHMAP:

语法:
 - initnodedatamap from vc 是专为镜像功能设计,所以要求 distribution 个数必须相同。
INITNODEDATAMAP FROM VC1;  

 

4、创建镜像

1. 虚拟集群镜像功能提供了三种方式创建表镜像。分别是:
(1) 创建单个表镜像;
(2) 以库为单位创建表镜像;
(3) 同时创建主表和镜像表;
(4) 创建库的默认镜像 VC。

1. 创建单个表镜像;
 - 以下命令用于 VC1.DB.T1 表和 VC2.DB 库已存在, VC2.DB.T1 表不存在的场景下,
在 VC2.DB 下创建 T1 表、同步数据并创建镜像关系,使 VC1.DB.T1 与VC2.DB.T1 完全一样,
并在后续对镜像关系表的任意一边操作保持同步到另一边。如果 VC2.DB.T1 表存在则报错。

ALTER TABLE VC1.testdb.test CREATE MIRROR TO VC2;

(1) 强制创建镜像命令:
 - 以上命令使用 FORCE 参数,用于 VC2.DB.T1 表存在的场景,
会强制在 VC2.DB中创建 VC1.DB.T1 的镜像表,使 VC2.DB.T1 与 VC1.DB.T1 完全一样,
并在后续对镜像关系表的任意一边操作保持同步到另一边。

ALTER TABLE VC1.DB.T1 CREATE MIRROR TO VC2 FORCE;
#################################################################################
2. 以库为单位创建表镜像
 - 镜像库必须有主库的库,方可创建成功
ALTER DATABASE VC1.DB CREATE MIRROR TO VC2;

(1) 强制创建库级镜像表命令(使用 Force 参数):
 - 镜像库存在主库的库,以及还存在表
ALTER DATABASE VC1.DB CREATE MIRROR TO VC2 FORCE;

#################################################################################
3. 同时创建主表和镜像表
 - 在 CREATE TABLE 语句中增加 MIRROR TO 参数来实现同时创建主表和镜像表。
CREATE TABLE VC1.DB.T1(A INT, B VARCHAR(10)) MIRROR TO VC2;
CREATE TABLE VC1.DB.T1 MIRROR TO VC2 AS SELECT * FROMVC1.DB.T  

如果 VC2.DB 中存在 T1 表则报错。

#################################################################################
4. 创建库的默认镜像VC
 - 设置 VC1.DB 库的默认镜像所在的 VC 名(后续简称为默认镜像 VC),
用于VC1.DB 和 VC2.DB 已存在的场景下。如果 VC2.DB 不存在则报错。    

ALTER DATABASE VC1.DB SET DEFAULT MIRROR = VC2;

评论

登录后才可以发表评论
用户头像
levvel发表于 3个月前
文笔太棒了!
用户头像
levvel发表于 1个月前
评论是一种尊重