基本的に、SQL Server への接続に失敗した場合、次のような問題が考えられます。
- ネットワークの問題、
- SQL Server の構成の問題。
- ファイアウォールの問題
- クライアントドライバーの問題
- アプリケーション構成の問題。
- 認証とログオンの問題。
ステップ 1: ネットワークの問題
ネットワークが機能していなくてもローカル接続を確立できる場合がありますが、それは特殊なケースです。リモート接続には、安定したネットワークが必要です。SQL 接続の問題をトラブルシューティングする最初のことは、依存しているネットワークが実行可能で安定していることを確認することです。次のコマンドを実行してください。
ping -a (特に IPv4 と IPv6 には -4 と -6 を使用します) ping -a nslookup (ローカルとリモートのマシン名と IP アドレスを複数回入力します)
返された結果に不一致がないか注意してください。ターゲット マシンに ping できない場合は、ネットワークが壊れているか、ターゲット マシンが実行されていない可能性が高くなります。ただし、ターゲット マシンがファイアウォールの背後にあり、ファイアウォールが ping によって送信されるパケットをブロックしている可能性があります。Windows ファイアウォールは、既定では ping (ECHO) パケットをブロックしません。ネットワーク上の DNS 構成が正しいことは、SQL 接続に不可欠です。間違った DNS エントリは、後であらゆる種類の接続の問題を引き起こす可能性があります。たとえば、「SSPI コンテキストを生成できません」というエラー メッセージ、Poisoned DNS については、このリンクを参照してください。
手順 2: SQL Server の構成の問題
ターゲット SQL Server が実行中で、適切なプロトコルでリッスンしていることを確認する必要があります。SQL Server 構成マネージャー (SCM) を使用して、サーバー コンピューターでプロトコルを有効にすることができます。SQL Server は、共有メモリ、名前付きパイプ、および TCP プロトコル (および特別なハードウェアを必要とし、めったに使用されない VIA) をサポートしています。リモート接続の場合、NP および/または TCP プロトコルを有効にする必要があります。SCM でプロトコルを有効にしたら、必ず SQL Server を再起動してください。
エラー ログ ファイルを開いて、サーバーがいずれかのプロトコルを正常にリッスンしているかどうかを確認できます。エラー ログ ファイルの場所は通常、%ProgramFile%Microsoft SQL Server/MSSQLxx.xxx/MSSQL/Log です。ターゲット SQL インスタンスが名前付きインスタンスの場合は、ターゲット マシンで SQL Browser が実行されていることも確認する必要があります。リモート SQL Server にアクセスできない場合は、管理者に依頼して、これらすべてが確実に行われるようにしてください。
ステップ 3: ファイアウォールの問題
SQL Server マシン (またはクライアントとサーバーの間の任意の場所) 上のファイアウォールは、SQL 接続要求をブロックする可能性があります。これがファイアウォールの問題であるかどうかを特定する簡単な方法は、可能であればファイアウォールを短時間オフにすることです。長期的な解決策は、SQL Server と SQL Browser を例外にすることです。
NP プロトコルの場合、ファイル共有がファイアウォールの例外リストにあることを確認してください。ファイル共有と NP は両方とも、その下で SMB プロトコルを使用します。TCP プロトコルの場合、SQL Server がリッスンする TCP ポートを例外にする必要があります。SQL Browser の場合、UDP ポート 1434 を例外に入れてください。一方、sqlservr.exe と sqlbrowser.exe も同様に例外に入れることができますが、これはお勧めできません。信頼されていないマシン間の IPSec も、一部のパケットをブロックする可能性があります。ローカル接続では、ファイアウォールが問題になることは決してないことに注意してください。
手順 4: クライアント ドライバーの問題
この段階で、いくつかのツールを使用して接続をテストできます。テストは必ずクライアント マシンで実行する必要があります。
最初の試行: telnet TCP が有効になっている場合、SQL サーバーの TCP ポートに telnet で接続できるはずです。それ以外の場合は、手順 1 ~ 3 の確認に戻ります。次に、OSQL、SQLCMD、および SQL Management Studio を使用して SQL 接続をテストします。これらのツールをお持ちでない場合は、Microsoft から SQL Express をダウンロードしてください。これらのツールは無料で入手できます。
OSQL (SQL Server 2000 に同梱されているもの) は MDAC を使用します。OSQL (SQL Server 2005 & 2008 に同梱されているもの) は SNAC ODBC を使用します。SQLCMD (SQL Server 2005 および 2008 に付属) は SNAC OLEDB を使用します。SQL Management Studio (SQL Server 2005 & 2008 に付属) は SQLClient を使用します。
可能なコマンドは次のように使用できます: osql -E -SYour_target_machine\Your_instance for Windows Auth osql -Uyour_user -SYour_target_machine\Your_instance SQL Auth
ここでも SQLCMD が適用されます。さらに、TCP の場合は「-Stcp:Your_target_machine, Tcp_port」、NP の場合は「-Snp:Your_target_machine\Your_instance」、共有メモリの場合は「-Slpc:Your_target_machine\Your_instance」を使用できます。すべてのプロトコルで失敗するか、特定のプロトコルで失敗するかがわかります。
この段階では、エラー 26 やエラー 40 などの一般的なエラー メッセージは表示されなくなります。NP を使用しているにもかかわらずエラー 40 (名前付きパイプ プロバイダー: SQL Server への接続を開けませんでした) が表示される場合は、次の手順を試してください: a) サーバー コンピューターでファイル共有を開きます。b) 「net view \your_target_machine」と「net use \your_target_machine\your_share」を実行します (Windows Explorer からもネットワーク ドライブのマップを試すことができます)。これは SQL Server 固有ではありません。この問題を解決するには、まずインターネットで検索してください。
Windows 認証と SQL 認証の両方を使用して接続を試すことができます。すべてのツールを使用したテストが失敗した場合は、失敗がログオン関連でない限り、手順 1 ~ 3 が正しく設定されていない可能性が高く、手順 6 を確認できます。
一部のツールで成功しても、他のツールで失敗する場合は、おそらくドライバーの問題です。フォーラムに質問を投稿して、詳細をお知らせください。
「\windows\system32\odbcad32.exe」(Windows に付属) を使用して、さまざまなドライバーの新しい DSN を追加して接続をテストすることもできますが、これは ODBC のみです。
ステップ 5: アプリケーションの問題
手順 1 ~ 4 で成功してもアプリケーションでエラーが発生する場合は、アプリケーションの構成の問題である可能性があります。ここで考えられるいくつかの問題について考えてみてください。a) アプリケーションは、ステップ 4 でテストしたアカウントと同じアカウントで実行されていますか? そうでない場合は、そのアカウントで手順 4 のテストを試すか、可能であればアプリケーションの実行可能なサービス アカウントに変更することをお勧めします。b) アプリで使用する SQL ドライバーはどれですか? c) 接続文字列は何ですか? 接続文字列はドライバーと互換性がありますか? http://www.connectionstrings.com/を参照してください。
ステップ 6: 認証とログオンの問題
これは、SQL 接続の問題でおそらく最も難しい部分です。多くの場合、ネットワーク、OS、および SQL Server データベースの構成に関連しています。これには簡単な解決策はなく、ケースバイケースで解決する必要があります。いくつかの特殊なケースについて話している sql_protocols には既にいくつかのブログがあり、それらのいずれかがあなたのケースに当てはまるかどうかを確認することができます。それとは別に、留意すべき点: a) SQL 認証を使用する場合は、混合認証を有効にする必要があります。このページを参照して確認してください http://msdn.microsoft.com/en-us/library/ms188670.aspx
b) ログイン アカウントに、ログイン中に使用したデータベース (OLEDB の「初期カタログ」) へのアクセス許可があることを確認します。
参照: http://blogs.msdn.com/b/sql_protocols/archive/2008/04/30/steps-to-troubleshoot-connectivity-issues.aspx
このテキストの壁で申し訳ありません。ここから何かがあなたの問題を解決するのに役立つことを願っています!
よろしく。