Adaptive Server Anywhere (SQL Anywhere)の 接続におけるトラブルシューティング

はじめに

このホワイトペーパーでは、ODBC またはEmbedded SQL を使用するクライアント・アプリケーションがAdaptive Server Anywhere に接続できない場合のトラブルシューティングについて説明します。

クライアント・アプリケーションからの接続では、最初にデータベース・サーバを特定し、データベース、ユーザID 、パスワードの情報を使用して、そのサーバ上のデータベースに接続します。アプリケーションがデータベース・サーバを特定できず、接続が失敗して”データベースサーバが起動されていません”というエラーを返す場合について説明します。

この項では、基礎的な内容を説明します。後の項では、TCP/IP ネットワークおよびSPX またはIPX ネットワークでの接続のトラブルシューティングについて説明します。

Adaptive Server Anywhere のバージョン

このホワイトペーパーでは、Adaptive Server Anywhere 6 以降について説明しています。

一部の内容はSQL Anywhere 5.5 にも該当しますが、SA 5.5 とAdaptive Server Anywhere の類似点および相違点については説明されていません。特に例については、大幅に変更しない限りSA 5.5 では動作しません。一部の例では、簡潔にするためにAdaptive Server Anywhere 7 の実行可能ファイル名を使用しますが、特に記述がある場合を除き、すべての例は他のバージョンにも適用できます。他のAdaptive Server Anywhere のバージョンの場合は、実行可能ファイル名の7 をメジャーバージョン番号に置き換えてください。多くの例およびトラブルシューティング手順では、dbping ユーティリティを使用します。Adaptive Server Anywhere 6.0.1 には、このユーティリティは含まれていません。Adaptive Server Anywhere 6.0.1 を使用している場合は、新しいバージョンへのアップグレードをお勧めします。新しいバージョンには、大幅なパフォーマンスの改善を初めとして、多数の改善点および修正点があります。Adaptive Server Anywhere 6.0.1 をアップグレードできない場合は、

dbisql−c“uid=dba;pwd=sql;<ping connection parameters>”

dbping−c“<ping connection parameters>”.の代わりに使用できます。

パーソナル・サーバとネットワーク・サーバ

Adaptive Server Anywhere Personal Server のdbeng7 は、共有メモリプロトコルをすべてのプラットフォームでサポートしています。また、ほとんどのプラットフォームでローカルTCP/IP リンクをサポートしています。ネットワークサーバのdbsrv7 は、共有メモリおよびTCP/IP をすべてのプラットフォームでサポートしています。

一部のAdaptive Server Anywhere のバージョンとプラットフォームの組み合わせでは、さらにSPX 、IPX 、NetBIOS 、名前付きパイプのうちの1 つまたは複数をサポートしています。ほとんどのアプリケーションおよびユーザにとって、TCP/IP リンクは最も信頼性が高く効率的なネットワーク通信プロトコルです。アプリケーションは、パーソナルサーバを実行しているマシンからだけ、パーソナルサーバに接続することができます。ネットワークサーバは、任意のマシンからの接続をサポートしています。ただし、共有メモリおよび名前付きパイプのプロトコルは、クライアントと同一マシン上で実行しているサーバへの接続にだけ使用することができます。

LAN接続のトラブルシューティング

この項では、クライアント・マシンとサーバ・マシンの両方が同一のローカル・エリア・ネットワーク(LAN)上に存在する場合に、クライアントがサーバを特定するために必要なデータベース・サーバのコマンド・ライン・スイッチおよびクライアント接続パラメータについて説明します。

サーバの起動

両方のマシンが同一のLAN上にある場合、ネットワーク・サーバを起動する通常のコマンドは以下のとおりです。

dbsrv7−x<remote communication link>−n<server name><database file>

例を示します。

dbsrv7−x tcpip−n my_asa_srv my_database.db

他のサーバやデータベース用のコマンド・ライン・スイッチを指定することもできますが、−n および−x は、接続の確立に必要なスイッチです。

データベース・ファイルの前にある−n というコマンド・ライン・スイッチは、サーバ名を指定します。−n オプションを指定しない場合は、Adaptive Server Anywhere サーバ名は最初のデータベースのエイリアスになります。データベースのエイリアスは、データベース・ファイルの後に−n スイッチで指定します。デフォルトは、パスや拡張子を削除したデータベース・ファイル名です。Windows では、Adaptive Server Anywhere サーバのウィンドウ・タイトルにサーバ名が表示されます。

−x というコマンド・ライン・スイッチは、サーバへの接続に使用できるネットワーク・プロトコルを指定します。プロトコル名の後に通信パラメータを使用して接続プロトコルを指定することができますが、これらのパラメータは、通常はサーバがクライアント・マシンと別のLAN 上にある場合にだけ必要です。これらのパラメータについては、後で説明します。

クライアント側の接続パラメータ

クライアント側では、同一のLAN 上にあるAdaptive Server Anywhere に接続するのに必要な接続パラメータは、通常はサーバ名およびCommLinks だけです。サーバ名パラメータは、データベース・サーバでの−n スイッチに相当します。CommLinks パラメータは、データベース・サーバでの−x スイッチに相当します。

たとえば、Adaptive Server Anywhere サーバmy_asa_srv へのTCP/IP 接続をテストするには、以下の形式のコマンド・ラインを使用します。

dbping−c"ServerName=my_asa_srv;CommLinks=tcpip

たとえば、ユーザID”fred” とパスワード”flintstone” を使用して、my_asa_srv 上のデフォルトのデータベースへの接続をテストするには、以下のように入力します。

dbping−d−c"eng=my_asa_srv;links=tcpip;uid=fred;pwd=flintstone

接続パラメータ名では大文字と小文字が区別されませんが、一部のパラメータの値では区別されます。たとえば、大文字と小文字が区別されるデータベースではUiD=fred で接続でき、UiD=Fred では接続できない場合があります。

ServerName、EngineName、ENG は同義語です。また、CommLinks とLinks も同義語です。

通信リンクの開始確認

接続できない場合は、使用する通信リンクがAdaptive Server Anywhere のサーバとクライアントの両方で正しく開始できることを確認します。たとえば、同一のサーバ名を持つ2 つのデータベース・サーバを1 つのTCP/IP またはSPX ネットワークで起動することはできません。2 つ目のサーバを起動しても、通信リンクが競合するため正しく起動しません。

サーバで通信リンクが開始されたことを確認するには:

  1. データベース・サーバ・ウィンドウに以下の行が表示されていることを確認します。

<communication link> を開始しています

<communication link> は正常に開始しました

<communication link> 通信リンクを起動しませんでした。という行が表示された場合は、−zスイッチを使用してデータベースを再起動します。これにより、リンクが開始されない原因を特定するためのデバッグ情報が表示されます。

クライアントで通信リンクが開始されたことを確認するには:

  1. 接続パラメータにDebug=yes;LogFile=<debug filename> を追加します。[Non−Java Adaptive Server Anywhere connect] ダイアログの[ 詳細] タブには、追加の接続パラメータを表示するための[ログ・ファイルにデバッグ情報を表示] チェックボックスがあります。Adaptive Server Anywhere サーバに対して接続を実行すると、デバッグ・ログ・ファイルが作成されます。
  2. ログ・ファイルを調べ、TCP/IP リンクを開始しています。という行の後にTCP/IP リンクは正常に開始しました。という行があることを確認します。リンクが開始されなかった場合は、その原因を特定するためのデバッグ情報がログ・ファイルに記録されています。

サーバ・アドレスのキャッシング

Adaptive Server Anywhere サーバに接続すると、そのサーバ名およびアドレスがローカル・マシン上のasasrv.ini (UNIX の場合は.asasrv.ini) ファイルに保存されます。このファイルをサーバ・アドレス・キャッシュと呼びます。サーバ・アドレスのキャッシングにより接続パフォーマンスが向上しますが、接続のトラブルシューティングが複雑になる場合があります。

ここでは、サーバ・アドレス・キャッシュの処理について説明します。

サーバ・マシンが特定され、その名前およびアドレスがサーバ・アドレス・キャッシュに保存されると、それ以降の接続ではネットワーク上のすべてのマシンに対するネットワーク・ブロードキャストが不要になります。不要なブロードキャストをなくすことで、ネットワーク・トラフィックが減少し、サーバの特定が速くなります。

asasrv.ini ファイルは、通常はWindows マシン上のAdaptive Server Anywhere win32 ディレクトリに作成されます。UNIX マシンでは、asasrv.ini というファイル名になり、ユーザのホーム・ディレクトリに作成されます。

ヒント: サーバ・アドレス・キャッシュ内にアドレスが保存されていると、サーバに接続するために必要な接続パラメータが変化することがあります。サーバ名およびアドレスは、最初に接続が成功したときにキャッシュされます。それ以降の接続では、そのサーバ名に対応するキャッシュ済みアドレスを使用してサーバを検索します。キャッシュ済みアドレスに接続パラメータ以外の情報が含まれている場合は、アドレスがキャッシュされていなければ失敗する場合でも接続できることがあります。トラブルシューティングの際には、接続の成功ごとにサーバ・アドレス・キャッシュを削除してください。

たとえば、クライアント・マシンとデータベース・サーバがブロードキャストをブロックするネットワーク・スイッチで分離されていて、データベース・サーバがTCP/IP 通信リンクを使用しているとします。サーバ・アドレスがキャッシュされていない場合、最小限のTCP/IP ホスト・パラメータを指定しなければ、クライアント・アプリケーションは接続することができません。クライアント・アプリケーションが接続すると、サーバ・アドレスがキャッシュされ、TCP/IP ホスト・パラメータは不要になります。

必要なパラメータがすべて指定されていない場合、アドレスがサーバ・アドレス・キャッシュに保存されているために接続そのものには成功していても、接続に問題が発生することがあります。接続試行時に目的のデータベース・サーバが実行されていなければ、そのサーバはサーバ・アドレス・キャッシュから削除され、Adaptive Server Anywhere が実行された後にアプリケーションがサーバに接続できなくなります。設定は同一のままでアプリケーションを別のマシンに移動した場合にも、接続が失敗することがあります。

サーバ・アドレス・キャッシュ・ファイルは便利ですが、キャッシュ内のアドレスだけを使用してサーバに接続することは避けてください。アドレスがキャッシュに保存されていない場合に必要な接続パラメータを常に指定するようにしてください。これにより、サーバが別のマシンに移動したときや、サーバが削除されたとき、または、サーバが実行されていないときに接続試行が実行されたなどにより、キャッシュ内のアドレスが無効になった場合でも、指定した接続パラメータでサーバに接続することができます。

TCP/IP接続失敗のトラブルシューティング

以下の手順では、Adaptive Server Anywhere のdbping ユーティリティを使用してAdaptive Server Anywhere サーバを特定することができます。dbping を使用して、Adaptive Server Anywhereサーバを指定された接続パラメータに従って接続することができます。dbping で− c パラメータだけが指定されている場合は、Adaptive Server Anywhere サーバは特定されますが、データベースには接続されません。

Windows 2000に必要な EBF

Windows 2000 上のAdaptive Server Anywhere クライアントまたはサーバをTCP/IP 接続で使用する場合のいくつかの問題は、Emergency Bug Fix (EBF) で修正されました。これらの修正を適用していないAdaptive Server Anywhere をWindows 2000 上で実行すると、TCP/IP 通信の問題が発生することがあります。

Adaptive Server Anywhere のバージョン Windows 2000 での問題修正に最低限必要なASA のバージョンEBF のビルド番号
6.0.3 3094
6.0.4 3701
7.0.0 503
7.0.1 1155

手順 1:情報の収集

Adaptive Server Anywhere のTCP/IP 接続失敗のトラブルシューティングを行うには、以下の情報が必要です。

  • Adaptive Server Anywhere サーバ・マシンのIP アドレスおよびホスト名
  • Adaptive Server Anywhere サーバが使用するポート番号
  • Adaptive Server Anywhere サーバ名

以下は、必須ではありませんが有用な情報です。

  • クライアント・マシンとAdaptive Server Anywhere サーバ・マシンが異なるTCP/IP サブネット上にあるかどうか
  • クライアント・マシンとAdaptive Server Anywhere サーバ・マシンの間にファイアウォールがあるかどうか
  • クライアント・マシンとAdaptive Server Anywhere サーバ・マシンの間にブロードキャストをブロックするネットワーク・スイッチがあるかどうか

Adaptive Server Anywhere サーバ・マシンのIP アドレスおよびホスト名を特定するには、以下のコマンドを使用します。

オペレーティング・
システム
コマンド 備考
Windows
98/Me/NT/2000Windows 95
Solaris およびLinux
Ipconfig /allWinipcfg
ifconfig − a
Hostname
“Windows NT IP
Configuration” セクション
の”Host Name” 行および
アダプタのセクションの
“IP Address” を参照ifconfig のアダプタ情報の”inet” 番号(127.0.0.1 はカレント・マシンの参照用であるため無視する)を参照

デフォルトでは、Adaptive Server Anywhere はポート番号に2638 を使用します。dbsrv7 コマンド・ラインで−x tcpip(port=xxxx) を指定すると、デフォルトのポート番号が上書きされます。2 つのAdaptive Server Anywhere サーバが同一マシン上で実行されている場合は、2 つのサーバが同一のポート番号を使用することはできません。Adaptive Server Anywhere 7.0.0以降では、デフォルトのIP ポート番号が使用されている場合、サーバは利用可能なポート番号を自動的に選択します。Adaptive Server Anywhere サーバのIP アドレスまたはポート番号が不明の場合は、Adaptive Server Anywhere サーバを停止し、dbsrv7 コマンド・ラインで− z を指定して再起動します。サーバ・ウィンドウには、IP アドレス172.31.142.196:2638 でUPD リスナを開始しています。というフォーマットの行が表示されます。

これらの行は、サーバが受信するIP アドレスおよびポートを示します。127.0.0.1 というアドレスはループバック・アドレスです。ループバック・アドレスは、すべてのマシンでそのマシン自体の参照に使用できる特殊なアドレスです。また、0.0.0.0 というアドレスも特殊なアドレスです。Adaptive Server Anywhere for UNIX およびAdaptive Server Anywhere 6.0.0− 6.0.2 for Windows では、IP アドレス: 172.31.142.196 というメッセージが表示されます。Adaptive Server Anywhere 7 以降では、デフォルトのIP ポート番号が使用中の場合、デフォルト・ポートで起動できません。ポート49152 で起動します。というメッセージが表示されます。

手順2 : ping を使用したTCP/IP 設定のテスト

クライアント・マシンおよびサーバ・マシンでのTCP/IP 設定および基本のネットワーク設定が正しいかどうかを確認するには、以下の手順に従います。

  1. クライアント・マシン上で、コマンド・プロンプトから以下のコマンドを実行します。ping<IP アドレス>

    たとえば、サーバ・マシンのIP アドレスが172.31.149.196 の場合は、以下のコマンドを実行します。

    ping 172.31.149.196

  2. このコマンドが失敗した場合は、サーバ・マシンまたはクライアント・マシン上のIP設定か、ネットワーク・ケーブル接続などのネットワーク設定に問題があります。問題を修正し、ping が成功してから手順を続行してください。

手順 3: Adaptive Server Anywhereの接続のテスト

これ以降の手順では、dbping を使用してAdaptive Server Anywhere サーバに対する接続を試行します。dbping を使用すると、アプリケーションやODBC 設定に関する潜在的な問題が解消されます。

手順を以下に示します。サーバに接続するための基本的な手順ですが、以下の手順には、接続に必要な特定の情報の一部が含まれていない場合があります。hosts、serverports などのパラメータ情報は変更されることがあるため、この基本的な手順を実行しても接続に失敗する場合には、特定の情報を使用してテストしてください。

dbping を使用して接続を試行するには:

  1. Adaptive Server Anywhere サーバがサーバ・マシンで実行されていることを確認します。
  2. クライアント・マシンのコマンド・プロンプトで、クライアント・プロファイルがないことを確認します(Adaptive Server Anywhere 6 のみ)。dbstop をパラメータなしで実行すると、クライアント・プロファイルが存在する場合には削除されます。
  3. SQLCONNECT環境変数のセットがないことを確認します。Windowsの場合は、SET SQLCONNECT= を実行します。UNIX の場合は、実行されているシェルによってコマンドが異なります。
  4. 以下のコマンドを実行します。dbping−c"eng=<Adaptive Server Anywhere server name>;links=tcpipを示します。

    dbping−c"eng=my_asa_srv;links=tcpip

  5. 成功した場合は、「成功した接続のパラメータの使用」に進みます。この手順は、ほとんどのLAN 構成で使用することができます。

Hostパラメータを使用したAdaptive Server Anywhereの接続のテスト

TCP/IP パラメータを使用せずに行ったテストが失敗し、手順2 が成功した場合は、Adaptive Server Anywhere のTCP/IP Host パラメータの指定が必要になることがあります。Host パラメータの指定は、クライアント・マシンとAdaptive Server Anywhere サーバ・マシンのTCP/IP サブネットが異なる場合、または間にファイアウォールやブロードキャストをブロックするネットワーク・スイッチがある場合に必要になることがあります。

より詳細なパラメータを指定してテストを繰り返します。links=tcpip (Host=<IP アドレスorホスト名>) を使用します。以下に例を示します。

dbping−c"eng=my_asa_srv;links=tcpip(Host=172.31.149.196)

また、Host パラメータではIP アドレスの代わりにホスト名を指定することができます。IPアドレスは成功するが、ホスト名は失敗するという場合は、TCP/IPの設定に問題がある可能性があります。ping < ホスト名> が失敗する場合は、TCP/IP設定にホスト名の問題があります。

HostおよびServerPortパラメータを使用したAdaptive Server Anywhereの接続のテスト

Host パラメータを使用したテストが失敗し、手順2 が成功した場合は、Adaptive ServerAnywhere のTCP/IP port パラメータの指定が必要になることがあります。このパラメータの指定は、サーバがデフォルトのポート番号を使用していない場合にだけ必要です。AdaptiveServer Anywhere 7 では、サーバがデフォルトのポート番号を使用していない場合、およびサーバがNetWare 上で実行されている場合にだけ必要になります。より詳細なパラメータを指定して手順を繰り返します。links=tcpip(Host=<IP アドレスor ホスト名>,port=< ポート番号>) を使用します。以下に例を示します。

dbping−c"eng=my_asa_srv;links=tcpip(Host=172.31.149.196;port=49152)

port の代わりにServerPort と記述することもできます。

Host、port、UseUDP=noパラメータを使用したAdaptiveServer Anywhereの接続のテスト

Host およびServerPort パラメータを使用したテストが失敗し、手順2 が成功した場合は、Adaptive Server Anywhere のTCP/IP UserUDP=no パラメータの指定が必要になることがあります。デフォルトでは、Adaptive Server Anywhere クライアントはUDP パケットを使用してサーバを特定します。クライアント・マシンとAdaptive Server Anywhere サーバ・マシンの間にファイアウォールがある場合は、ファイアウォールがUDPパケットをブロックする可能性があります。Adaptive Server Anywhere のTCP/IPパラメータであるUseUDP=no は、Adaptive Server Anywhere がTCP パケットだけを使用し、UDPパケットは使用しないように設定します。より詳細なパラメータを指定してテストを繰り返します。links=TCPIP(Host=< IP アドレスor ホスト名>,port=< ポート番号>;UseUDP=no) を使用します。以下に例を示します。

dbping−c"eng=my_asa_srv;links=TCPIP(Host=172.31.149.196;port=49152;UseUDP=no)

それでも接続できない場合は、「通信リンクの開始の確認」を参照してください。また、UseUDP の代わりにUDP と記述することもできます。Adaptive Server Anywhere 7.0.2 以降では、UseUDP パラメータは非推奨になりました。UseUDP=no の代わりにDoBroadcast=Noneパラメータを使用してください。

SPXまたはIPXの接続失敗のトラブルシューティング

Adaptive Server Anywhere 6 は、SPX をサポートしていません。Adaptive Server Anywhere 7は、SPX とIPX の両方をサポートしていますが、IPX は非推奨になったため、将来のバージョンのAdaptive Server Anywhere ではサポートされません。Adaptive Server Anywhere 7 を使用する場合は、SPX の方がIPX よりも効率的で信頼性が高いため、SPX の使用をお勧めします。Adaptive Server Anywhere は、NetWare ファイル・サーバのバインダリまたはIPXブロードキャストを使用して、Adaptive Server Anywhere サーバを名前で特定します。Adaptive Server Anywhere は、ほとんどのLAN では追加パラメータなしでサーバを特定することができます。

Host パラメータなしで接続できない場合は、Adaptive Server Anywhere サーバのアドレスが必要になります。このアドレスを確認するには、Adaptive Server Anywhere サーバを停止し、− z を追加してdbsrv7 コマンド・ラインで− z を指定して再起動します。サーバ・ウィンドウに以下のような行が表示されます。

IPX/SPX ホストアドレスは 0:192:79:121:212:95/0:0:0:2 です。

このアドレスをIPX またはSPX のHost=<server address> パラメータとして指定します。以下に例を示します。

dbping−c"eng=my_asa_srv;links=spx(host=0:192:79:121:212:95/0:0:0:2)"

それでも接続できない場合は、「通信リンクの開始の確認」を参照してください。

成功した接続のパラメータの使用

Adaptive Server Anywhere サーバに接続するために必要な接続パラメータを用意したら、そのサーバ上のデータベースへの接続を試行することができます。データベースに接続するには、統合ログオンを使用しない場合はUserID およびPassword パラメータが必要です。また、データベース名パラメータも必要な場合があります。

TCP/IP 接続を使用する場合の[Adaptive Server Anywhere に対するODBC 設定] ダイアログの[ データベース] タブで、[ サーバ名] にAdaptive Server Anywhere サーバ名を入力します。また、[ ネットワーク] タブで、TCP/IP を選択し、必要なAdaptive Server Anywhere のTCP/IP オプションを入力します。次の例では、my_asa_srv というサーバに接続するため、[ サーバ名] にmy_asa_srv を指定し、TCP/IP を選択し、Host=172.31.149.196;port=49152 という追加TCP/IP オプションを指定しています。

dbping−c"eng=my_asa_srv;links=TCPIP(Host=172.31.149.196;port=49152)

法的注意

Copyright(C) 2000-2003 iAnywhere Solutions,Inc. All rights reserved. Adaptive Server、iAnywhere、iAnywhere Solutions、SQL Anywhereは、米国法人iAnywhere Solutions, Inc.または米国法人Sybase,Inc.とその系列会社の米国または日本における登録商標または商標です。その他の商標はすべて各社に帰属します。Mobile Linkの技術には、Certicom,Inc.より供給を受けたコンポーネントが含まれています。これらのコンポーネントは特許によって保護されています。本書に記載された情報、助言、推奨、ソフトウェア、文書、データ、サービス、ロゴ、商標、図版、テキスト、写真、およびその他の資料(これらすべてを”資料”と総称する)は、iAnywhere Solutions,Inc.とその供給元に帰属し、著作権や商標の法律および国際条約によって保護されています。また、これらの資料はいずれも、iAnywhere Solutions, Inc.とその供給元の知的所有権の対象となるものであり、iAnywhere Soluttions, Inc.とその供給元がこれらの権利のすべてを保有するものとします。資料のいかなる部分も、iAnywhere Solutionsの知的所有権のライセンスを付与したり、既存のライセンス契約に修正を加えることを認めるものではないものとします。資料は無保証で提供されるものであり、いかなる保証も行われません。iAnywhere Solutionsは、資料に関するすべての陳述と保証を明示的に拒否します。これには、商業性、特定の目的への整合性、非侵害性の黙示的な保証を無制限に含みます。iAnywhere Solutionsは、資料自体の、または資料が依拠していると思われる内容、結果、正確性、適時性、完全性に関して、いかなる理由であろうと保証や陳述を行いません。iAnywhere Solutionsは、資料が途切れていないこと、誤りがないこと、いかなる欠陥も修正されていることに関して保証や陳述を行いません。ここでは、「iAnywhere Solutions」とは、iAnywhere Solutions, Inc.とSybase, Inc.またはその部門、子会社、継承者、および親会社と、その従業員、パートナー、社長、代理人、および代表者と、さらに資料を提供した第三者の情報元や提供者を表します。* 本書は、米国iAnywhere Solutions, Inc.が作成・テストしたものを日本語に翻訳したものです。

1011225