返回首页

gbase数据、南大通用产品文档:GBase8c

更新日期:2024年09月11日

archive_mode
参数说明:表示是否进行归档操作。
该参数属于SIGHUP 类型参数,请参考表15-1 中对应设置方法进行设置。
须知:
当wal_level 设置成minimal 时,archive_mode 参数无法使用。
无论是同步备机还是异步备机都能够开启归档,归档开启的方式与单机开启归档一致,
将archive_mode 置为on,并设置正确的archive_dest 或者archive_command 即可。
注:
若未开启最大可用模式以及有同步备机与主机断开连接时,
主机会因为业务阻塞的
原因无法给备机发送归档的位置,从而导致归档失败。
取值范围:布尔型

on 表示进行归档。

off 表示不进行归档。
默认值:off

对于特定于 GBase 8s 的给定错误编号,
rgetmsg() 函数检索错误消息文本。
rgetmsg()
函数可处理 short 错误编号,因此,可仅处理 -32768 - +32767 范围内的错误编号。为此,
请在所有新的 GBase 8s ESQL/C 代码中使用 rgetlmsg() 函数。

语法
mint rgetmsg(msgnum, msgstr, lenmsgstr)
mint msgnum;
char *msgstr;
mint lenmsgstr;
msgnum
错误编号。该二字节参数限制错误编号为 -32768 - +32767。
msgstr
指向接收消息字符串的缓冲区(输出缓冲区)的指针。
lenmsgstr
msgstr 输出缓冲区的大小。使得此值为您期望检索的最大消息的大小。

用法
通常,SQLCODE(sqlca.sqlcode)包含错误编号。您还可检索 ISAM 错误的消息文
本(在 sqlca.sqlerrd[1] 中)。对于错误消息文本,rgetmsg() 函数使用 GBase 8s 错误
消息文件
(在 $GBASEDBTDIR/msg 目录中)

如果该消息比您提供的缓冲区的大小更长,
则该函数截断消息来适应它。

重要: 为了与较早的版本相兼容,GBase 8s ESQL/C 支持 rgetmsg() 函数。有些
GBase 8s 错误编号当前超出 short 整数、msgnum 支持的范围。推荐支持 long 整数作
为错误编号的 rgetlmsg() 函数,而不是 rgetmsg()。

如果您的程序直接地传递 SQLCODE 变量中的值
(或 sqlca.sqlcode)
作为 msgnum,
则请强制转型 SQLCODE 值作为 short 数据类型。rgetmsg() 的 msgnum 参数有 short
数据类型,而 SQLCODE 值有 long 数据类型。


GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 882 -
返回代码
0
转换成功。
-1227
未找到消息文件。
-1228
在消息文件中未找到消息编号。
-1231
在消息文件内不可搜寻。
-1232
消息缓冲区太小。

示例

此程序在 demo 目录中的 rgetmsg.ec 文件中。
/*
* rgetmsg.ec *
*
* The following program demonstrates the usage of the rgetmsg() function.
* It displays an error message after trying to create a table that already exists.
*/
EXEC SQL include sqlca; /* this include is optional */

main()
{
char errmsg[400];

printf("\nRGETMSG Sample ESQL Program running.\n\n");
EXEC SQL connect to 'stores7';

EXEC SQL create table customer (name char(20));
if(SQLCODE != 0)

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 883 -
{
rgetmsg((short)SQLCODE, errmsg, sizeof(errmsg));
printf("\nError %d: ", SQLCODE);
printf(errmsg, sqlca.sqlerrm);
}
printf("\nRGETMSG Sample Program over.\n\n");
}
输出
RGETMSG Sample ESQL Program running.
Error -310: Table (gbasedbt.customer) already exists in database.
RGETMSG Sample Program over.

使用GBase C API 负载均衡
使用GBase CAPI 负载均衡创建到8a 集群的连接时,客户端最少应该把8a
集群一个安全组的节点ip 地址传给GBase CAPI。如
host="192.168.1.1;192.168.1.2"。如果8a 集群一个安全组只有一个节点,那
么客户端应该这样传给GBase CAPI 集群的节点:host="192.168.1.1;"。字符
串中ip 地址后的分号是必须的。
使用GBase CAPI 负载均衡创建到8a 集群的连接时,如果没有设置
"GBASE_OPT_USE_SERVER_BALANCE"选项的值(该值默认为0)
,那么GBase
CAPI
将在客户端传入的ip 地址间进行负载均衡。如果设置
"GBASE_OPT_USE_SERVER_BALANCE"选项的值为1,
那么GBase
CAPI 将在8a 集群
所有节点之间进行负载均衡。如下是使用GBase CAPI 负载均衡的代码样例。
#include
#include
#include
#include "gbase.h"

int test_banalce()
{
GBASE* gbase = NULL;
char* host = "192.168.1.1;";
char* user = "gbase";
char* pwd = "gbase20110531";
char* db = "test";
int port = 5258;
int rc = 0;

GBase 8a 程序员手册C API 篇


- 88 -

南大通用数据技术股份有限公司
int use_server_balance = 1;

gbase = gbase_init(NULL);
gbase_options(gbase, GBASE_OPT_USE_SERVER_BALANCE,
(void*)&use_server_balance);
if(!gbase_real_connect(gbase, host, user, pwd, db, port, NULL,
0))
{
fprintf(stderr, "%d\n%s\n",gbase_errno(gbase),
gbase_error(gbase));
rc = 1;
}
else
{
printf("%s\n", gbase_get_host_info(gbase));
}

gbase_close(gbase);
return rc;
}

int main()
{
int i = 0;
for(;i < 20; i++)
{
test_banalce();
usleep(2*1000);
}
return 0;
}