返回首页

gbase数据、南大通用产品文档:GBase8a集群节点替换

更新日期:2024年09月11日

当集群规模不断扩大时,集群节点损坏的概率会增加,同时随着数据量增大,单个
节点的计算能力和存储能力也可能成为瓶颈,
这两种情况都需要对集群节点进行替
换,保证集群能够正常工作。GBase 8a MPP Cluster 具有在线不停服务节点替换能
力,即可在生产环境下不停机进行节点替换。
说明

集群范围内同一时刻只能启动一个节点替换进程,不允许多个节点替换进程并行,gcware
会加资源锁来保证。

一次只能替换同一个vc 中的节点,且被替换节点至少有一个可用备份分片:

纯数据节点,一个vc 内的,一次可以替换多个data 节点;

复合节点,需要进行两次替换,先替换coordinator 节点,再替换数据节点;

复合节点,
可以同时替换包括复合节点里coordinator 节点在内的多个coordinator 节点;

复合节点,可以同时替换一个vc 中,包括复合节点里数据节点在内的多个数据节点。

如果复合节点上部署了gcware,则需要进行三次替换,先执行gcware 替换,然后执行
coordinator 替换,最后执行数据节点替换。

允许中断正在执行的节点替换进程。

允许用户指定数据恢复时用户数据表的恢复顺序。

允许用户指定节点替换过程中是否用内存(/dev/shm)来存储临时数据。

在线不停服务节点替换说明:
节点替换时,集群变为readonly 状态,集群收到应用程序写操作时,让SQL 等待,不返回
报错信息,等节点替换操作完成之后再返回,应用程序未超时的情况下,可以继续执行,
保证节点替换时完全在线。

如果gcware 和gcluster 部署在同一节点上,节点替换时需要对gcluster 和gcware 分别进行
替换,先替换gcware 节点,再替换gcluster 节点。

gcluster 节点替换同旧版本的节点替换操作,没有变化。

gcware 节点替换需单独进行,替换前必须保证gcware 节点多数派可用。

一次可以替换小于总gcware 节点数的一半。

支持在线替换,无需设置原集群gcware 节点的gcware 状态。

GBase 8a MPP Cluster 产品手册
4 管理员指南
文档版本953(2022-09-15)
南大通用数据技术股份有限公司
290

您可使用 sql.h 和 sqlext.h 标头文件,
来运行 GBase 8s ODBC Driver,
其为 Microsoft™ 编
译器的一部分。
要运行 GBase 8s 扩展,
请包括安装在 GBS_HOME/incl/cli 中的 infxcli.h 文件。
此文件定
义 GBase 8s ODBC Driver 常量和类型,并为 GBase 8s ODBC Driver 环境提供函数
prototype。如果包括 infxcli.h 文件,则它自动地包括 sql.h 和 sqlext.h 文件。
sql.h 和 sqlext.h 标头文件包含 C 数据类型的定义。
请在 XA ODBC 应用程序中包括 xa.h 标头文件。Windows™ 上的 ODBC 应用程序需要
GBase 8s Client Software Development Kit 来编译。在重新编译它们之前,ODBC 驱动程序
的应用程序可能需要在 PATH 环境变量中包括 Client SDK 的位置。

当使用 UDTManager 和 UDRManager 类在数据库中创建不透明类型和 Java™ UDR 时,驱
动程序映射 Java 方法参数并根据本节中的表返回类型的 SQL数据类型。不支持未在这些
表中显示的任何数据类型。
如果 Java™ 方法具有以下任何 Java 类型的参数,则参数和返回类型将映射到服务器中的
SQL 类型,如下表所示。该表显示每个 Java 数据类型映射到的 GBase 8s 数据类型。
Java 数据类型
SQL 数据类型
boolean, java.lang.Boolean
BOOLEAN
char
CHAR(1)

GBase 8s JDBC Driver 程序员指南
南大通用数据技术股份有限公司
- 273 -

Java 数据类型
SQL 数据类型
byte
CHAR(1)
short, java.lang.Short
SMALLINT
int, java.lang.Integer
INT
long, java.lang.Long
INT8
float, java.lang.Float
SMALLFLOAT
double, java.lang.Double
FLOAT1
java.lang.String
LVARCHAR
java.math.BigDecimal
DECIMAL
缺省精度由服务器设置:ANSI 数据库为
DECIMAL(16,0) ;非 ANSI 数据库为 decimal (16,255)
java.sql.Date
DATE
java.sql.Time
DATETIME HOUR TO SECOND
java.sql.Timestamp
DATETIME YEAR TO FRACTION(5)
com.gbasedbt.lang.IntervalY
M
INTERVAL YEAR TO MONTH
com.gbasedbt.lang.IntervalD
F
INTERVAL DAY TO FRACTION(5)
java.sql.Blob
BLOB
java.sql.Clob
CLOB
1 此映射是 JDBC 兼容的。通过将 IFX_GET_SMFLOAT_AS_FLOAT 环境变量设置为 1,
可以将 Java double 数据类型(通过 JDBC FLOAT 数据类型)映射到 GBase
8s SMALLFLOAT 数据类型以实现向后兼容。
映射转换类型
下表显示了在 UDTMetaData.setXXXCast() 方法中为 ifxtype 参数定义的类型与服务器中的
SQL 数据类型之间支持的映射。
来自 com.gbasedbt.lang.IfxTypes 的 ifxtype 参数类

GBase 8s 数据类

IFX_TYPE_CHAR
CHAR
IFX_TYPE_SMALLINT
SMALLINT

GBase 8s JDBC Driver 程序员指南
南大通用数据技术股份有限公司
- 274 -

来自 com.gbasedbt.lang.IfxTypes 的 ifxtype 参数类

GBase 8s 数据类

IFX_TYPE_INT
INT
IFX_TYPE_FLOAT
FLOAT
IFX_TYPE_SMFLOAT
SMALLFLOAT
IFX_TYPE_DECIMAL
DECIMAL
IFX_TYPE_SERIAL
SERIAL
IFX_TYPE_DATE
DATE
IFX_TYPE_MONEY
MONEY
IFX_TYPE_DATETIME
DATETIME
IFX_TYPE_BYTE
BYTE
IFX_TYPE_TEXT
TEXT
IFX_TYPE_VARCHAR
VARCHAR
IFX_TYPE_INTERVAL
INTERVAL
IFX_TYPE_NCHAR
NCHAR
IFX_TYPE_NVARCHAR
NVARCHAR
IFX_TYPE_INT8
INT8
IFX_TYPE_SERIAL8
SERIAL8
IFX_TYPE_LVARCHAR
LVARCHAR
IFX_TYPE_SENDRECV
SENDRECV
IFX_TYPE_BOOL
BOOLEAN
IFX_TYPE_IMPEXP
IMPEXP
IFX_TYPE_IMPEXPBIN
IMPEXPBIN
IFX_TYPE_CLOB
CLOB
IFX_TYPE_BLOB
BLOB
映射字段类型
下表显示了在 UDTMetaData.setFieldType() 方法中为 ifxtype 参数定义的类型与在 Java™ 类
文件中出现的 Java 数据类型之间支持的映射。
未在此表中显示的数据类型在不透明类型中
不支持。

GBase 8s JDBC Driver 程序员指南
南大通用数据技术股份有限公司
- 275 -

来自
com.gbasedbt.lang.IfxTypes 的
ifxtype 参数类型
Java 数据类型
IFX_TYPE_BIGINT
long
IFX_TYPE_BIGSERIAL
long
IFX_TYPE_CHAR
java.lang.String
IFX_TYPE_SMALLINT
short
IFX_TYPE_INT
int
IFX_TYPE_FLOAT
double
IFX_TYPE_SMFLOAT
float1
IFX_TYPE_DECIMAL
java.lang.BigDecimal
IFX_TYPE_SERIAL
int
IFX_TYPE_DATE
Date
IFX_TYPE_MONEY
java.lang.BigDecimal
IFX_TYPE_DATETIME
如果起始限定符为年、月或日,则为
java.lang.Timestamp ;
否则为 java.lang.Time
(请
参阅 字段长度和 DATETIME 数据)。
IFX_TYPE_INTERVAL
如果起始限定符为年、月或日,则为
com.gbasedbt.lang.IfxIntervalYM;否则为
com.gbasedbt.lang.IfxIntervalDF (请参阅 字段
长度和 DATETIME 数据)。
IFX_TYPE_NCHAR
java.lang.String
IFX_TYPE_INT8
long
IFX_TYPE_SERIAL8
long
IFX_TYPE_BOOL
boolean
IFX_TYPE_CLOB
java.sql.Clob
IFX_TYPE_BLOB
java.sql.Blob
1 此映射是 JDBC 兼容的。通过将 IFX_GET_SMFLOAT_AS_FLOAT 环境变量设置为 1,
将 IFX_TYPE_SMFLOAT 数据类型(通过 JDBC FLOAT 数据类型)映射到 Java double
数据类型以实现向后兼容。
字段长度和 DATETIME 数据

GBase 8s JDBC Driver 程序员指南
南大通用数据技术股份有限公司
- 276 -

当通过调
用 setFieldType(IFX_TYPE_DATETIME) 或 setFieldType(IFX_TYPE_INTERVAL) 将字段类
型设置为 date-time 或 interval 数据类型时,驱动程序会将 date-time 字段映射
为 java.sql.Timestamp 或 java.sql.Time,这取决于调用 setFieldLength() 时设置的编码长度。
例如,给出一个 date-time 字段的标准格式为 YYYY-MM-DD HH:MM:SS,驱动程序会使
用以下映射算法:

如果编码长度具有 hour 或更小的起始码,则会映射为 java.sql.Time。

如果编码长度具有 year 或更小的起始码,则会映射为 java.sql.TimeStamp。
对于 interval,标准为 YYYY-MM 或 DD HH:MM:SS.frac。其映射如下:

如果编码长度具有 day 或更小的起始码,则它映射
为 com.gbasedbt.jdbc.IfxIntervalDF。

如果编码长度具有 year 或更小的起始码,则它映射
为 com.gbasedbt.jdbc.IfxIntervalYM。