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

SQL Anywhere 12.0.1 » SQL Anywhere サーバー データベース管理 » データベースの開始とデータベースへの接続 » SQL Anywhere データベース接続 » 接続のトラブルシューティング

 

Host 接続パラメーターを使用した SQL Anywhere データベースサーバーの検出

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 ファイルを更新します。