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 数据库连接 » 数据库连接 » 疑难解答:连接

 

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

注意

建议您仅当需要指定除 HOST 或 ServerPort (PORT) 之外的 TCP/IP 协议选项时才使用 CommLinks (LINKS) 连接参数。否则使用 Host 连接参数。请参见主机连接参数

不能在连接字符串中同时指定 CommLinks 和 Host。

Host 连接参数与 HOST 协议选项不同。CommLinks 连接参数使用 Host 协议选项。 请参见Host (IP) 协议选项(仅客户端)

尝试使用 CommLinks 连接参数通过 TCP/IP 查找服务器的 SQL Anywhere 客户端将通过以下步骤查找服务器:

如果未找到数据库服务器,将返回一条错误,指示未找到服务器。如果出现其它错误,则连接尝试失败且不尝试后续步骤。请参见未找到数据库服务器

客户端成功连接到数据库服务器后,将立即尝试连接到数据库。请参见疑难解答:如何查找数据库服务器

  • 第 1 步:检查数据库服务器地址高速缓存 (sasrv.ini)   如果连接字符串包含 HOST 协议选项但不包含 ServerName 连接参数,LocalOnly 协议选项设置为 YES 或 DoBroadcast 协议选项设置为 NONE,则 SQL Anywhere 客户端将尝试直接进行 TCP/IP 连接。也就是说,SQL Anywhere 客户端并不使用数据库服务器地址高速缓存或 LDAP 服务器。请参见第 3 步:尝试与 HOST 协议选项中指定的地址进行 TCP/IP 连接

    客户端将检查其 sasrv.ini 文件是否包含与 ServerName 连接参数指定的数据库服务器名相匹配的条目。如果连接字符串还包含 HOST 协议选项,则高速缓存条目也必须与指定的主机地址相匹配。

    如果未找到任何匹配的高速缓存条目,客户端将尝试使用 LDAP 查找数据库服务器。请参见第 2 步:在 LDAP 服务器上检查服务器名称

    找到匹配的高速缓存条目时,客户端将尝试通过 TCP/IP 连接到高速缓存中列出的 IP 地址。

    • 如果客户端使用此 IP 地址连接到数据库服务器并且 VerifyServer 协议选项设置为 No,则连接将成功。 请参见VerifyServerName (VERIFY) 协议选项(仅客户端)

    • 如果客户端使用此 IP 地址连接到数据库服务器并且 VerifyServer 设置为 Yes(缺省值),客户端会将数据库服务器的名称与 ServerName 指定的值进行比较。如果数据库服务器名称匹配,连接即会成功。如果数据库服务器名称不匹配,客户端将从其 sasrv.ini 文件删除该条目,然后尝试使用 LDAP 查找数据库服务器。请参见第 2 步:在 LDAP 服务器上检查服务器名称

    • 如果客户端无法建立连接,将从其 sasrv.ini 文件删除该条目,然后尝试使用 LDAP 查找数据库服务器。请参见第 2 步:在 LDAP 服务器上检查服务器名称

    注意

    在 Unix 中,数据库服务器地址高速缓存的文件名为 .sasrv.ini。 请参见疑难解答:如何在 sasrv.ini 中高速缓存数据库服务器地址信息以提高连接速度

    • 第 1 步:示例   假定有一台主机名为 kangaroo、IP 地址为 10.25.13.5 的计算机。一台名为 joey 的数据库服务器运行于该计算机的 49152 端口上。

      对于连接字符串 CommLinks=TCPIP(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 步:在 LDAP 服务器上检查服务器名称   将 SQL Anywhere 客户端和数据库服务器计算机配置为使用 LDAP 服务器时,SQL Anywhere 客户端将在 LDAP 服务器上查询与 ServerName 连接参数匹配的条目。请参见使用 LDAP 作为名称服务器的连接

  • 第 3 步:尝试与 HOST 协议选项中指定的地址进行 TCP/IP 连接   如果未指定 HOST 协议选项,SQL Anywhere 客户端将尝试使用 UDP 查找服务器请求来查找服务器。请参见第 4 步发送 UDP 查找数据库服务器请求

    SQL Anywhere 客户端尝试通过 TCP/IP 连接到 HOST 协议选项中指定的地址。当指定多个地址时,客户端会尝试按 HOST 协议选项中指定地址时所采用的顺序连接到每个地址。客户端会一直尝试连接,直到连接成功或尝试了所有地址。

    当连接字符串包含端口时(在 HOST 协议选项或 ServerPort 连接属性中),客户端会尝试通过 TCP/IP 连接到指定的地址和端口号。如果未指定端口,则客户端将尝试通过 TCP/IP 连接到指定地址的缺省端口 2638 上。

    • 如果客户端使用指定地址连接到数据库服务器并且 VerifyServer 协议选项设置为 No,则连接将成功。请参见VerifyServerName (VERIFY) 协议选项(仅客户端)

    • 如果客户端使用指定地址连接到数据库服务器,则会将数据库服务器的名称与 ServerName 指定的值进行比较。如果数据库服务器名称匹配,连接随即成功并且客户端将更新其 sasrv.ini 文件。如果数据库服务器名称不匹配,则客户端将尝试使用 UDP 查找服务器请求进行连接。请参见第 4 步发送 UDP 查找数据库服务器请求

    • 如果客户端无法进行连接但指定了 ServerName,客户端将尝试使用 UDP 查找服务器请求进行连接。请参见第 4 步发送 UDP 查找数据库服务器请求

    • 如果客户端无法进行连接且未指定 ServerName,则连接将失败。

    • 第 3 步:示例   假定有一台主机名为 kangaroo、IP 地址为 10.25.13.5 的计算机。一台名为 joey 的数据库服务器运行于该计算机的 49152 端口上。这是客户端第一次连接到此服务器,因此客户端的 sasrv.ini 文件中没有高速缓存地址。

      对于连接字符串 CommLinks=TCPIP(Host=kangaroo:49152);ServerName=joey,客户端将通过 TCP/IP 连接到 10.25.13.5:49152,然后验证所连接的服务器名确实为 joey。连接随即成功,因此客户端将更新其 sasrv.ini 文件。

  • 第 4 步发送 UDP 查找数据库服务器请求   仅当连接字符串包含 ServerName 连接参数并且 DoBroadcast 协议选项设置为 DIRECT 或 ALL 时,SQL Anywhere 客户端才会发出 UDP 查找数据库服务器请求。

    • 如果 DoBroadcast=DIRECT 或指定了 HOST 协议选项,客户端会向指定地址发送 UDP 查找服务器包。如果指定端口(在 HOST 协议选项或 ServerPort 协议选项中),UDP 查找服务器请求将发送到指定端口;否则,该请求将发送到缺省端口 2638。

    • 如果 DoBroadcast=ALL 但未指定 HOST 协议选项,客户端将确定其每个 IP 地址的子网广播地址。如果指定了 ServerPort 协议选项,客户端将向指定端口发送 UDP 广播查找服务器包;否则 UDP 广播包将发送到缺省端口 2638。

    除非在启动数据库服务器时指定了 -sb 0 选项,否则所有数据库服务器都将监听端口 2638 上的 UDP 包。当数据库服务器接收到 UDP 查找服务器请求时,数据库服务器会将其名称与请求数据包中指定的名称进行比较。如果名称匹配,数据库服务器将发送回包含其 IP 地址和端口号的 UDP 响应数据包。只有匹配的数据库服务器才会发送响应数据包。

    缺省情况下,客户端接收 UDP 响应时最多等待 5 秒钟。如果未收到任何响应,每秒将重新发送一次 UDP 数据包,直到此进程超时。

    当客户端收到 UDP 响应数据包时,客户端会尝试通过 TCP/IP 连接到数据包中指定的地址和端口。

    如果客户端能够连接到数据库服务器,连接即会成功。客户端将更新其 sasrv.ini 文件。

    注意

    UDP 数据包不能查找以下数据库服务器:

    上述各种情况下,只要在 HOST 协议选项中指定数据库服务器的地址(包括端口号),客户端连接便会成功。

    • 第 4 步:示例   假定有一台主机名为 kangaroo、IP 地址为 10.25.13.5 的计算机。一台名为 joey 的数据库服务器运行于该计算机的 49152 端口上。这是客户端第一次连接到此服务器,因此客户端的 sasrv.ini 文件中没有高速缓存地址。通过与 kangaroo 位于同一子网中的计算机尝试进行连接,此子网的广播地址为 10.25.13.255。

      对于连接字符串 CommLinks=TCPIP;ServerName=joey,客户端会向广播地址 10.25.13.255:2638 发送 UDP 查找服务器广播请求。数据库服务器 joey 会监听 UDP 地址 10.25.13.5.2638,并发送回地址 10.25.13.5:49152 作为响应。客户端通过 TCP/IP 连接到 10.25.13.5:49152。连接随即成功,因此客户端将更新其 sasrv.ini 文件。