尝试使用 Host 连接参数通过 TCP/IP 查找数据库服务器的 SQL Anywhere 客户端将通过以下步骤查找服务器:
如果未找到数据库服务器,将返回一条错误,指示未找到服务器。如果出现其它错误,则连接尝试失败且不尝试后续步骤。请参见未找到数据库服务器。
客户端成功连接到数据库服务器后,将立即尝试连接到数据库。请参见查找数据库。
第 1 步:检查数据库服务器地址高速缓存 (sasrv.ini) 如果连接字符串包含 Host 连接参数但不包含 ServerName,则 SQL Anywhere 客户端无法使用 sasrv.ini 文件。请参见第 2 步:尝试通过 TCP/IP 连接到 Host 连接参数中指定的地址。
客户端将检查其 sasrv.ini 文件是否包含与 ServerName 连接参数指定的数据库服务器名相匹配的条目。
如果未找到任何匹配的高速缓存条目,客户端将尝试采用直接 TCP/IP 连接。请参见第 2 步:尝试通过 TCP/IP 连接到 Host 连接参数中指定的地址。
如果高速缓存条目与 ServerName 连接参数以及由 Host 连接参数指定的地址同时匹配,客户端将尝试通过 TCP/IP 连接到高速缓存中列出的 IP 地址。
如果客户端使用此 IP 地址连接到数据库服务器,它会将数据库服务器的名称与 ServerName 指定的值进行比较。
如果数据库服务器名称匹配,连接即会成功。
如果数据库服务器名称不匹配,客户端将从其 sasrv.ini 文件删除该条目,然后尝试采用直接 TCP/IP 连接。请参见第 2 步:尝试通过 TCP/IP 连接到 Host 连接参数中指定的地址。
如果客户端无法进行连接,它将从其 sasrv.ini 文件删除该条目,然后尝试采用直接 TCP/IP 连接。请参见第 2 步:尝试通过 TCP/IP 连接到 Host 连接参数中指定的地址。
在 Unix 中,数据库服务器地址高速缓存的文件名为 .sasrv.ini。请参见在 sasrv.ini 中高速缓存数据库服务器地址信息以提高连接速度。
第 1 步示例 假定有一台主机名为 kangaroo、IP 地址为 10.25.13.5 的计算机。一台名为 joey 的数据库服务器运行于该计算机的 49152 端口上。
对于连接字符串 Host=kangaroo;ServerName=joey
,客户端会在其 sasrv.ini 文件中查找与服务器名 joey 相匹配的条目。高速缓存中的 IP 地址为 10.25.13.5:49152。客户端会将指定主机名的地址与 10.25.13.5 进行比较。由于地址匹配,因此客户端将通过 TCP/IP 连接到 10.25.13.5:49152,然后验证所连接的服务器名确实为
joey。连接随即成功。
第 2 步:尝试通过 TCP/IP 连接到 Host 连接参数中指定的地址 当指定多个地址时,客户端会尝试按 Host 连接参数中指定地址时所采用的顺序连接到每个地址。客户端会一直尝试连接,直到连接成功或尝试了所有地址。
当地址包含端口时,客户端会尝试通过 TCP/IP 连接到指定的地址和端口号。如果未指定端口,则客户端将尝试通过 TCP/IP 连接到指定地址的缺省端口 2638 上。
如果客户端连接到数据库服务器且指定了 ServerName,则客户端会将数据库服务器的名称与 ServerName 指定的值进行比较。
如果数据库服务器名称匹配,连接即会成功。客户端将更新其 sasrv.ini 文件。
如果数据库服务器名称不匹配,则客户端将尝试使用 UDP 查找服务器请求进行连接。请参见第 3 步:发送 UDP 查找数据库服务器请求。
如果客户端连接到数据库服务器且未指定 ServerName,则连接将成功。
如果客户端无法进行连接但指定了 ServerName,则客户端将尝试使用 UDP 查找服务器请求进行连接。请参见第 3 步:发送 UDP 查找数据库服务器请求。
如果客户端无法进行连接且未指定 ServerName,则连接将失败。
第 2 步示例 假定有一台主机名为 kangaroo、IP 地址为 10.25.13.5 的计算机。一台名为 joey 的数据库服务器运行于该计算机的 49152 端口上。这是客户端第一次连接到此服务器,因此客户端的 sasrv.ini 文件中没有高速缓存地址。
对于连接字符串 Host=kangaroo:49152;ServerName=joey
,客户端将通过 TCP/IP 连接到 10.25.13.5:49152,然后验证所连接的服务器名确实为 joey。连接随即成功,因此客户端将更新其 sasrv.ini 文件。
第 3 步:发送 UDP 查找数据库服务器请求 仅当连接字符串包含 ServerName 连接参数且 Host 值未指定端口时,SQL Anywhere 客户端才会发出 UDP 查找数据库服务器请求。UDP 查找服务器请求将发送到指定地址的 2638 端口。
缺省情况下,同一计算机上的所有数据库服务器(运行 Mac OS X 的计算机除外)将监听 2638 端口上的 UDP 包。在 Mac OS X 上,只有一台服务器能够监听 2638 端口上的 UDP。当数据库服务器接收到 UDP 查找服务器请求时,数据库服务器会将其名称与 UDP 请求中指定的名称进行比较。如果名称匹配,数据库服务器将发送回包含其 IP 地址和端口号的 UDP 响应数据包。只有匹配的数据库服务器才会发送响应数据包。
缺省情况下,客户端接收 UDP 响应时最多等待 5 秒钟。如果未收到任何响应,每秒将重新发送一次 UDP 数据包,直到此进程超时。
当客户端收到 UDP 响应数据包时,客户端会尝试通过 TCP/IP 连接到数据包中指定的地址和端口。
如果客户端能够连接到数据库服务器,连接即会成功。客户端将更新其 sasrv.ini 文件。
UDP 数据包不能查找以下数据库服务器:
运行于 Mac OS X 上且不在 2638 端口上进行监听的数据库服务器。请参见ServerPort (PORT) 协议选项。
指定了 -sb 0 选项的数据库服务器。请参见-sb dbeng12/dbsrv12 服务器选项。
UDP 请求被防火墙、路由器或网关阻塞的数据库服务器。请参见穿过防火墙进行连接。
上述各种情况下,只要在 Host 连接参数中指定数据库服务器的端口便可使客户端连接成功。
第 3 步示例 假定有一台主机名为 kangaroo、IP 地址为 10.25.13.5 的计算机。一台名为 joey 的数据库服务器运行于该计算机的 49152 端口上。这是客户端第一次连接到此服务器,因此客户端的 sasrv.ini 文件中没有高速缓存地址。
对于连接字符串 Host=kangaroo;ServerName=joey
,客户端尝试通过 TCP/IP 连接到 10.25.13.5:2638,但连接失败(第 2 步)。由于连接字符串中未指定端口号,因此客户端向地址 10.25.13.5:2638 发送 UDP 查找服务器请求。数据库服务器 joey 会监听 UDP
地址 10.25.13.5.2638,并发送回地址 10.25.13.5:49152 作为响应。客户端通过 TCP/IP 连接到 10.25.13.5:49152。连接随即成功,因此客户端将更新其 sasrv.ini 文件。
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |