Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SAP Sybase SQL Anywhere 16.0 (中文) » SQL Anywhere 服务器 - 数据库管理 » SQL Anywhere 数据库连接 » 数据库连接 » 疑难解答:连接

 

疑难解答:Host 连接参数如何查找数据库服务器

尝试使用 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 地址。

    • 第 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 数据包不能查找以下数据库服务器:

    上述各种情况下,只要在 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 文件。