通过本文的学习,您将能够︰
-
列出连接到数据库服务器的方法
-
在 sqlhosts 文件中列出合适的服务器条目
-
为客户端应用程序连接到数据库服务器设置所需的环境变量
1. 本地连接到服务器
客户端应用程序连接到本地服务器有三种方法:
-
通过共享内存的消息系统。当客户端应用程序和数据库服务器在同一台主机上,这是通信的首选方法。客户端程序和服务器连接到同一共享内存段上。应用程序为服务器留下消息,并捕获服务器留下的消息。
-
通过流管道(stream-pipe)连接。这是一个使用 UNIX 流的本地进程间通信的方法。
-
通过 TCP/IP 使用sockets或 TLI 编程接口。可以使用TCP/IP进行本地和远程通信。当客户端应用程序和数据库服务器在同一台主机上,星瑞格数据库使用本地回送。
可以通过设置配置参数和环境变量来指定应用程序连接到数据库服务器的方法。
安全和性能考虑
使用共享内存作为本地连接具有性能优势。然而,用来存储消息的共享内存段是不安全的。因为共享内存消息段是所有用户可写的,任何熟悉 C 和 LINUX 的人都可以连接到共享内存段上,并在有意或无意中将它破坏。如果您的系统需要一种更安全的通信机制,就要使用流管道或 TCP/IP 连接。流管道连接的性能比 TCP/IP 连接更好。
2. 远程连接到服务器
应用程序连接到远程服务器必须使用 TCP/IP 进行连接。通过 TCP/IP 进行远程连接的同时,本地应用程序可以使用共享内存连接到服务器。本地应用程序也可以采取混合的方法连接到服务器。
2. 使用TCP/IP进行远程连接
-
要采用 TCP/IP 通信,动态服务器要支持这些接口:
— Sockets
— TLI (传输层接口) -
在 $INFORMIXDIR/release 目录下查看release notes,来查找您的动态服务器平台所支持的接口。
Sockets和 TLI(传输层接口)是用来控制网络中应用程序级通信的软件接口。两个版本都有类似的调用并完成相同的任务(例如,连接、发送数据及接收数据)。要找出您的硬件平台支持哪个接口,请参阅 $INFORMIXDIR/release 目录下的release notes。
3. 客户端如何连接
当应用程序尝试连接到一个数据库服务器时,需要一些基本的信息来建立连接。此信息保存在 $INFORMIXDIR/etc/sqlhosts 中,它是个必须由系统管理员维护的文件。运行应用程序的用户必须将 INFORMIXSERVER 环境变量设置为指向 sqlhosts 中条目的键名。对于服务器连接,键名要与在配置文件中找到的 DBSERVERNAME 或 DBSERVERALIASES 参数的值相同。该键名可以是 sqlhosts 文件内任意唯一名字。
一旦应用程序在 sqlhosts 文件中找到正确的条目,它就已经拥有连接到数据库服务器所需的信息。
如果客户端应用程序和数据库服务器位于不同的计算机上,则应在两台计算机上都有sqlhosts 文件。这是必要的,因为数据库服务器需要使用 sqlhosts 文件进行初始化处理。
windows环境下,sqlhosts 信息是保存在注册表中。服务文件是:
C:\WINNT\System32\drivers\etc\services
3.1 客户端如何连接:组件
INFORMIXSERVER 环境变量是个指向sqlhosts 文件的指针,用来确定要连接到哪个服务器。设置 INFORMIXSERVER 环境变量是总是 必需的。
在onconfig配置文件中DBSERVERNAME 和 DBSERVERALIASES的值必须存放在sqlhosts 文件的第一个字段。当连接到服务器时,只有这些服务器的名称会被有效接收。
DBSERVERNAME 只能包含一个条目。DBSERVERALIASES 可以包含多达 32 个服务器名称。INFORMIXSERVER 的值在 DBSERVERNAME 还是 DBSERVERALIASES 的配置参数中被指定无所谓,但必须在两者中的一个来指定。
3.2 指定sqlhosts的位置
使用 INFORMIXSQLHOSTS 环境变量来改变sqlhosts 文件的位置。
客户可以用 INFORMIXSQLHOSTS 环境变量来选择sqlhosts 文件的路径名。这个功能使得用户组对于可供连接的服务器有不同的视角。例如,MIS 工作人员可能有一个 sqlhosts 文件,其中包含生产和测试系统的条目。
4. sqlhost文件中的nettype列
在sqlhosts 文件中的第二列是nettype 。nettype 列包含有关数据库服务器的类型以及如何进行连接的关键信息。nettype 包含八个字母,分为三组:
-
前两个字母代表数据库服务器产品:
— dr dr 用于通过 DRDA 连接到 IBM Data Server 客户端。。
— on或者ol 用于SinoDB动态服务器。
— se 用于标准引擎,它是另一款星瑞格数据库数据库产品。 -
第二组三个字母指的是用于连接的编程接口:
— ipc 用于进程间通信,只能用于本地连接。
— tli 用于传输层接口,一种TCP/IP 通信的编程接口。
— soc 用于sockets,也是一种 TCP/IP 通信的编程接口。 -
最后三个字母指的是特定的协议或者 IPC 机制:
— imc 用于 Informix MaxConnect,它是 IBM 产品,用于管理单独服务器上的数据库连接。
— shm 用于共享内存连接。
— spx 用于 IPX/SPX 协议。
— ssl 用于安全套接字层连接。
— str 用于流管道连接。
— tcp 用于 TCP/IP 协议。
imc用于** 星瑞格数据库 MaxConnect 。
5. 共享内存的sqlhosts条目
对服务器的本地连接可以使用共享内存进行。Sqlhosts 文件中的条目看上去有点类似上面的例子。下面是每个字段的解释,以及应该如何设置才能通过共享内存进行通信。
参数 | 说明 |
---|---|
dbservername | 设置为在配置文件中能找到的 DBSERVERNAME 或者 DBSERVERALIASES 之一。它也与启动客户端应用程序之前的INFORMIXSERVER 环境变量相对应。 |
nettype | 为共享内存连接设置为 onipcshm 。 |
hostname | 设置为本地计算机的主机名。 |
servicename | 在 sqlhosts 文件中这个名称必须是唯一的。servicename 用作当数据交换时指向共享内存中的名称。通常情况下,servicename 和 dbservername 使用相同的名称。 |
6. 流管道的sqlhosts条目
本地连接也可以用命名流管道实现。除了 nettype 参数的值,Sqlhosts 条目类似于共享内存的条目。下面是每个字段的解释,以及应该如何设置才能通过流管道进行通信。
参数 | 说明 |
---|---|
dbservername | 设置为在配置文件中能找到的 DBSERVERNAME 或者 DBSERVERALIASES 之一。它也与启动客户端应用程序之前的INFORMIXSERVER 环境变量相对应。 |
nettype | 为流管道连接设置为 onipcstr 。 |
hostname | 设置为本地计算机的主机名。 |
servicename | 在 sqlhosts 文件中这个名称必须是唯一的。servicename 用作通信流动的 UNIX 管道的名称。通常情况下,servicename 和 dbservername 使用相同的名称。 |
数据库服务器可以在执行远程查询或分布式的事务时,连接到另一台数据库服务器。如果远程实例和主机实例在同一台计算机上,该连接可通过 TCP/IP 或流管道来实现。
7. 使用TCP/IP的客户端需要什么配置
当使用 TCP/IP 连接到数据库服务器时,客户端需要知道:
-
主机位于网络上的位置。动态服务器需要知道主机的互联网地址。互联网地址是机器的唯一地址,通常在**/etc/hosts** 的文件中注册。互联网地址(或以太网卡的 IP 地址)是一系列句点分隔的数字;例如:92.9.200.143。
-
主机上的端口号。客户端使用端口号来指定它与主机上的谁通信。侦听线程侦听主机上的端口号,等待来自客户端的连接请求。端口号在/etc/services 文件中是唯一的,系统端口也存储在那里。
-
使用什么编程接口连接到主机?是sockets还是TLI。要找出硬件平台所支持的接口,请参阅 $INFORMIXDIR/release 目录内的release notes。
客户端应用程序必须读取 sqlhosts 文件,并将此文件中的信息用作其他网络文件的密钥,以便确定互联网地址和端口号。
7.1 TCP/IP 的 sqlhosts 条目
本地和远程可以使用TCP/IP的sockets或 TLI协议 对服务器进行连接。Sqlhosts 文件中的条目类似上面的例子。下面是每个字段的解释,以及通过 TCP/IP 与服务器进行通信应该如何设置。
参数 | 说明 |
---|---|
dbservername | 设置为在配置文件中能找到的 DBSERVERNAME 或者 DBSERVERALIASES 之一。它也与启动客户端应用程序之前的INFORMIXSERVER 环境变量相对应。 |
nettype | 设置为 ontlitcp 用于 TLI 连接,或者设置为 onsoctcp 用于sockets连接。请参阅$INFORMIXDIR/release目录查询您的平台所支持的接口。 |
hostname | 设置为本地计算机的主机名。Hostname 用作 /etc/hosts 的键,用来确定主机的 IP 地址。 |
servicename | 用于与主机通信的服务的名称。Servicename 用作 /etc/sevices 的键,用来确定主机的端口号和网络协议。 |
可以用来自**/etc/hosts** 文件相应的 IP 地址替换主机名,也可以用**/etc/services** 文件中合适的端口号来替换服务名。这可以缩短客户端应用程序的连接时间,因为不需要查找相应的文件。
7.2 TCP/IP的多端口配置
通过在同一台机器上安装多个以太网卡,可以为同一服务器设置两个不同的 TCP/IP 端口。简单地为 sqlhosts 文件添加两个 TCP/IP 连接条目,其步骤如下所示:
- 在 /etc/services 文件中为每个以太网卡上的端口号创建一个条目。例如:
soc1 1801/tcp
soc2 1802/tcp
在一个单一以太网卡上使用的所有端口必须都是唯一的。不同的以太网卡可以使用相同或不同的端口号。您可能希望在不同的以太网卡上使用相同的端口号,因为您要连接到同一数据库服务器(在这种情况下,服务名称将相同)。
- 在 /etc/hosts 中为每个以太网卡设置一个独立地址的条目。例如:
192.147.104.21 munich1
192.147.104.22 munich2
-
在 sqlhosts 文件中,为每个以太网卡设置一个条目。例子如上图所示。
-
在配置文件中,DBSERVERNAME 使用sqlhosts 文件中输入的服务器名称, DBSERVERALIASES 使用sqlhosts 文件中其他服务器的名称。例子如上所示。
配置完成后,客户端可以通过INFORMIXSERVER 环境变量与以太网卡配置的任意一个服务器名称的进行通信。
7.3 多端口配置
无需为了多个网卡在sqlhosts 文件中对同一个数据库服务器建多个条目。可以在sqlhosts 文件中用星号(*)替换多个主机名。服务器在使用TCP 系统调用启动时,侦听所有可能的IP 地址。出于文档考虑,建议主机名跟在星号后面。
客户端应用程序使用的 sqlhosts 文件必须包含一个显式的主机名或 IP 地址。客户端应用程序将忽略 sqlhosts 文件中存在的任何通配符(星号)。
只有在使用 TCP/IP 协议,或者客户端应用程序通过多个以太网卡进行连接时使用通配符。跨以太网卡的Servicename (端口)也是一样的。
10. 网络安全
- 主机上的 /etc/hosts.equiv 文件列出了系统范围受信任的计算机名称。
- 主机上的 $HOME/.rhosts 文件可用于特定用户的受信计算机名称。
- 示例:
munich
chicago
detroit
SinoDB数据库服务器要求能够在不提供密码的情况下连接到远程计算机。数据库服务器主机上的 /etc/hosts.equiv 文件列出了无需密码即可访问的计算机。每行包含网络上一个受信计算机的名称(像在 /etc/hosts 文件中定义的那样)。
.rhosts 文件可用于为特定用户指定、而非全局的受信计算机。它驻留在服务器主机的用户的主目录中。
客户端的名称必须被列在服务器主机上这两个文件之一。要确定一个客户端是否受信,可在客户端计算机上执行以下语句︰
rlogin hostname
如果没有收到密码提示,说明该客户端是一个受信的计算机。
/etc/passwd
应该确保用户的登录信息也列在数据库服务器的计算机上的 /etc/passwd 文件中。
其他网络文件
您的平台可能有其他网络安全文件。例如,有些操作系统有一个叫 /etc/shadow 的文件,用做/etc/passwd 文件的备份文件。此外,用.netrc 进行 远程登录使用,包括主机ID、用户 ID 和密码。这些文件可能需要进行修改。
11. TCP/IP 设置的检查清单
-
在客户端和服务器的主机上的 /etc/hosts 中建立条目。
-
在客户端和服务器的主机上的 /etc/services 中建立 条目。
-
在客户端和服务器的主机上的$INFORMIXDIR/etc/sqlhosts中建立条目。
-
检查网络安全文件。
-
将 INFORMIXSERVER 设置为使用 TCP/IP nettype的服务器名。
12.sqlhosts 中的选项字段
options 字段是设置网络相关活动的可选参数集。
sqlhosts 文件中的第五个字段包含网络相关的选项。其中包括:
Keep-alive 选项(TCP)—— Keep-alive 是一项操作系统功能,允许在没有通信发生时指定保持连接存活的时间。当一个已连接的客户端和服务器没有交换数据时,操作系统的 Keep-alive 功能将启用定期检查连接的网络服务。如果连接的接收端在操作系统参数所指定的时间内没有响应,该连接视为断开并释放其资源。服务器 Keep-alive 选项允许您打开或关闭操作系统功能。缺省值为k=1 ,启用 Keep-alive 选项。若要禁用该选项,设置 k=0 。Keep-alive 可以只在服务器上启用、只在客户端上启用、或者两者都启用。
当 Keep-alive 功能被禁用时,网络服务立即检测断开的连接,并释放资源。如果网络速度较慢,网络服务可能将反应迟缓当作连接断开。大多数情况下,SinoDB数据库建议启用 Keep-alive 选项。
安全选项(协议无关)—可以用此选项来禁用或启用系统安全文件的查找功能。客户端忽略 s 设置,服务器忽略 r 设置。
参数 | 说明 |
---|---|
r=0 | 禁用 .netrc 查找 |
r=1 | 启用 .netrc 查找(缺省) |
s=0 | 禁用/etc/hosts.equiv 和.rhosts查找 |
s=1 | 只启用 /etc/hosts.equiv 查找 |
s=2 | 只启用 .rhosts 查找 |
s=3 | 启用 /etc/hosts.equiv 和 .rhosts 查找(缺省) |
通信缓冲区大小选项 (TCP/IP ) —此选项可以用于为用于TCP/IP 网络发送的通信缓冲区分配预留空间。增加缓冲区的大小有利于那些传输大规模数据行或者 blob 的系统。为了增加缓冲区的大小,将 b 设置为缓冲区的字节数。SinoDB数据库建议您将客户端的通信缓冲区和服务器端通信缓冲区设置为相同的值。
假设一个应用程序通常插入大的 blob。若要设置单个应用程序的缓冲区大小,将 INFORMIXSQLHOSTS 设置为另一个 sqlhosts 文件,并在此文件中将缓冲区大小设置为一个较大的值。
假设一个应用程序通常插入大型 Blob。若要设置单个应用程序的缓冲区大小,请创建一个具有不同缓冲区大小的新 dbservername 条目,然后将 INFORMIXSERVER 环境变量设置为专用应用程序的新服务器。请确保将新的 dbservername 添加到$ONCONFIG文件中的 DBSERVERALIASES 列表中。