Menu

文档

逻辑解码概述

功能描述

openGauss对数据复制能力的支持情况为:

支持通过数据迁移工具定期向异构数据库(如Oracle等)进行数据同步,不具备实时数据复制能力。不足以支撑与异构数据库间并网运行实时数据同步的诉求。

openGauss提供了逻辑解码功能,通过反解xlog的方式生成逻辑日志。目标数据库解析逻辑日志以实时进行数据复制。具体如图1所示。逻辑复制降低了对目标数据库的形态限制,支持异构数据库、同构异形数据库对数据的同步,支持目标库进行数据同步期间的数据可读写,数据同步时延低。

图 1 逻辑复制

逻辑复制由两部分组成:逻辑解码和数据复制。逻辑解码会输出以事务为单位组织的逻辑日志。业务或数据库中间件将会对逻辑日志进行解析并最终实现数据复制。openGauss当前只提供逻辑解码功能,因此本章节只涉及逻辑解码的说明。

逻辑解码为逻辑复制提供事务解码的基础能力,openGauss使用SQL函数接口进行逻辑解码。此方法调用方便,不需使用工具,对接外部工具接口也比较清晰,不需要额外适配。

由于逻辑日志是以事务为单位的,在事务提交后才能输出,且逻辑解码是由用户驱动的;因此为了防止事务开始时的xlog被系统回收,或所需的事务信息被VACUUM回收,openGauss新增了逻辑复制槽,用于阻塞xlog的回收。

一个逻辑复制槽表示一个更改流,这些更改可以在其它集群上以它们在原集群上产生的顺序被重播。逻辑复制槽,由每个逻辑日志的获取者维护一个。

注意事项

  • 不支持DDL语句解码。
  • 不支持列存、数据页复制的解码。
  • 当执行DDL语句(如alter table)后,该DDL语句前尚未解码的物理日志可能会丢失。
  • 使用逻辑解码功能时,禁止进行集群在线扩容。
  • 单条元组大小不超过1GB,考虑解码结果可能大于插入数据,因此建议单条元组大小不超过500MB。
  • 不支持压缩表的DML语句解码。
  • openGauss支持解码的数据类型为:INTEGER、BIGINT、SMALLILNT、TINYINT、SERIAL、SMALLSERIAL、BIGSERIAL、FLOAT、DOUBLE PRECISION、DATE、TIME[WITHOUT TIME ZONE]、TIMESTAMP[WITHOUT TIME ZONE]、CHAR(n)、VARCHAR(n)、TEXT。
  • 目前默认不支持ssl连接,如果需要ssl连接需要设置guc参数ssl=on。
  • 如果使用JDBC创建逻辑复制槽,则逻辑复制槽名称必须小于64个字符,以字母或下划线开头,且只包含字母、数字或者下划线中的一种或几种。

本文档遵循知识共享许可协议CC 4.0 (http://creativecommons.org/Licenses/by/4.0/)。