テクニカル・サポートでは、データベース接続に関する問題に遭遇することがよくあります。これは本製品の最も誤解されやすい領域の1
つです。このドキュメントでは、バージョン6 以降でデータベース接続を確立するプロセスをステップごとに説明します。
ネットワーク内のネットワーク・サーバ上で実行されているデータベースに接続するには、クライアント・ソフトウェアがデータベース・サーバの場所を特定する必要があります。クライアント・ライブラリは、指定された名前のパーソナル・サーバ(ローカル・マシン上のスタンドアロン・エンジン)を探してから、ネットワーク上で指定された名前のサーバを探します。AdaptiveServer
Anywhere (SQL Anywhere)では、このタスクを処理するネットワーク・ライブラリを用意しています。このネットワーク・ライブラリは、ネットワークに対してブロードキャストを行うことによってサーバを検索しますが、これは時間のかかるプロセスです。ネットワーク・ライブラリがサーバの場所を特定すると、クライアント・ライブラリはその名前とネットワーク・アドレスをファイル(asasrv.ini)に保存して、それ以降、指定されたプロトコルを使用してそのサーバへ接続するときには、このエントリを再利用します。
接続パラメータは、接続文字列としてインタフェース・ライブラリに渡されます。この文字列は、セミコロン(:)で区切られた1
組のパラメータで構成されます。
パラメータ1=値1;パラメータ2=値2;...
一般に、アプリケーションによって作成され、インタフェース・ライブラリに渡される接続文字列は、ユーザによる情報の入力形式を直接反映したものではありません。その代わり、ユーザがダイアログ・ボックスに情報を入力したり、アプリケーションが初期化ファイルから接続情報を読み取ります。次に接続パラメータ文字列のサンプルを示します。
"UID=dba;PWD=sql;ENG=myserver;DBN=mydb;CommLinks=tcpip"
以下にプロセスを示します。
ケース1:サーバの検索(UDP)
1. DoBroadcast=NONE の場合は、ケース2 に進みます。
2. UDP ソケットを開きます。ClientPort パラメータが指定されている場合は、指定されたポートにバインドします。
3. アドレス・キャッシュからサーバ名を探します。アドレスがキャッシュに存在する場合は、サーバ名が含まれたそのアドレス宛てにUDP
ブロードキャストを直接送信します。応答を5 秒間待機してから、1 秒ごとに1
回ブロードキャストを再送信します。応答が返ってきたら、ステップ13 に進みます。
4. DoBroadcast=DIRECT (またはNO)の場合は、ステップ8 に進みます。
5. Broadcast パラメータが設定されている場合は、ステップ7 に進みます。
6. MyIP パラメータが設定されている場合は、指定されたIP アドレスのリストを作成します。
MyIP パラメータが設定されていない場合は、OS からローカル・マシンのIP アドレスのリストを取得します。IP
アドレスのリストにループバック・アドレス(127.0.0.1)が存在しない場合は、そのリストに追加します。リスト内の各アドレスを、IP
アドレスのクラスに基づいたブロードキャスト・アドレスに変更します。クラスA
アドレスの場合は、最後の3 バイトを255 に変更します。クラスB アドレスの場合は、最後の2
バイトを255 に変更し、クラスC アドレスの場合は、最後のバイトを255 に変更します。
7. 各ブロードキャスト・アドレスに対して、UDP ブロードキャスト・パケットを送信します。
ポートはすべてのパケットに対して2638 を使用します。Port パラメータが指定されている場合は、指定されたポートでもパケットを送信します。
8. Host パラメータが使用されている場合は、指定された各アドレスにUDP ブロードキャスト・
パケットを送信します。同様に、ポートは2638 を使用するとともに、Port パラメータで指定されたポートも使用します。
9. ブロードキャストに対する応答の待機を開始します。(a)応答を受信するまで、または(b)タイムアウト(デフォルトは5
秒)が経過するまで、1 秒ごとにステップ7〜8 を1 回繰り返します。
UDP パケットは保証されていないため、ブロードキャストが失われる可能性があるからです。
10. 名前が一致するAdaptive Server Anywhere (SQL Anywhere) サーバがブロードキャスト・パケットを受信した場合、そのAdaptive
Server Anywhere (SQL Anywhere) サーバは応答を返し、それ以外の場合はパケットを無視します。
11. 5 秒以内に応答を受信しなかった場合は、エラー・コード-100 が返されます。
12. OS がブロードキャスト応答の送信者のIP アドレスを示します。応答にはサーバのポート番号も含まれます。
13. UDP ソケットを閉じます。
14. TCP ソケットを開きます。ClientPort パラメータが指定されている場合は、指定されたポートにバインドします。
15. 以上でIP アドレス(アドレス・キャッシュまたはOS より取得)およびポート番号(ブロードキャストの応答より取得)が判明します。そのアドレスに対してTCP
接続を行ってみましょう。
接続に失敗した場合は、エラー・コード-100 が返されます。
16. エラー・コード0 が返され、接続が確立します。
ケース2: サーバの検索と接続(UDP なし)
1. TCP ソケットを開きます。ClientPort パラメータが指定されている場合は、指定されたポートにバインドします。
2. アドレス・キャッシュからサーバ名を探します。アドレスがキャッシュに存在する場合は、
そのアドレスに対してTCP 接続を行ってみます。接続に成功した場合は、ステップ6
に進んでサーバ名を確認します。確認に成功した場合は、エラー・コード0 が返されます。以上で接続が確立します。
3. Host パラメータが指定されていない場合は接続できません。エラー・コード-100
が返されます。
4. Host で指定された各アドレスと、Port で指定された各ポート(Port が指定されていない場合は2638)について、そのアドレスに対してTCP
接続を行ってみます。接続に成功した場合は、ステップ6 に進んでサーバ名を確認します。確認に成功した場合は、エラー・コード0
が返されます。以上で接続が確立します。確認に失敗した場合は、Host パラメータで指定された次のアドレスに対してTCP
接続を行ってみます。
5. いずれの接続も成功しなかった場合は、エラー・コード-100 が返されます。
6. Adaptive Server Anywhere (SQL Anywhere)サーバへのTCP 接続が確立した場合は、そのサーバ名が検索対象の名前と一致しているか確認する必要があります。TCP
接続を介して"無接続要求"パケットを送信し、サーバ名を要求します。
7. 無接続応答で返されたサーバ名と、検索対象のサーバ名を比較します。それらが一致しない場合は、接続を閉じて、(どこからであっても)元のステップ2
または4 に戻ります。
注意:
1. タイムアウトの5 秒は、Timeout パラメータで変更できます。例:Links=tcpip(TO=2)
2. ネットワーク上に同じ名前のサーバが複数存在する場合は、複数のブロードキャスト応答を受信する可能性があります。その場合は、最初の応答を使用して、以降の応答は無視します。このため、ネットワーク上に同じ名前のサーバを複数配置しないことをお奨めします。同じ名前のサーバが存在すると、Host
パラメータおよびDoBroadcast=DIRECTパラメータを使用しない限り、接続先を保証できません。
3. DoBroadcast=NONE パラメータは7.0.2 以降でのみ有効です。バージョン6.0.3〜7.0.1
では、同じ機能としてUseUDP=NO を使用してください。この機能は6.0.3 よりも前のバージョンでは使用できません。
4. DoBroadcast=DIRECT パラメータは、7.0.2 以降でのみ有効です。7.0.2 よりも前のバージョンでは、同じ機能としてDoBroadcast=NO
を使用してください。
5. Broadcast パラメータは、バージョン6.0.3.3096+、6.0.4.3702+、7.0.2.1449、および7.0.3以降でのみ機能します。特に7.0.0
や7.0.1 では機能しません。
6. ClientPort パラメータは、6.0.3 以降でのみ使用できます。
|