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:Host 接続パラメータで指定されたアドレスに TCP/IP 接続を試みるを参照してください。

    クライアントは、ServerName 接続パラメータによって指定されたデータベースサーバ名に一致するエントリをクライアント内の sasrv.ini ファイルで確認します。

    一致するキャッシュエントリが見つからない場合、クライアントは直接 TCP/IP 接続を試みます。手順 2:Host 接続パラメータで指定されたアドレスに TCP/IP 接続を試みるを参照してください。

    キャッシュエントリが ServerName 接続パラメータと、Host 接続パラメータで指定されたアドレスの両方に一致する場合、クライアントはキャッシュに示されている IP アドレスへの TCP/IP 接続を試みます。

    • 手順 1:例   ホスト名が kangaroo、IP アドレスが 10.25.13.5 のコンピュータがあるとします。joey という名前のデータベースサーバがこのコンピュータのポート 49152 で実行中です。

      接続文字列 Host=kangaroo;ServerName=joey に対して、クライアントはサーバ名 joey と一致するエントリをその sasrv.ini ファイルで検索します。キャッシュ内の IP アドレスは 10.25.13.5:49152 です。クライアントは指定された Host 名のアドレスと 10.25.13.5 を比較します。アドレスが一致するので、クライアントは TCP/IP 経由で 10.25.13.5:49152 に接続してから、接続したサーバの名前が joey であることを確認します。接続は成功です。

  • 手順 2:Host 接続パラメータで指定されたアドレスに TCP/IP 接続を試みる   複数のアドレスが指定された場合、クライアントは、Host 接続パラメータに指定された順序で各アドレスに接続しようとします。クライアントは、接続に成功するまで、またはすべてのアドレスを試してみるまで接続を試みます。

    アドレスにポートが含まれる場合、クライアントは、そのアドレスと指定されたポート番号への TCP/IP 接続を試みます。ポートが指定されない場合、クライアントはデフォルトポートである 2638 で指定されたアドレスの TCP/IP 接続を試みます。

    • クライアントは、データベースサーバに接続し、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 データベースサーバ検索要求を送信する   SQL Anywhere クライアントは、接続文字列に ServerName 接続パラメータが含まれており、Host 値がポートを指定しないときにだけ、UDP データベースサーバ検索要求を送信します。UDP サーバ検索要求は、指定されたアドレスでポート 2638 に送信されます。

    デフォルトでは、同一のコンピュータ上のすべてのデータベースサーバ (Mac OS X を実行しているコンピュータを除く) は、ポート 2638 で UDP パケットを受信します。Mac OS X では、1 つのサーバだけがポート 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)。接続文字列にポート番号が指定されていないので、クライアントは UDP サーバ検索要求をアドレス 10.25.13.5:2638 に送信します。データベースサーバ joey は、UDP アドレス 10.25.13.5.2638 で受信を待っており、アドレス 10.25.13.5:49152 で応答します。クライアントは TCP/IP 経由で 10.25.13.5:49152 に接続します。接続は成功するので、クライアントはその sasrv.ini ファイルを更新します。