返回首页

gbase数据、南大通用产品文档:GBase8sDRDA_COMMBUFFSIZE 配置参数

更新日期:2024年09月11日

使用 DRDA_COMMBUFFSIZE 配置参数来指定 DRDA® 通信缓冲区的大小。
当建立一个 DRDA 会话时,为会话分配一个等于当前缓冲区大小的通信缓冲区。如果后
来更改了缓冲区大小,
则现有的连接不受影响,
但新的 DRDA 连接使用新的大小。
GBase
8s 自动将大于 2 MB 的值重置到 2 MB,并将小于 4KB 的值重置到 32 KB 缺省值。
onconfig.std 值

GBase 8s 管理员参考
南大通用数据技术股份有限公司 - 64 -
不在 onconfig.std 文件中。
如果不出现
32K

Minimum = 4 KB
Maximum = 2 MB
生效
当初始化共享内存时
用法
通过为值添加
“M”

“K”

用户可以 MB 或 KB 为单位指定 DRDA_COMMBUFFSIZE
值。字母不区分大小写,缺省是 KB。例如,可以下列方法之一指定一个 1 MB 缓冲区:
 DRDA_COMMBUFFSIZE 1M
 DRDA_COMMBUFFSIZE 1m
 DRDA_COMMBUFFSIZE 1024K
 DRDA_COMMBUFFSIZE 1024k
 DRDA_COMMBUFFSIZE 1024

使用 onmode -F 命令释放未使用的内存段,这些段不可用或进程已不再需要。
语法:

元素
用途
关键注意事项

GBase 8s 管理员参考
南大通用数据技术股份有限公司 - 363 -

元素
用途
关键注意事项
-F
释放未使用的内存



在执行 onmode -F 时,内存管理器检查每个内存池的未使用内存。当内存管理器找到未使
用内存块时,它立即释放该内存。在内存管理器检查了每个内存池之后,它开始检查内存
段并释放数据库服务器不再需要的所有段。
建议在数据库服务器执行了任何创建额外内存段的功能(包括大索引构建、排序或备份)
之后从操作系统调度工具定期运行 onmode -F。
运行 onmode -F 会造成执行该实用程序时处于活动状态的所有用户的显著性能降级。尽管
执行时间很短(1 到 2 秒),但对于用户数据库服务器的降级可能达到 100%。具有多个
CPU 虚拟处理器的系统经历的降级成比例地减小。
要确认 onmode 已释放了未使用内存,请检查消息日志。如果内存管理器释放了一个或多
个段,那么它显示一条标识已释放了多少内存段和字节的消息。
该命令有等同的 SQL 管理 API 函数。

您可以使用以下任一操作在 CHAR 和 VARCHAR 列以及字符(char 、string 、
fixchar 、varchar 或 lvarchar)主机变量之间传输字符数据:
提取操作将字符数据从 CHAR 或 VARCHAR 列传输到字符主机变量。
插入或更新操作将字符主机变量传输到 CHAR 、VARCHAR 或 LVARCHAR 列。

如果使用区域设置敏感字符数据类型(NCHAR 或 NVARCHAR),则还可以在
NCHAR 或 NVARCHAR 列和字符主机变量之间传输字符数据。
获取并插入 CHAR 数据
当应用程序使用字符主机变量插入或获取 CHAR 值时,GBase 8s ESQL/C 必须保证
字符值适合主机变量或数据库列。
获取 CHAR 数据
应用程序可以从 CHAR 或 VARCHAR 类型的数据库列获取数据到字符(char 、
string 、fixchar 、varchar 或 lvarchar)主机变量中。如果列数据不符合字符主机变量,
则 GBase 8s ESQL/C 会截断此数据。要通知用户截断,GBase 8s ESQL/C 执行下列操作:

将 sqlca.sqlwarn.sqlwarn1 警告标记设置为 W 并将 SQLSTATE 变量设置为 01004。

它将与字符主机变量关联的任何指示变量设置为列中的字符数据的大小。
插入 CHAR 数据
应用程序可以将字符主机变量(char 、string 、fixchar 、varchar 或 lvarchar)中
的数据插入到 CHAR 类型的数据库列。
如果该值小于数据库列的大小,
则数据库服务器将
使用空格填充到该列大小的值。

如果值大于列的大小,则数据库服务器截断值(如果数据库为非 ANSI)。发生截断
时不会产生警告。如果数据库是 ANSI 并且值大于列的长度,则插入失败并返回此错误:

-1279: Value exceeds string column length.

尽管 char 、
varchar 、
lvarchar 和 string 主机变量包含空终止符,
GBase 8s ESQL/C
不会将这些字符插入到数据库列。(fixchar 类型的主机变量绝对不能包含空终止符。)

如果使用区域设置敏感的数据类型( NCHAR),则可以将字符主机变量中的值插入
NCHAR 列。插入 NCHAR 列的方式与插入到 CHAR 列的行为相同。


GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 97 -
不要将 fixchar 数据类型用于将字符数据插入到符合 ANSI 的数据库中的主机变量。

获取并插入 VARCHAR 数据
当应用程序使用字符主机变量插入或获取 VARCHAR 值时,GBase 8s ESQL/C 必须
确保字符值适合主机变量或数据库列。当 GBase 8s ESQL/C 计算源条目的长度时,它不计
算尾部的空格。以下部分将介绍 GBase 8s ESQL/C 如何执行将 VARCHAR 数据转换为
char 、fixchar 和 string 字符数据类型。

这些转换也适用于 NVARCHAR 数据。
获取 VARCHAR 数据
下表显示了当应用程序将其读取为 char 、fixchar 、lvarchar 和 string 和字符串数
据类型的主机变量时,VARCHAR 数据的转换。

表 3. 将 VARCHAR 数据类型转换为 ESQL/C 字符数据类型
源类型
目标类型
结果
VARCHA
R
char
如果源类型比较长,则截断并使用 null 终止,并设置任
何指示变量。如果目标类型更长,则用尾部空格填充该值,并
将其终止。
VARCHA
R
fixchar
如果源类型比较长,
则截断该值并设置任何指示变量。

果目标类型更长,则用尾部空格填充该值。
VARCHA
R
string
如果源类型比较长,则截断该值并使用 null 终止,并设
置任何指示变量。如果目标类型更长,则使用 null 终止该值。

VARCHA
R
lvarchar
如果源类型比较长,
则截断该值并设置任何指示变量。

果目标类型更长,则 null 终止该值。

下面的表显示了在获取期间 GBase 8s ESQL/C 可能执行的从 VARCHAR 列数据到
字符主机变量的转换示例。
在该表中,
加号
(+)
表示空格字符,
长度列中的值包括任何 null
终止符。

表 4. 获取期间的 VARCHAR 转换示例
源类型
内容
长度
目标类型
内容
指示符
VARCHAR(
9)
Fairfield
9
char(5)
Fair\0
9
VARCHAR(
9)
Fairfield
9
char(12)
Fairfield++\0
0
VARCHAR(
Fairfield+
12
char(10)
Fairfield\0
12

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 98 -
源类型
内容
长度
目标类型
内容
指示符
12)
++
VARCHAR(
10)
Fairfield+
10
char(4)
Fai\0
10
VARCHAR(
11)
Fairfield+
+
11
char(14)
Fairfield++++\
0
0
VARCHAR(
9)
Fairfield
9
fixchar(
5)
Fairf
9
VARCHAR(
9)
Fairfield
9
fixchar(
10)
Fairfield+
0
VARCHAR(
10)
Fairfield+
10
fixchar(
9)
Fairfield
10
VARCHAR(
10)
Fairfield+
10
fixchar(
6)
Fairfi
10
VARCHAR(
10)
Fairfield+
10
fixchar(
11)
Fairfield++
0
VARCHAR(
9)
Fairfield
9
string(4)
Fai\0
9
VARCHAR(
9)
Fairfield
9
string(1
2)
Fairfield\0
0
VARCHAR(
12)
Fairfield+
++
12
string(1
0)
Fairfield\0
12
VARCHAR(
11)
Fairfield+
+
11
string(6)
Fairf\0
11
VARCHAR(
10)
Fairfield+
+
10
string(1
1)
Fairfield\0
0
VARCHAR(
10)
Fairfield+
10
lvarchar
(11)
Fairfield+
0
VARCHAR(
9)
Fairfield
9
lvarchar
(5)
Fair\0
9

插入 VARCHAR 数据
当应用程序将 char 、
varchar 、
lvarchar 和 string 主机变量的值插入到 VARCHAR
列时,GBase 8s ESQL/C 还会插入任何尾随空格。但是,GBase 8s ESQL/C 则不会添加尾
随空格。

如果该值大于数据库列的最大大小,则数据库服务器截断该值(如果数据库为非

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 99 -
ANSI)。发生截断时不会产生警告。如果数据库是 ANSI 并且值大于列的长度,则插入失
败并返回此错误:
-1279: Value exceeds string column length.

尽管 char 、
varchar 、
lvarchar 和 string 主机变量包含空终止符,
GBase 8s ESQL/C
不会将这些字符插入到数据库列。(fixchar 类型的主机变量绝对不能包含空终止符。)如
果应用程序将 char 、varchar 、lvarchar 和 string 值插入到 VARCHAR 列,则数据库
服务器将内部跟踪该值的末尾。

下表显示了当应用程序将其从 char 、varchar 、lvarchar 和 string 字符数据类型
的主机变量插入时, VARCHAR 数据的转换。

表 5. 将 ESQL/C 字符数据类型转换为 VARCHAR 数据类型
源类型
目标类型
结果
char
VARCH
AR
如果源类型大于 VARCHAR 的最大值,则截断该值并设置指
示变量。如果 VARCHAR 的最大值大于原类型,则目标类型的长
度等于源类型的长度(不包含源类型的空终止符)。
fixcha
r
VARCH
AR
如果源类型大于 VARCHAR 的最大值,则截断该值并设置指
示变量。如果 VARCHAR 的最大值大于原类型,则目标类型的长
度等于源类型的长度。
string
VARCH
AR
如果源类型大于 VARCHAR 的最大值,则截断该值并设置指
示变量。如果 VARCHAR 的最大值大于原类型,则目标类型的长
度等于源类型的长度(不包含源类型的空终止符)。
lvarch
ar
VARCH
AR
如果源类型大于 VARCHAR 的最大值,则截断该值并设置指
示变量。如果 VARCHAR 的最大值大于原类型,则目标类型的长
度等于源类型的长度。

如果使用区域设置敏感的数据类型( NVARCHAR),则可以将字符主机变量中的值
插入 NVARCHAR 列。
插入 NVARCHAR 列的方式与插入到 VARCHAR 列的行为相同。


下表显示了在插入期间 GBase 8s ESQL/C 可能执行的从 VARCHAR 列数据到字符
主机变量的转换示例。在该表中,加号(+)表示空格字符。

表 6. 插入期间 VARCHAR 转换的示例
源类型
内容
长度
目标类型
内容
长度
char(10)
Fairfield\0
10
VARCHAR(
Fair
4

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 100 -
源类型
内容
长度
目标类型
内容
长度
4)
char(10)
Fairfield\0
10
VARCHAR(
11)
Fairfield
9
char(12)
Fairfield++\0
12
VARCHAR(
9)
Fairfield
9
char(13)
Fairfield+++\0
13
VARCHAR(
6)
Fairfi
6
char(11)
Fairfield+\0
11
VARCHAR(
11)
Fairfield
+
10
fixchar(9)
Fairfield
9
VARCHAR(
3)
Fai
3
fixchar(9)
Fairfield
9
VARCHAR(
11)
Fairfield
9
fixchar(11)
Fairfield++
11
VARCHAR(
9)
Fairfield
9
fixchar(13)
Fairfield++++
13
VARCHAR(
7)
Fairfie
7
fixchar(10)
Fairfield+
10
VARCHAR(
12)
Fairfield
+
10
string(9)
Fairfield\0
9
VARCHAR(
4)
Fair
4
string(9)
Fairfield\0
9
VARCHAR(
11)
Fairfield
9

获取和插入 lvarchar 数据
当应用程序使用 lvarchar 主机变量获取或插入数据值时,
GBase 8s ESQL/C 必须确保
该值适合主机变量或数据库列。
获取 lvarchar 数据
应用程序可以从 LVARCHAR 类型的数据库列获取数据到字符(char 、string 、
fixchar 、varchar 或 lvarchar)主机变量中。如果列数据不符合字符主机变量,则 GBase
8s ESQL/C 会截断此数据。要通知用户截断,GBase 8s ESQL/C 执行下列操作:
将 sqlca.sqlwarn.sqlwarn1 警告标记设置为 W 并将 SQLSTATE 变量设置为 01004。

它将与字符主机变量关联的任何指示变量设置为列中的字符数据的大小。
插入 lvarchar 数据
应用程序可以将字符主机变量(char 、string 、fixchar 、varchar 或 lvarchar)中

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 101 -
的数据插入到 LVARCHAR 类型的数据库列。

如果该值大于数据库列的大小,
则数据库服务器截断该值
(如果数据库为非 ANSI)

发生截断时不会产生警告。如果数据库是 ANSI 并且值大于列的长度,则插入失败并返回
此错误:
-1279: Value exceeds string column length.

如果您使用的插入的主机变量是 char 或 varchar免责数据库服务器强制转型为
lvarchar 类型。

当向 LVARCHAR 列写入数据时,数据库服务器在列上施加了 32 KB 的限制。如果
主机变量 lvarchar 数据类型。并且数据超过 32 KB,则数据库服务器返回错误。如果列
具有输入支持功能,
则它必须使用超过 32 KB 的任何数据,
以防止数据库服务器返回错误。

在符合 ANSI 的数据库中获取或插入
对于符合 ANSI 的数据库,
当在 INSERT 语句或 SQL 语句
(SELECT 、
UPDATE 或
DELETE)的 WHERE 子句中使用字符主机变量时,主变量中的字符必须为空终止符。因
此,对于字符主机变量,使用以下数据类型:
char 、string 或 varchar
lvarchar

例如,下面的插入时有效的,因为第一个和最后一个主机变量时 char 类型,是空终
止符:
EXEC SQL BEGIN DECLARE SECTION;
char first[16], last[16];
EXEC SQL END DECLARE SECTION;


stcopy("Dexter", first);
stcopy("Haven", last);
EXEC SQL insert into customer (fname, lname)
values (:first, :last);


stcopy() 函数将空终止符复制到主机变量中,char 数据类型保留空终止符。

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 102 -


不要对主机变量使用 fixchar 数据类型,因为它不能在字符串中包含空终止符。对于
符合 ANSI 的数据库。数据库服务器会在以下任一情况下生成错误:
如果尝试插入不是空终止符的字符串
如在 WHERE 子句中使用不是空终止符的字符串