返回首页

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

更新日期:2024年09月11日

使用 DRTIMEOUT 配置参数来指定以秒计的时间长度,
是在高可用性数据库服务器对中数据
库服务器等待其他数据库服务器发来迁移确认的时长。此参数仅适用于高可用性数据复制
对。
onconfig.std 值
DRTIMEOUT 30

正整数
单位

生效
编辑 onconfig 文件并重启数据库服务器之后。
当您通过运行 onmode -wf 命令在 onconfig 文件中动态地重置该值时。
当您通过运行 onmode -wm 命令重置内存中的该值时。
用法
使用下列公式来计算为 DRTIMEOUT 配置参数指定的值:
DRTIMEOUT = wait_time / 4

GBase 8s 管理员参考
南大通用数据技术股份有限公司 - 68 -
在此公式中,wait_time 时以秒计的时间长度,是在服务器认定高可用性数据复制发生故障
之前,高可用性数据复制对中数据库服务器等待的时长。
例如,您确定系统的 wait_time 是 160 秒。使用先前的公式设置 DRTIMEOUT 如下:
DRTIMEOUT = 160 秒 / 4 = 40 秒

GBase 8s ESQL/C 应用程序建立与任何有效的数据库环境的连接。数据库环境可以是
数据库、数据库服务器或数据库和数据库服务器。

每个数据库必须具有数据库服务器来管理它的信息。要建立连接,客户端应用程序必
须能够定位有关可用的数据库服务器的信息。
该信息在 sqlhosts 文件或注册表中。
运行时,
应用程序必须能够访问与连接相关的环境变量的的信息。可以访问下列环境变量:
GBASEDBTCONTIME
定义客户端尝试连接的最少指定时间
GBASEDBTCONRETRY
定义由 GBASEDBTCONTIME 指定的时间内客户端尝试的连接数
GBASEDBTSQLHOSTS
定义在哪里找到 sqlhosts 信息。sqlhosts 信息包含客户端能连接的有效数据库服
务器的列表、
要使用的连接类型以及每个数据库服务器所在的服务器机器名称。
在 UNIX(TM)
操作系统中,它是到文件的路径。在 Windows(TM) 环境中,它是网络中包含客户端应用程
序可访问的中央注册表的计算机的名称。
GBASEDBTSERVER
指定客户端连接到缺省数据库服务器的名称。此值标识用于建立数据库连接的
sqlhosts 文件或在注册表中的哪个条目。

重要: 当应用程序未明确指定连接的数据库服务器时,客户端应用程序将连接到缺
省的数据库服务器。即使应用程序未建立缺省的数据库服务器的连接,也必须设置
GBASEDBTSERVER 环境变量。


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

客户端还发送环境变量,以便数据库服务器确定服务器处理区域设置。

当数据库服务器处理应用程序请求时,它使用适当的环境信息。它忽略任何不相关的
信息。例如,如果应用程序具有亚洲语言支持(ALS)的数据库的环境变量,但是它连接
到非 ALS 数据库,则数据库服务器忽略 ALS 信息。
UNIX(TM) 操作系统的连接信息的源
sqlhosts 文件,包含网络环境中所有有效数据库服务器的定义。
GBASEDBTSERVER 环境变量,为应用程序指定缺省数据库服务器。
访问 sqlhosts 文件
要建立到数据库服务器的连接,
应用程序进程必须能够在 sqlhosts 文件中找到数据库
服务器的条目。sqlhosts 文件定义对客户端-服务器环境有效的数据库服务器连接。对于每
个数据库服务器,此文件定义以下信息:
数据库服务器的名称。
在客户端应用程序和数据库服务器之间连接的连接类型。
数据库服务器所在的主机计算机的名称。
用于建立连接的系统文件或程序名。

应用程序期望在 $GBASEDBTDIR/etc 目录找到 sqlhosts 文件。但是,您可以使用
GBASEDBTSQLHOSTS 环境变量更改此位置或文件名。如果数据库服务器不在运行客户
端程序的计算机上,
则 sqlhosts 文件必须位于 GBase 8s ESQL/C 客户端程序和数据库服务
器的主机上。

客户端应用程序可以连接到 sqlhosts 文件定义的任何数据库服务器。
如果您的应用程
序需要连接 sqlhosts 未定义的数据库服务器,则可能需要数据库管理器(DBA)的帮助才
能在此文件中创建必要的条目。除了 sqlhosts 文件之外,您还可能需要配置系统网络文件
以支持连接。
您的 GBase 8s 管理员指南 介绍如何在 sqlhosts 文件中创建数据库服务器项
目。

如果您启用单点登录(SSO),则还需要配置 ESQL/C 和 ODBC 驱动程序的 SSO。

指定缺省数据库服务器
为了您的 GBase 8s ESQL/C 应用程序连接任何数据库服务器,必须设置
GBASEDBTSERVER 环境变量来指定缺省数据库服务器的名称。
因此,
缺省数据库服务器
的名称必须在 sqlhosts 文件中存在,并且 sqlhosts 必须在运行应用程序的计算机上存在。

Windows(TM) 环境中连接信息的源

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

要建立与数据库服务器的连接,
Windows(TM) 环境中的 GBase 8s ESQL/C 应用程序执
行下列操作:
提供有关与注册表、ifx_putenv() 函数或 InetLogin 结构的信息
使用中央注册表连接信息
为应用程序用户执行连接身份的信息

在 Windows(TM) 环境中,GBase 8s ESQL/C 获取来自 InetLogin 结构或注册表的内
存中复制获取的配置信息。

如果应用程序已经初始化 InetLogin 中的一个字段,则 GBase 8s ESQL/C 将此值发
送到数据库服务器。
对应用程序未在 InetLogin 结构中设置任何字段,
GBase 8s ESQL/C 使
用注册表的 GBase 8s 子键的对应的信息。

重要:
因为应用程序需要配置信息建立连接,
所以必须在执行建立连接的 SQL 语句
之前设置任何 InetLogin 配置值。

注册表包含以下配置信息:
GBase 8s 环境变量的值
连接信息

当客户端 GBase 8s ESQL/C 应用程序建立到数据库服务器的连接时,它将配置信息
发送到数据服务器。
为 Windows(TM) 环境中的连接设置环境变量
注册表提供大多数环境变量的缺省值。
Windows(TM) 环境中的 sqlhosts 信息
注册表包含下列连接信息:

sqlhosts 信息定义与建立的数据库服务器的连接。
此选项包括主机计算机的名称、
要使用的协议类型以及连接的名称。
注册表将 sqlhosts
信息存储在 GBase 8s 密钥的 SqlHosts 子项中。要在注册表中存储 sqlhosts 信息,请
使用 Setnet32 实用程序的 服务器信息 选项卡。

.netrc 信息定义远程连接的有效用户。

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

在 UNIX(TM) 操作系统中,此文件在用户的主目录中,并指定了用户账户的名称和密
码。
在 Windows(TM) 环境中,
注册表中的 GBase 8s 密钥的 NETRC 子项存储相同的账
户信息。要在注册表中存储 .netrc 信息,请使用 Setnet32 实用程的 Host Information 选
项卡。

客户端发送网络参数以建立与数据库服务器的连接。建立连接的第一步是登录到正确
的主机。协议软件使用当前数据库服务器的网络参数。客户端以下列方式之一查找当前数
据库服务器的网络参数:
如果请求连接的 SQL 语句
(如 CONNECT 或 DATABASE)
指定数据库服务器的名
称。客户端将发送此指定数据库服务器的网络参数。
如果 InetLogin 的 InfxServer 字段包含指定的数据库服务器的名称。则客户端检查
网络参数的 InetLogin 。否则,客户端从注册表的内存章复制获取该数据库服务器的网络
参数。

如果 SQL 语句未指定数据库服务器,则客户端发送缺省数据库服务器的网络参数。
如果 InetLogin 的 InfxServer 字段包含数据库服务器的名称。则客户端检查
InetLogin 的网络参数。否则,客户端将从注册表的内存中的 GBASEDBTSERVER 值中
确定缺省数据库服务器。然后从该数据库服务器的注册表发送网络参数值。



GBase 8s ESQL/C 检查应用程序当前设置的任何这些网络参数的 InetLogin 的
网络参数字段。
对于未设置的任何指定
( 包括缺省数据库服务器的名称)

GBase
8s ESQL/C 从注册表的内存中复制获取值。

例如,以下代码段使用 mainsrvr 数据库服务器的信息来初始化 InetLogin 结构;
mainsrvr 是缺省的数据库服务器:
void *cnctHndl;


strcpy(InetLogin.InfxServer, "mainsrvr");
strcpy(InetLogin.User, "finance");
strcpy(InetLogin.Password, "in2money");
EXEC SQL connect to 'accounts';


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


QL connect to 'custhist@bcksrvr';

当执行到达上述代码片段中的第一个 CONNECT 语句时,客户端应用程序请求与
mainsrvr 数据库服务器上的 accounts 数据库的连接。 CONNECT 语句不会知道数据库
服务器,因此客户端会为缺省数据库服务器发送以下网络参数:
缺省数据库服务器是 mainsrvr,因为 InfxServer 在 InetLogin 中设置。
User 和 Password 值为 finance 和 in2money,因为应用程序在 InetLogin 中设置了
它们。
Host 、Service 、Protocol 和 AskPassAtConnect 值来自注册表值的 mainsrvr 子项蚂
蚁王应用程序没有在 InetLogin 中设置它们。

上述代码片段中的第二条 CONNECT 语句请求与数据库服务器 bcksrvr 上的求
custhist 数据库的连接。
对于此连接,
客户端发送指定数据库服务器 bcksrvr 的网络参数。
因为 InetLogin 结构目前包含 mainsrvr 的网络参数,客户端必须从注册表的内存中副本
获取所有这些参数。因此,应用程序不会使用 finance 用户账户进行第二次连接(除非注
册表对 bcksrvr 数据库指定 finance 和 in2money 的 User 和 Password 值)。

如果您启用单点登录(SSO),则进程不同。有关配置的详细信息和其它步骤,请参
阅为 SSO 配置 ESQL/C 和 ODBC 驱动程序。
中央注册表
可以在以下任一位置指定 sqlhosts 信息:
本地注册表是在与 GBase 8s ESQL/C 应用程序相同的 Windows(TM) 计算机上的注
册表。
中央注册表是两个或多个 GBase 8s ESQL/C 应用程序可以访问以获取 sqlhosts 信息
的注册表。

中央注册表可以在域服务器上或 Microsoft 网络上的任何 Windows(TM) 工作站中。

可能是一个应用程序的本地,并且远程到其它所有应用程序。中央注册表使您能够维护
sqlhosts 信息的单个副本,
供 Windows(TM) 环境中的所有 GBase 8s ESQL/C 应用程序使用。


要使用中央注册表,必须在您的计算机上设置 GBASEDBTSQLHOSTS 环境变
量。此环境变量指定中央注册表所在的计算机的名称。要设置此环境变量,可
以使用 Setnet32 和 ifx_putenv() 函数(在 Windows 环境中设置和检索环境
变量)或 InetLogin 结构(InetLogin 结构)。

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


在 Windows(TM) 环境中,
GBase 8s ESQL/C 应用程序在请求连接时使用以下优先级来
查找 sqlhosts 信息:
中央注册表中的 sqlhosts 信息,在 GBASEDBTSQLHOSTS 环境变量指示的计算机
上(如果设置了 GBASEDBTSQLHOSTS )
本地注册表中的 sqlhosts 信息
Windows(TM) 环境中的连接身份验证功能
GBase 8s ESQL/C 应用程序获取有关连接的信息(从注册表或 InetLogin 结)之后,
ESQL 客户端-接口 DLL 执行以下步骤:
1. 它将来自 InetLogin 结构(或从未定义的 InetLogin 字段的注册
表)的连接信息复制到 HostInfoStruct 结构中(参见 表 1)。
它将指向 HostInfoStruct 的指针传递给 esqlauth.dll 中的 sqlauth() 函数以验证连接
身份。

如果 sqlauth() 返回 TRUE,则该连接有效并且用户可以访问服务器计算机。但是,
如果 sqlauth() 返回 FALSE,则连接被拒绝,并且拒绝访问。缺省情况下,sqlauth() 函数
返回 TRUE 值。

传递给 sqlauth() 的参数是一个指向 HostInfoStruct 结构的指针,它是 login.h 头文
件定义的。此结构包含下表所示的 InetLogin 字段的子集。

表 1. HostInfoStruct 结构的字段
HostInfoStruct 字段
数据类型
意义
InfxServer
char[19]
指定 GBASEDBTSERVER 网络参数的值
Host
char[19]
指定 HOST 网络参数的值
User
char[19]
指定传递到 sqlauth() 函数的 USER 网络参数
的值
Pass
char[19]
指定传递到 sqlauth() 函数的 PASSWORD 网
络参数的值
AskPassAtConnec
t
char[2]
指示 sqlauth() 是否请求在连接时传入 sqlauth()
函数
Service
char[19]
指定传递到 sqlauth() 函数的 SERVICE 网络参
数的值
Protocol
char[19]
指定传递到 sqlauth() 函数的 PROTOCOL 网络
参数的值

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

HostInfoStruct 字段
数据类型
意义
Options
char[20]
保留备用

在 sqlauth() 中,可以使用 pHostInfo 指针访问 HostInfoStruct 的字段:
if (pHostInfo->AskPassAtConnect)

可以编辑所有的 HostInfoStruct 字段值。但是,ESQL/C 仅检查 HostInfoStruct 的
User 和 Pass字段。

以下代码片段显示了 esqlauth.c 文件包含的缺省的 sqlauth() 函。
BOOL __declspec( dllexport ) sqlauth ( HostInfoStruct *pHostInfo )
{
return TRUE;
}

sqlauth() 的这种缺省操作意味着 GBase 8s ESQL/C 在建立连接时不进行身份验证。
要提供验证,您可以自定义 sqlauth() 函数。您可能需要自定义 sqlauth() 来执行以下验证
任务之一:
验证用户名称
该函数可以经当前用户名与有效或无效的用户名列表进行比较。

提示输入密码
当该字段设置为 Y 或 y 时,函数可以检查 HostInfoStruct 结构中的
AskPassAtConnect 字段的值。
您可以编写 sqlauth() 来显示一个提示用户输入密码的窗口。


以下步骤描述如何创建自定义的 sqlauth() 函数:
在您的系统编辑器中打开 esqlauth.c 源文件。该文件位
于 %GBASEDBTDIR%\demo\esqlauth 目录。
1. 将 sqlauth() 函数的主体添加到执行所需连接验证的代码中。在
表 1中的字段中,sqlauth() 函数只能修改 User 和 Pass 字段。
确保 sqlauth() 返回 TRUE 或 FALSE 以指示是否继续连接请求。
不要修改此文件中的其他代码。

通过编译 esqlauth.c 文件并指定 esql 命令处理器的 -target:dll(或 -wd)命令行选项

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

来创建 esqlauth.dll 的版本。有关如何定义 sqlauth() 函数的示例,请参
阅 %GBASEDBTDIR%\demo\esqlauth 目录中的 esqlauth.c 文件。
连接数据库服务器
当 GBase 8s ESQL/C 应用程序开始执行时,
它与任何数据库服务器没有连接。
但是,
对于要执行的 SQL 语句,此连接必须存在。要建立与数据库服务器的连接,GBase 8s
ESQL/C 程序必须采取以下操作:
使用 SQL 语句建立与数据库服务器的连接
在 SQL 语句中指定要连接的数据库服务器的名称
建立连接
以下两组 SQL 语句可以建立与数据库环境的连接:
SQL 连接语句为 CONNECT 、SET CONNECTION 和 DISCONNECT。这些语句符
合用于创建连接的 ANSI SQL 和 X/Open 标准。
SQL 数据库语句包括 DATABASE 、
CREATE DATABASE 、
CLOSE DATABASE 和
START DATABASE。这些语句是建立特定于 GBase 8s 的连接的一种方式。

重要: 建议您对新的应用程序使用 CONNECT 、DISCONNECT 和 SET
CONNECTION 连接语句。

应用程序建立的连接的类型取决于在应用程序中首先执行的语句的类型:
如果第一个 SQL 语句是连接语句(CONNECT 、SET CONNECT)语句,则应用程
序建立显式连接。
如果第一个语句是 SQL 数据库语句
(DATABASE 、
CREATE DATABASE 、
START
DATABASE),则应用程序建立隐式连接。
显式连接
当使用 CONNECT 语句连接到数据库环境时,您建立一个显式连接。

应用程序直接连接到您指定的数据库服务器。如果未在 CONNECT 语句中指定数据
库服务器的名称,
则应用程序建立与缺省数据库服务器
(GBASEDBTSERVER 环境变量 标
识)的显式连接。

显式连接使应用程序能够支持到一个或多个数据库环境的多个连接。虽然应用程序在
执行期间可以连接到多个数据库环境,但一次只能有一个连接。休眠连接是应用程序已建
立但当前未使用的连接。
应用程序必须具有当前连接才能执行 SQL 语句。
以下 SQL 连接
语句建立和管理显示连接。

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


以下 SQL 连接语句建立并管理显式连接:
CONNECT 语句建立数据库环境和应用程序之间的显示连接。
SET CONNECTION 语句在显式连接之间切换。它使当前连接处于休眠状态。
DISCONNECT 语句终止到数据库环境的连接。


这些连接语句提供以下好处,允许您创建更多便捷的应用程序:

符合 ANSI 和 X/Open 数据库连接标准
用于在分布式客户端-服务器的本地和远程数据访问的统一语法
支持单个应用程序中的多个连接

因为 CONNECT 、
DISCONNECT 和 SET CONNECTION 语句包括 ANSI 标准语法
的 GBase 8s 扩展,这些语句在以下时间会生成 ANSI 扩展警告消息:
运行时,如果设置了 DBANSIWARN 环境变量
编译时,如果已经使用 -ansi 预处理选项编译了 GBase 8s ESQL/C 源文件

GBase 8s ESQL/C 应用程序而不是数据库服务器处理这些连接语句。因此,应用程序
不能在 PREPARE 或 EXECUTE IMMEDIATE 语句中使用它们。

重要: DATABASE 、CREATE DATABASE 、START DATABASE 、CLOSE
DATABASE 和 DROP DATABASE 语句在显式连接时仍然有效。但是,在这种情况下,
仅引用这些语句中当前连接本地的数据库;不要使用 @server 或 //server 语法。
隐式连接
当以下任一 SQL 语句是应用程序执行第一条 SQL 语句时,该语句建立隐式连接:
DATABASE 语句创建于数据库环境的隐式连接并打开指定的数据库。
CREATE DATABASE 用户创建隐式连接并创建一个数据库。
DROP DATABASE 语句创建隐式连接并删除(移除)指定的数据库。
上述语句的一个 PREPARE 语句也会建立隐式连接。

当您执行上述之一的语句时,应用程序首先连接缺省数据库服务器

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

(GBASEDBTSERVER 环境变量指示)。缺省数据库服务器解析数据库语句。如果语句指
定了数据库服务器的名称,则应用程序连接到指定数据库服务器。要建立与指定数据库服
务器的隐式连接,则应用程序必须连接两个数据库服务器。显式连接仅要求连接一个数据
库服务器,因此它调用更少的资源。

如果隐式连接存在,则这些数据库语句在它们建立新的连接之前关闭它。新的隐式连
接在 SQL 语句执行后仍保持打开状态。此行为与显式连接不同,显式连接允许与相同或
不同的数据库环境建立多个连接。

CLOSE DATABASE 语句关闭数据库,并关闭与数据库的隐式连接。如果在这些语句
之前使用 CONNECT 语句,每个语句也可以在当前显式连接的上下文中运行。

隐式连接为较早的应用程序提供了一个平滑的迁移路径,用于支持 CONNECT 、
DISCONNECT 和 SET CONNECTION 语句的面向对象的连接。
连接类型的总结
下表总结了 GBase 8s ESQL/C 支持连接数据库服务器的方法。

表 2. 启动数据库服务器的语句和函数
SQL 语句或 ESQL/C 函数
隐式
显式
建立连接
打开数据库
如果程序中的第一条 SQL
语句是:




DATABASE




CREATE DATABASE




START DATABASE




DROP DATABASE




sqlstart()




CONNECT TO DEFAULT




CONNECT TO '@servername'




CONNECT TO 'dbname'




CONNECT TO
'dbname@servername'




在 Windows(TM) 环境中建立显式连接
使用隐式连接,每个 GBase 8s ESQL/C 模块都可以存在与数据库服务器的一个连接,
并且无法共享此连接。显式连接允许客户端应用程序内的多个连接。您可能需要设计需要

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

执行多个连接的应用程序,原因如下:
当您想要多个 GBase 8s ESQL/C 模块
(.exe 或 .dll)
使用相同的连接来操作数据库数
据时
图 1显示了多个应用程序使用与数据库服务器相同连接的方案。

当您想要一个 GBase 8s ESQL/C 命令创建两个或多个连接到一个或多个数据库时,
其中包括在两个 C 应用程序之间共享一个 ESQL DLL
图 2显示了建立与多个数据库服务器的连接的单个应用程序。

图 1显示了以下两种场景,其中多个应用程序共享与数据库服务器的单一连接:

左侧的创建要求 APP1.EXE 建立与 dbserverA 数据库服务器的显式连接。此连接建
立后,APP1 可以传递在 APP2 DLL 中设置连接所属的连接信息。
右侧的场景要求 APP3.EXE 建立与 dbserverB 数据库服务器的显式连接。当 APP3
通过适当的连接信息时,APP4 和 APP5 DLL 可以共享此连接。

图 3. 多个应用程序使用与数据库服务器的单一连接的两种场景

如果您想要一个应用程序在同一时间与两个不同的数据库服务器建立连接,则还可以
使用显式连接,如下所示:

图 4. 一个应用程序在同一时间连接多个数据库服务器



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


密码加密
当客户端应用程序向数据库服务器发生密码进行身份验证时,密码不加密。除非您通
过简单的密码通信支持模块(SPWDCSM)请求密码加密。您可以通过在 sqlhosts 信息中
的数据库服务器激活密码加密,请在条目 的选项字段中指定以下值:

您可以通过在 sqlhosts 信息中的数据库服务器激活密码加密,请在 sqlhosts 条目的
Options 字段中指定以下值:
csm=(SPWDCSM)

客户端或数据库服务器使用字符串 "SPWDCSM" 作为密钥来查找在 CSS/CSM 配置
文件中描述 CSM 的条目。

当激活时,SPWDCSM 要求密码,才能有效地覆盖任何受信任的主机机制。如果信任
的主机策略到位,则指定密码加密机制是矛盾的。
可插拔认证模块(PAM)
要使用可插拔认证模块(PAM)服务进行客户端-服务器认证,您必须重启客户端应
用程序,以便它注册一个回调函数。回调函数必须支持您打算使用 PAM 服务的任何挑战-
响应机制。

演示程序 pamdemo.ec 作为回调函数示例。
LDAP 认证
可以使用 GBase 8s ESQL/C在 Windows(TM) 上使用轻量级命令访问协议(LDAP)
身份验证。

当您要使用 LDAP 服务器验证系统用户时,请使用 LDAP 认证支持模块。该模块包
含您可以根据具体情况参数修改的源代码。
多路复用连接

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

多路复用连接使 GBase 8s ESQL/C 应用程序可以通过使用最少量的通信资源来建立
与同一数据库服务器上不同数据库的多个连接。当您自动多路复用连接时,数据库服务器
将使用与客户端的单个连接进行多个 SQL 连接
(CONNECT 语句)

没有复用,
每个 SQL
连接创建一个数据库-服务器连接。
客户端执行的必要条件
要实现多路复用连接,请在客户端 sqlhosts 文件或注册表中,在要连接的数据库服务
器的 dbservername 参数上设置多路复用选项。
要指定多路复用。
请将 m 选项设置为 1。
以下 dbservername 参数指定与 personnel 数据库服务器的多路连接。

服务器名
Nettype
主机名
服务名
选项
pers
onnel
onsoctcp
corp
prsnl
_ol
m=1

将多路复用选项设置为零(m = 0)(缺省值),禁用指定数据库服务器的多路复用。


在 Windows(TM) 平台上,除了在 sqlhosts 注册表设置多路复用的选项之外,您还必
须定义 ifx_session_mux 环境变量。如果未定义 ifx_session_mux 环境变量,则数据库服
务器会忽略多路复用选项并不复用连接。

限制: 在 Windows(TM) 中,多线程应用程序不能使用多路复用连接功能。如果多线
程应用程序启用了 sqlhosts 注册表中多路复用选项,并定义了 IFX_SESSION_MUX 环境
变量,则可能会导致灾难性的后果,包括崩溃和数据损坏。

如果多线程应用程序和单线程应用程序在同一 Windows(TM) 计算机上运行,
则单线程
应用程序可以使用以下两种方法使用多路复用连接:
使用不同的 sqlhosts 信息。
在 sqlhosts 文件中使用不指定多路复用选项的 dbserver 别名。例如,可以使用以下
配置:
服务器名
Nettype
主机名
服务名
选项
pers
onnel
onsoctcp
corp
prsnl
_01
m=1
pers
onnel_no
mux
onsoctcp
corp
prsnl
_02


连接到 personnel 服务器的任何多线程应用程序使用服务器名称 personnel_nomux ,

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

而单线程应用程序可以继续使用服务器名称 personnel。
多用复用连接的限制
GBase 8s ESQL/C 对多路复用连接实施以下限制:
不支持共享内存连接。
不支持多路复用应用程序。
数据库服务器忽略复用连接上的 sqlbreak() 函数,如果调用它,数据库服务器不会中
断连接,并且不会返回错误。
标识数据库服务器
要连接数据库环境(例如,使用 CONNECT 语句),GBase 8s ESQL/C 应用程序可
以以下两种方法标识数据库服务器:
应用程序可以在 SQL 语句中指定数据库服务器的名称。这类数据库服务器是特定的
数据库服务器。
应用程序可以在 SQL 语句中省略数据库服务器的名称。这类数据库服务器是缺省数
据库服务器。 GBASEDBTSERVER 环境变量执行缺省数据库服务器的名称。
特定的数据库服务器
GBase 8s ESQL/C 应用程序可以建立与指定数据库服务器的连接,只要它在 SQL 语
句中列出数据库服务器名称和可选的数据库名,如下所示:

CONNECT 语句建立一个与数据库服务器的显示连接。

下列 CONNECT 语句建立与名为 valley 数据库服务器的显示连接:
EXEC SQL connect to 'stores7@valley';
EXEC SQL connect to '@valley';

当应用程序的第一条语句为 SQL 数据库语句(如 DATABASE 或 START
DATABASE)时,它可以建立一个隐式连接。

以下每一条 SQL 语句与名为 valley 特定数据库服务器中的 stores7 数据库的建立
隐式连接:
EXEC SQL database '//valley/stores7';
EXEC SQL database stores7@valley;

对于 UNIX(TM) 操作系统,使用下列语句:

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

EXEC SQL database '/usr/dbapps/stores7@valley';

对于 Windows(TM) 环境,使用下列语句:
EXEC SQL database 'C:\usr\dbapps\stores@valley';
缺省数据库服务器
GBase 8s ESQL/C 应用程序可以建立与缺省数据库服务器的连接,当它在 SQL 语句
中省略来自数据库环境的数据库服务器名称。如下所示:

CONNECT 语句可以使用关键字 DEFAULT 或它忽略数据库服务器名称。

以下每条 CONNECT 语句都可以建立显式缺省连接:
EXEC SQL connect to 'stores7';
EXEC SQL connect to default;

在 UNIX(TM) 操作系统中,使用下列语句:
EXEC SQL connect to '/usr/dbapps/stores7';

在 Windows(TM) 环境中,使用下列语句:
EXEC SQL connect to 'C:\usr\dbapps\stores7';

当其中一个 SQL数据库语句(如 DATABASE 或 START DATABASE)是应用程序
的第一个 SQL 语句时,它可以建立一个隐式的默认连接。

以下每条 SQL 语句在缺省数据库服务器上与名为 stores7 的数据库建立隐式连接:
EXEC SQL database stores7;
EXEC SQL start database stores7 with no log;

GBASEDBTSERVER 环境变量确定数据库服务器的名称。

重要: 即使应用程序未建立缺省连接,仍然需要设置 GBASEDBTSERVER 环境变
量。


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

还可以使用 DBPATH 环境变量指定要作为缺省数据库服务器的数据库服务器名称
的列表。应用程序在搜索 GBASEDBTSERVER 指定的数据库服务器后搜索这些数据库服
务器。

函数说明
返回date 中对应的月份数值,范围为1 到12。
示例
示例1:date 值对应的月份值在1~12 之内。
gbase> SELECT MONTH('2020-08-30') FROM dual;
+---------------------+
| MONTH('2020-08-30') |
+---------------------+
|
8 |
+---------------------+
1 row in set
示例2:date 值对应的月份值大于12,返回NULL。
gbase> SELECT MONTH('2020-13-30') FROM dual;
+---------------------+
| MONTH('2020-13-30') |
+---------------------+
|
NULL |
+---------------------+
1 row in set, 1 warning