SQL Server への接続を確立している間に、ネットワーク関連またはインスタンス固有のエラーが発生しました
適用対象: SQL Server
SQL Server インスタンスに接続すると、次の 1 つ以上のエラー メッセージが表示される場合があります。 この記事では、これらのエラーのトラブルシューティングに役立ついくつかの手順について、単純なものから複雑なものまで、問題の順序で説明します。
エラー メッセージ
完全なエラー メッセージは、アプリケーションとサーバー環境で使用されるクライアント ライブラリによって異なります。 次の詳細を確認して、次のいずれかのエラー メッセージが表示されているかどうかを確認できます。
SQL Server への接続を確立している間に、ネットワーク関連またはインスタンス固有のエラーが発生しました インスタンス名が正しく、SQL Serverがリモート接続を許可するように構成されていることを確認します。
プロバイダー: 名前付きパイプ プロバイダー、エラー: 40 - SQL Serverへの接続を開けませんでした (Microsoft SQL Server、エラー: 53)
SQL Server への接続を確立している間に、ネットワーク関連またはインスタンス固有のエラーが発生しました。 サーバーが見つからなかったか、アクセスできませんでした。 インスタンス名が正しいことと、リモート接続を許可するようにSQL Serverが構成されていることを確認します。provider: 名前付きパイプ プロバイダー、エラー: 40 - SQL Serverへの接続を開けませんでした (Microsoft SQL Server、エラー:53)
プロバイダー: TCP プロバイダー、エラー: 0 - このようなホストは認識されていません。 (Microsoft SQL Server、エラー: 11001)
プロバイダー: SQL ネットワーク インターフェイス、エラー: 26 - 指定されたサーバー/インスタンスの検索エラー
SQL Server への接続を確立している間に、ネットワーク関連またはインスタンス固有のエラーが発生しました。 サーバーが見つからなかったか、アクセスできませんでした。 インスタンス名が正しいことと、リモート接続を許可するようにSQL Serverが構成されていることを確認します。プロバイダー: SQL ネットワーク インターフェイス、エラー: 26 - 指定されたサーバーまたはインスタンスの位置を特定しているときにエラーが発生しました
ログイン タイムアウトの有効期限が切れています
SQL Server Native Client データ リンク エラー[Microsoft SQL Server Native Client 10.0]: ログイン タイムアウトの有効期限が切れています
[Microsoft SQL Server Native Client 10.0]: SQL Serverへの接続の確立中に、ネットワーク関連またはインスタンス固有のエラーが発生しました。 サーバーが見つからないか、アクセスできません。 インスタンス名が正しいかどうか、およびリモート接続を許可するように SQL Server が構成されているかどうかを確認します。 詳細については、SQL Server オンライン ブックの「ログインの作成」を参照してください。
[Microsoft SQL Server Native Client 10.0]: SQL Server ネットワーク インターフェイス: 指定されたサーバー/インスタンスの検索中にエラーが発生しました [xFFFFFFFF]。
接続されたパーティーが一定期間後に適切に応答しなかったか、接続されたホストが応答に失敗したために確立された接続が失敗したため、接続試行が失敗しました
SQL Server への接続を確立している間に、ネットワーク関連またはインスタンス固有のエラーが発生しました。 サーバーが見つからなかったか、アクセスできませんでした。 インスタンス名が正しいことと、リモート接続を許可するようにSQL Serverが構成されていることを確認します。プロバイダー: TCP プロバイダー、エラー: 0
接続先が一定の時間を過ぎても正しく応答しなかったため、接続できなかったか、接続済みのホストが応答しなかったため、確立された接続がエラーになりました
Microsoft SQL Server Compact 10060
プロバイダー: 名前付きパイプ プロバイダー、エラー: 40 - SQL Serverへの接続を開くことができませんでした
SQL Server への接続を確立している間に、ネットワーク関連またはインスタンス固有のエラーが発生しました。 サーバーが見つからなかったか、アクセスできませんでした。 インスタンス名が正しいことと、リモート接続を許可するようにSQL Serverが構成されていることを確認します。プロバイダー: 名前付きパイプ プロバイダー、エラー: 40 - SQL Serverへの接続を開けませんでした
(Microsoft SQL Server、エラー: 53
要求されたヘッダーは見つかりませんでした
[Microsoft][SQL Server Native Client 11.0]TCP プロバイダー: ターゲット マシンがアクティブに拒否したため、接続できませんでした
SQL Server Native Client データ リンク エラー[Microsoft][SQL Server Native Client 11.0]TCP プロバイダー: ターゲット コンピューターが積極的に拒否したため、接続できませんでした。
[Microsoft][SQL Server Native Client 11.0] ログイン タイムアウトの有効期限が切れています
[Microsoft][SQL Server Native Client 11.0] SQL Server への接続を確立している間に、ネットワーク関連またはインスタンス固有のエラーが発生しました サーバーが見つからないか、アクセスできません。 インスタンス名が正しいかどうか、およびリモート接続を許可するように SQL Server が構成されているかどうかを確認します。 詳細については、SQL Server オンライン ブックの「ログインの作成」を参照してください。
"SQL Serverが存在しないか、アクセスが拒否されました"
通常、このエラーは、クライアントが SQL Server インスタンスを見つけられないことを意味します。 この問題は、次のいずれかの理由で発生します。
- SQL Serverをホストしているコンピューターの名前が正しくありません。
- インスタンスが正しい IP を解決しません。
- TCP ポート番号が正しく指定されていません。
注:
高可用性シナリオにおける接続のトラブルシューティングについては、以下の記事を参照してください。
Windows エラー 233: パイプのもう一方の端にプロセスがありません
完全なメッセージは次のとおりです。
サーバーとの接続が正常に確立されましたが、ログイン プロセス中にエラーが発生しました。 (プロバイダー: 共有メモリ プロバイダー、エラー: 0 - パイプのもう一方の端にプロセスがありません)。(Microsoft SQL Server、エラー: 233)
このメッセージは、共有メモリまたは名前付きパイプ プロトコルでSQL Serverがリッスンしていないことを意味します。
エラーのトラブルシューティングに関する情報を収集する
エラーのトラブルシューティングを行う実際の手順に進む前に、次のいずれかのオプションを使用して、このセクションに記載されている情報を収集することをお勧めします。
オプション 1:SQL チェック ツールを使用して必要な情報を収集する
SQL Server コンピューターにローカルでサインインし、管理者アクセス権を持つ場合は、SQLCHECK を使用します。 このツールは、1 つのファイルでトラブルシューティングに必要なほとんどの情報を提供します。 ツールの使用と収集する情報の詳細については、ツールのホーム ページを確認してください。 推奨される 前提条件 とチェックリストのページを確認することもできます。
オプション 2: 次の手順を使用してデータを個別に収集する
Configuration Manager からインスタンス名を取得する
SQL Server インスタンスをホストするサーバーで、SQL Server 構成マネージャーを使用してインスタンス名を確認します。
注:
SQL Server がインストールされると、コンピューターに Configuration Manager が自動的にインストールされます。 Configuration Manager を開始する手順は、SQL Server と Windows のバージョンによって若干異なります。 バージョン固有の詳細については、「SQL Server 構成マネージャー」を参照してください。
SQL Server のインスタンスをホストしているコンピューターにサインインします。
SQL Server 構成マネージャーを起動します。
左側のウィンドウで、[SQL Server サービス] を選択します。
右側のペインで、データベース エンジンのインスタンス名を確認します。
- SQL SERVER (MSSQLSERVER) は、SQL Server の既定のインスタンスを示します。 既定のインスタンスの名前はコンピューター名です<>。
- SQL SERVER (<インスタンス名>) は、SQL Serverの名前付きインスタンスを示します。 名前付きインスタンスの名前は、コンピューター名>\インスタンス名です。<><
サーバーのIPアドレスを取得する
次の手順に従って、SQL Server のインスタンスをホストしているコンピューターの IP アドレスを取得できます。
[スタート] メニューで、[実行] を選択します。 [実行] ウィンドウに「cmd.exe」と入力して [OK] をクリックします。
コマンドプロンプトウィンドウで、ipconfig/allと入力し、Enterキーを押してください。 IPv4 アドレスと IPv6 アドレスをメモしておきます。
注:
SQL Server は、IP バージョン 4 プロトコルまたは IP バージョン 6 プロトコルのいずれかを使用して接続できます。 ネットワークでは、どちらか一方または両方を許可できます。
インスタンスの TCP ポートを取得する
ほとんどの場合、TCP プロトコルを使用して、別のコンピューター上のデータベース エンジンに接続します。 インスタンスのTCPポートを取得するには、次の手順に従います。
SQL Server を実行しているコンピューターで SQL Server Management Studio を使用し、SQL Server のインスタンスに接続します.。 [オブジェクト エクスプローラー]で[管理]、[SQL Server ログ] の順に展開し、現在のログをダブルクリックします。
ログ ファイル ビューアーで、ツール バーの [フィルター] を選択します。 [メッセージに含まれるテキスト]ボックスで、「 サーバーがリッスンしている」と入力し、[フィルターの適用] を選択して、[OK] を選択 します。
"サーバーが [any' <ipv4> 1433] でリッスンしています" のようなメッセージが一覧表示されます。
このメッセージは、SQL Server のインスタンスがこのコンピューター (IP バージョン 4) および TCP ポート 1433 上のすべての IP アドレスをリッスンしていることを示します。 (TCP ポート 1433 は、通常、データベース エンジンまたはSQL Serverの既定のインスタンスによって使用されるポートです。このポートを使用できるのは、SQL Serverのインスタンスが 1 つだけです。SQL Serverのインスタンスが複数インストールされている場合は、一部のインスタンスで他のポート番号を使用する必要があります)。接続しようとしているSQL Server インスタンスで使用されるポート番号をメモします。
注:
- IP アドレス 127.0.0.1 がおそらく一覧表示されます。 ループバック アダプター アドレスと呼ばれます。 同じコンピューター上のプロセスのみが、IP アドレスを使用して接続できます。
- テキスト エディターで、SQL Server のエラー ログを表示することもできます。 エラー ログは、既定で Program Files\Microsoft SQL Server\MSSQL.n\MSSQL\LOG\ERRORLOG ファイルと ERRORLOG.n ファイルにあります。 詳細については、「SQL Server エラー ログの表示」を参照してください。
手順 1: インスタンスが起動していることを確認する
オプション 1: SQLCHECK 出力ファイルを使用する
- "SQL Server 情報" の SQLCHECK 出力ファイルをSearchします。
- "興味のあるサービス" というタイトルのセクションの [名前] 列と [インスタンス] 列 (名前付きインスタンスの場合) で SQL Server インスタンスを見つけ、[開始済み] 列でその状態を確認します。 値が True の場合、そのサービスは起動しています。 それ以外の場合、そのサービスは現在起動していません。
- サービスが起動していない場合は、SQL Server 管理スタジオ、SQL Server Configuration Manager、PowerShell、または Services アプレットを使用して、サービスを開始します。
オプション 2: SQL Server Configuration Manager を使用する
インスタンスが起動していることを確認するには、SQL Server Configuration Manager で [SQL Server サービス] を選択し、SQL Server インスタンスのシンボルをチェックします。
- 緑色の矢印は、インスタンスが起動していることを示します。
- 赤い四角形は、インスタンスが停止していることを示します。
インスタンスが停止している場合は、インスタンスを右クリックして [開始] を選択します。 すると、サーバー インスタンスが起動し、インジケーターが緑色の矢印になります。
オプション 3: PowerShell コマンドを使用する
PowerShell で次のコマンドを使用すると、システム上の SQL Server サービスの状態を確認できます。
Get-Service | Where {$_.status -eq 'running' -and $_.DisplayName -like "sql server*"}
次のコマンドを使用して、エラー ログ ファイルで文字列 "SQL Server is now ready for client connections. This is an informational message; no user action is required." (SQL Server はクライアント接続の準備ができました。これは情報メッセージです。ユーザー 操作は必要ありません。) という文字列を検索します。
Get-ChildItem -Path "c:\program files\microsoft sql server\mssql*" -Recurse -Include Errorlog | Select-String "SQL Server is now ready for client connections."
手順 2: SQL Server Browser サービスが起動していることを確認する
注:
この手順は、名前付きインスタンスとの接続の問題をトラブルシューティングする場合にのみ必要です。
オプション 1: SQLCHECK 出力ファイルを使用する
- "SQL Server 情報" の SQLCHECK 出力ファイルをSearchします。
- "興味のあるサービス" というタイトルのセクションの [名前] 列で SQLBrowser を検索し、[開始] 列でその状態を確認します。 値が True の場合、そのサービスは起動しています。 それ以外の場合、そのサービスは現在実行されていないため、サービスを開始する必要があります。 詳細については、「SQL Server サービスの開始、停止、一時停止、再開、再起動」を参照してください。
オプション 2: SQL Server Configuration Manager を使用する
名前付きインスタンスに接続するには、SQL Server Browser サービスが起動している必要があります。 SQL Server Configuration Manager で SQL Server Browser サービスを見つけて、それが起動していることを確認します。 起動していない場合は、サービスを開始します。 既定のインスタンスでは、SQL Server Browser サービスは必要ありません。
ご利用の環境で SQL Server Browser サービスを使用する方法の詳細については、「SQL Server Browser サービス」を参照してください。
SQL Services の停止と開始の詳細については、「SQL Server サービスの開始、停止、一時停止、再開、再起動」を参照してください。
注:
ご利用の環境で SQL Server Browser サービスを実行できない場合は、「SQL Server Browser サービスを使用せずに SQL Server の名前付きインスタンスに接続する」を参照してください。
手順 3: 接続文字列内のサーバー名を確認する
接続文字列に間違ったサーバー名が指定された場合に、エラーが発生することがよくあります。 サーバー名が、前の手順で取得したサーバー名と一致していることを確認します。
注:
SQLCHECK ツールを使用している場合は、出力ファイルの [コンピューター情報] セクションで NetBios 名/FQDN 値を確認します。
- 接続文字列の例については、「SQL Server の接続文字列」を参照してください。
- 詳細な例については、「SQL クライアント プログラミングのホームページ」の「ADO.NET を使用して SQL に接続する概念実証」を参照してください。
手順 4: クライアント コンピューター上でエイリアスを検証する
エイリアスは、別名を使用して SQL Server に接続する場合や、ネットワーク内で名前解決の問題がある場合に、クライアント環境でよく使用されます。 エイリアスを作成するには、SQL Server Configuration Manager またはクライアント ネットワーク ユーティリティを使用します。 エイリアスが正しくない場合、アプリケーションからの接続が間違ったサーバーに対して行われ、失敗する可能性があります。 以下の方法で、間違ったエイリアスがないか確認します。 また、SQLCHECK などのツールをクライアント コンピューター上で使用して、クライアント コンピューター上のエイリアスやその他のさまざまな接続関連の設定を確認することもできます。
注:
次のオプションは、SQL Server Native Client を使用して SQL Server に接続するアプリケーションにのみ適用されます。
オプション 1: SQLCHECK 出力ファイルを使用する
- SQLCHECK 出力ファイルで、文字列 SQL エイリアスを検索します。 (この文字列は、ファイルの [クライアント セキュリティとドライバー情報 ] セクション内にあります)
- テーブル内のエントリを確認します。 何も存在しない場合は、コンピュータにエイリアスが存在しないことになります。 エントリがある場合は、情報を確認して、サーバー名とポート番号が正しい値に設定されていることを確認します。
出力例:
SQL エイリアス:
Alias Name Protocol Server Name Port 32-bit
---------- -------- ------------ ---- ------
prodsql TCP prod_sqlserver 1430
出力は、ポート 1430 で実行されているというSQL Serverprod_sqlserver
のエイリアスであることを示prodsql
します。
オプション 2: SQL Server 構成マネージャーでエイリアスを確認する
SQL Server 構成マネージャーで、[SQL Server Native Client 構成] を展開し、[エイリアス] を選択します。
接続しようとしているサーバーに対してエイリアスが定義されているかどうかを確認します。
エイリアスが存在する場合は、以下の手順に従ってください。
- エイリアスの [プロパティ ] ウィンドウを開きます。
- [エイリアス名] フィールドの値の名前を変更します (たとえば、サーバー名が MySQL の場合は、名前をMySQL_testに変更します)、接続を再試行します。 接続が機能する場合、エイリアスは正しくなく、不要になった古い構成から取得されている可能性があります。 接続が機能しない場合は、エイリアスの名前を元の名前に戻し、次の手順に進みます。
- エイリアスの接続パラメーターを確認し、正しいことを確認します。 次の一般的なシナリオは、接続の問題を引き起こす可能性があります。
- [サーバー] フィールドの IP アドレスが正しくありません。 IP アドレスが、SQL Server エラー ログ ファイルのエントリと一致していることを確認します。
- [サーバー] フィールドの サーバー名が正しくありません。 例えば、サーバー・エイリアスは正しいサーバー名を指しています。 ただし、サーバー名パラメーターの値が正しくない場合、接続は失敗します。
- パイプ名の形式が正しくありません (名前付きパイプエイリアスを使用すると想定)。
- Mydefaultinstance という名前の既定のインスタンスに接続する場合、パイプ名は \\Mydefaultinstance\pipe\sql\query にする必要があります。
- 名前付きインスタンス MySQL\Named に接続する場合、パイプ名は \\MySQL\pipe\MSSQL$Named\sql\query にする必要があります。
オプション 3: SQL Server クライアント ネットワーク ユーティリティでエイリアスを確認する
- 実行コマンドに cliconfg.exe と入力して、 SQL Server クライアント ネットワーク ユーティリティを開きます。
- オプション 2: SQL Server 構成マネージャーでエイリアスを確認するの手順 2 に従います。
手順 5: ファイアウォールの構成を確認する
既定のインスタンスまたは名前付きインスタンスに応じて、ファイアウォールの構成を確認できます。
注:
ネットワークでサード パーティファイアウォールを使用している場合でも、概念は適用されます。 ただし、SQL Server との通信に必要なポートを許可するようにファイアウォールを構成する方法の詳細については、ネットワーク管理者と連携するか、ファイアウォール製品のドキュメントを参照する必要があります。
SQL Server の既定のインスタンス
既定のインスタンスは通常、ポート 1433 で実行されます。 一部のインストールでは、非標準ポート (1433 以外) を使用して SQL インスタンスを実行することもできます。 ファイアウォールがいずれかのポートをブロックしている可能性があります。 さらにポート番号を確認する場合は、次の手順を実行します。
- SQL インスタンスが起動しているポートを確認する方法については、「インスタンスの TCP ポートを取得する」を参照してください。
-
- SQL Server がポート 1433 をリッスンするように構成されている場合は、クライアントとサーバーの間のネットワーク上のファイアウォールが、そのポートのトラフィックが許可されていることを確認します。 データベース エンジン アクセス用の Windows ファイアウォールの構成を確認し、ネットワーク管理者と連携して必要なソリューションを実装します。
- SQL Server 既定のインスタンスが 1433 を使用されていない場合は、形式
<servername>,<portnumber>
を使用してサーバー名に SQL Server のポート番号を追加し、動作するかどうかを確認します。 たとえば、SQL インスタンス名がMySQLDefaultinstance であり、ポート 2000 で実行されています。 サーバー名を MySQLServer 2000として指定し、動作するかどうかを確認します。- 動作しない場合は、ファイアウォールがポートをブロックしていることを示します。 「データベース エンジン アクセス用の Windows ファイアウォールを構成する」の手順に従うか、ネットワーク管理者と協力してファイアウォール除外リストにポートを追加します。
- 動作する場合は、ファイアウォールによってそのポート経由の通信が許可されていることを示します。 アプリケーションの接続文字列でポート番号とサーバー名を使用するには、接続文字列を変更する必要があります。
SQL Server の名前付きインスタンス
SQL インスタンスが名前付きインスタンスの場合は、動的ポートまたは静的ポートのいずれかを使用するように構成されている場合があります。 どちらの場合も、基になるネットワーク ライブラリは、UDP ポート 1434 を介して SQL Server コンピューターで実行されている SQL Server Browser サービスに対してクエリを実行し、名前付きインスタンスのポート番号を列挙します。 クライアントとサーバーの間のファイアウォールでこの UDP ポートがブロックされている場合、クライアント ライブラリはポート (接続の要件) を特定できず、接続は失敗します。 接続を確認するには、以下のいずれかの方法を使用します。
方法 1: 接続文字列にポート番号を指定して接続を確認します。
- SQL インスタンスが起動しているポートを確認する方法については、「インスタンスの TCP ポートを取得する」を参照してください。
-
<servername\instancename>,<portnumber>
の形式でポート番号をサーバー名に追加して名前付きインスタンスへの接続を試み、接続が成功するかどうかを確認します。 たとえば、SQL インスタンス名が MySQL\Namedinstance で、ポート 3000 で起動している場合は、サーバー名を MySQL\Namedinstance,3000 として指定します。
方法 2: PortQryUI ツールを使用して接続を確認します。
PortQryUI ツールを名前付きインスタンスで使用し、出力結果を確認します。 UDP ポート 1434 がフィルタリングされているというメッセージが表示される場合があります。 このメッセージは、そのポートがネットワーク上でブロックされていることを示しています。 このツールの使用方法については、「SQL Server で PortQryUI ツールを使用する」を参照してください。
SQL Server インスタンスが動的ポートと静的ポートのどちらでリッスンしているかを確認します。 次に、ご利用のシナリオに相当する次の方法を使用します。 不明な場合は、「SQL Server が動的ポートと静的ポートのどちらでリッスンしているかを確認する方法」を参照してください。
- シナリオ 1: 動的ポート。 この場合は、SQL Server Browser サービスが起動していて、クライアントとサーバーの間のファイアウォールで UDP ポート 1434 がブロックされていないことを確認します。 このいずれかを確認できない場合は、SQL Server インスタンスを静的ポートに切り替え、「特定の TCP ポートでリッスンするようにサーバーを構成する」に記載されている手順を使用する必要があります。
- シナリオ 2: 静的ポート設定。 SQL Server Browser が起動していないか、ファイアウォールで UDP 1434 が開いていません。 この場合は、接続文字列に静的ポートを指定し、ファイアウォールがそのポートをブロックしないようにしてください。 詳細については、「 データベース エンジン アクセス用の Windows ファイアウォールの設定」を参照してください。
手順 6: SQL Server で有効になっているプロトコルを確認する
SQL Server の設定によっては、別のコンピューターからデータベース エンジンに接続するには、管理者が手動で接続を有効にする必要がある場合があります。 次のいずれかのオプションを使用すると、SQL Server データベース エンジンへリモートから接続できるように、必要なプロトコルを確認して有効にできます。
オプション 1: SQLCHECK 出力ファイルを使用する
[SQL Server インスタンスの詳細] セクションの SQLCHECK 出力ファイルをSearchし、SQL Server インスタンスの情報セクションを見つけます。
このセクションで、次の表に示す値を見つけて、SQL Server プロトコルが有効になっているかどうかを判断します。
値の名前 意味 詳細情報 共有メモリが有効になっている true と false のいずれにも設定できます。ローカル接続にのみ影響します。 共有メモリ プロトコルを使用した有効な接続文字列の作成 名前付きパイプが有効になっている false の場合、名前付きパイプを使用したローカル接続とリモート接続の両方が失敗します ネットワーク プロトコルの選択 TCP: Enabled false の場合、TCP/IP を使用したローカル接続とリモート接続の両方が失敗します。
注: SQL Server の大半の設定では、サーバーとクライアント間の通信プロトコルとして TCP/IP が使用されます。ネットワーク プロトコルの選択 SQL Server Configuration Manager または SQL Server powerShell を使用して、必要なプロトコルを有効にします。 詳細については、「サーバー ネットワーク プロトコルを有効または無効にする」を参照してください。
注:
プロトコルを有効にした後、変更を有効にするには、データベース エンジンを停止して再起動する必要があります。
オプション 2: SQL Server Configuration Manager を使用する
SQL Server Configuration Manager を使用して別のコンピューターからの接続を有効にするには、次の手順に従います。
- SQL Server Configuration Manage を起動します。
- 左側のウィンドウで、[SQL Server のネットワーク構成] を展開して、接続する SQL Server のインスタンスを選択します。 右側のウィンドウに、使用可能な接続プロトコルが一覧表示されます。 共有メモリは通常有効になっています。 同じコンピューターからのみ使用できるため、ほとんどのインストールでは共有メモリが有効のままになっています。 別のコンピューターから SQL Server に接続するには、TCP/IP を使用します。 TCP/IP が有効になっていない場合は、[TCP/IP] を右クリックし、[有効] を選択します。
- プロトコルの有効設定を変更する場合は、データベース エンジンを再起動します。 左側のウィンドウで、[SQL Server サービス] を選択します。 右側のウィンドウで、データベース エンジンのインスタンスを右クリックし、再起動を選択します。
手順 7: TCP/IP 接続テスト
TCP/IP を使用して SQL Server に接続するには、Windows が接続を確立する必要があります。 次の手順で、ping ツールを使用して TCP 接続をテストできます。
- [スタート] メニューで、[実行] を選択します。 [実行] ウインドウで [cmd] と入力し、[OK] を選択します。
- [コマンド プロンプト] ウィンドウで、
ping
と SQL Server を実行しているコンピューターの IP アドレスを入力します。 以下に例を示します。- IPv4:
ping 192.168.1.101
- IPv6:
ping fe80::d51d:5ab5:6f09:8f48%11
- IPv4:
- ネットワークが正しく構成されている場合、
ping
はReply from <IP address>
を返し、その後にいくつかの追加情報を返します。ping
がDestination host unreachable
またはRequest timed out
を返す場合、TCP/IP が正しく構成されていません。 この時点でのエラーは、クライアント コンピューター、サーバー コンピューター、またはルーターなどのネットワークに関する問題を示しています。 ネットワークの問題のトラブルシューティングについては、「TCP/IP の問題に関する高度なトラブルシューティング」を参照してください。 - IP アドレスを使用して
ping
テストが成功した場合は、コンピューター名を TCP/IP アドレスに解決できるかどうかをテストします。 クライアント コンピューターの [コマンド プロンプト] ウィンドウに、[ping] と SQL Server で実行しているコンピューターの名前を入力します。 たとえば、「ping newofficepc
」のように入力します。 - IP アドレスへの ping は成功するが、コンピューター名への ping が
Destination host unreachable
またはRequest timed out
を返す場合、クライアント コンピューターに以前の名前解決情報がキャッシュされている可能性があります。 DNS (動的名前解決) キャッシュをクリアするには、ipconfig /flushdns
と入力します。 次に、コンピューターの名前で再度 ping を実行します。 DNS キャッシュが空の場合、クライアント コンピューターはサーバー コンピューターの IP アドレスに関する最新の情報を確認します。 - ネットワークが正しく構成されている場合、
ping
はReply from <IP address>
を返し、その後にいくつかの追加情報を返します。 サーバー コンピューターに IP アドレスで正常に ping を実行できるが、コンピューター名で ping を実行したときにDestination host unreachable
やRequest timed out
などのエラーが発生する場合は、名前解決が正しく構成されていません。 詳細については、TCP/IP の基本的な問題のトラブルシューティングの方法を参照してください。 SQL Server への接続には、名前解決の成功は必要ありません。 ただし、コンピューター名が IP アドレスに解決できない場合は、IP アドレスを指定して接続する必要があります。 名前解決は後で修正できます。
注:
Test-NetConnection または Test-Connection コマンドレットを使用して、コンピューターにインストールされている PowerShell のバージョンに従って TCP 接続をテストすることもできます。 PowerShell のコマンドレットの詳細については、「コマンドレットの概要」を参照してください。
手順 8: ローカル接続のテスト
別のコンピューターからの接続の問題をトラブルシューティングする前に、SQL Server を実行しているコンピューターにローカルにインストールされたクライアント アプリケーションから接続できるかどうかをテストします。 ローカル接続により、ネットワークとファイアウォールの問題を回避できます。
この手順には SQL Server Management Studio が必要です。 Management Studio がインストールされていない場合は、「SQL Server Management Studio のダウンロード (SSMS)」を参照してください。
Management Studio をインストールできない場合は、sqlcmd.exe ユーティリティを使用して接続をテストできます。 sqlcmd.exe はデータベース エンジンと共にインストールされます。 sqlcmd.exeの詳細については、「sqlcmd ユーティリティ」を参照してください。
SQL Server にアクセスできるログインを使用して、SQL Server がインストールされているコンピューターにサインインします。 インストール中、SQL Server では、少なくとも 1 つのログインを SQL Server 管理者として指定する必要があります。 管理者がわからない場合は、「システム管理者がロックアウトされているときに SQL Server に接続する」を参照してください。
[スタート] ページで、「SQL Server Management Studio」と入力するか、以前のバージョンの Windows の [スタート] メニューで [すべてのプログラム] を選択し、[Microsoft SQL Server] を選択して、[SQL Server Management Studio] を選択します。
[接続] ドロップダウン メニューで、[データベース エンジン] を選択します。 [認証] ボックスで [Windows 認証] を選択します。 [サーバー名] ボックスに、次のいずれかの接続の種類を入力します。
接続先 型 例 既定のインスタンス <computer name>
ACCNT27
名前付きインスタンス <computer name\instance name>
ACCNT27\PAYROLL
注:
同じコンピューター上のクライアント アプリケーションから SQL Server に接続する場合は、共有メモリ プロトコルが使用されます。 共有メモリはローカルの名前付きパイプの一種であるため、パイプに関連するエラーが発生することがあります。
この時点でエラーが発生した場合は、続行する前に解決する必要があります。 接続してログインできる権限が付与されていない可能性があります。 既定のデータベースが存在しない可能性があります。
注:
一部のエラー メッセージは意図的にクライアントに渡されるため、十分な情報がないと問題のトラブルシューティングを行うことはできません。 これは、SQL Server に関する情報を攻撃者に提供しないようにするためのセキュリティ機能です。 エラーの詳細を表示するには、SQL Serve のrエラー ログを参照してください。
「エラー 18456 ユーザーのログインが失敗」が発生した場合は、オンライン ブックの記事「MSSQLSERVER_18456」のエラー コードに関する追加情報を参照してください。 Aaron Bertrand のブログにも、「エラー 18456 のトラブルシューティング」(外部リンク) にエラー コードの広範な一覧があります。 SSMS (接続できる場合) を使用すると、オブジェクト エクスプローラーの [管理] セクションでエラー ログを表示できます。 それ以外の場合は、Windows のメモ帳プログラムを使用してエラー ログを表示できます。 既定の場所はバージョンによって異なり、セットアップ中に変更できます。 SQL Server 2019 (15.x) の既定の場所は C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Log\ERRORLOG です。
共有メモリを使用して接続できる場合は、TCP を使用して接続をテストします。 名前の前に
tcp:
を指定することで、TCP 接続を強制できます。 例を次に示します。接続先: 種類: 例: 既定のインスタンス tcp:<computer name>
tcp:ACCNT27
名前付きインスタンス tcp:<computer name/instance name>
tcp:ACCNT27\PAYROLL
共有メモリを使用して接続できるが TCP を使用できない場合は、TCP の問題を解決する必要があります。 最も可能性の高い問題は、TCP が有効になっていないということです。 TCP を有効にするには、「手順 6: SQL Server で有効になっているプロトコルを確認する」を参照してください。
管理者アカウント以外のアカウントを使用して接続することが目的の場合は、管理者として接続することから始めます。 次に、Windows 認証ログインまたはクライアント アプリケーションが使用する SQL Server 認証ログインでもう一度接続を試みます。
手順 9: リモート接続をテストする
同じコンピューター上で TCP を使用して接続できたら、今度はクライアント コンピューターから接続を試みます。 任意のクライアント アプリケーションを使用できますが、複雑にならないようにするために、クライアントに SQL Server 管理ツールをインストールします。 インストール後、SQL Server Management Studio を使用してみてください。
- クライアント コンピューターで SQL Server Management Studio を使用し、IP アドレス、コンマ、ポート番号の形式で IP アドレスと TCP ポート番号を使用して接続を試みます。 たとえば、「
192.168.1.101,1433
」のように入力します。 この接続に失敗した場合は、次のいずれかの問題が発生している可能性があります。- IP アドレスの
ping
が機能していません。 これは、一般的な TCP 設定の問題です。 「手順 7: TCP/IP 接続をテストする」セクションに戻ります。 - SQL Server は TCP プロトコルでリッスンしていません。 「手順 6: SQL Server で有効になっているプロトコルを確認する」セクションに戻ります。
- SQL Server は指定したポート以外のポートでリッスンしています。 「TCP ポートを取得する」セクションに戻ります。
- SQL Server の TCP ポートはファイアウォールによってブロックされています。 「手順 5: ファイアウォールの構成を確認する」セクションに戻ります。
- IP アドレスの
- IP アドレスとポート番号を使用して接続できたら、次のシナリオを確認します。
- 1433 以外のポートでリッスンしている既定のインスタンスに接続する場合、接続文字列内でポート番号を使用するか、クライアント コンピューターにエイリアスを作成する必要があります。 SQL Server Browser サービスでは、既定のインスタンスのポートを列挙できません。
- 名前付きインスタンスに接続する場合は、IP アドレス、円記号、インスタンス名の形式でインスタンスに接続を試みます (たとえば、
192.168.1.101\<instance name>
)。この操作で接続できない場合は、ポート番号がクライアントに返されていません。 この問題は、クライアントに名前付きインスタンスのポート番号を提供する SQL Server Browser サービスに関連しています。 解決策を次に示します。- SQL Server Browser サービスを起動します。 手順については、「SQL Server Configuration Manager でブラウザーを起動する」を参照してください。
- SQL Server Browser サービスがファイアウォールでブロックされています。 ファイアウォールで UDP ポート 1434 を開きます。 「手順 5: ファイアウォールの構成を確認する」セクションに戻ります。 TCP ポートではなく UDP ポートを開くように注意してください。
- ルーターで UDP ポート 1434 の情報がブロックされています。 UDP 通信 (ユーザー データグラム プロトコル) がルーターを通過するようには設計されておらず、ネットワークが優先度の低いトラフィックで満たされないようになっています。 UDP トラフィックを転送するようにルーターを設定するか、接続するたびにポート番号を指定します。
- クライアント コンピューターが Windows 7、Windows Server 2008、またはより新しいオペレーティング システムを使用している場合、サーバーからの応答がクエリされたサーバーとは別の IP アドレスから返されるため、クライアント オペレーティング システムは UDP トラフィックをドロップする可能性があります。 このアクションは、"緩やかなソース マッピング" をブロックするセキュリティ機能です。詳細については、オンライン ブックの「トラブルシューティング: タイムアウト期限切れ」の「複数のサーバー IP アドレス」セクションを参照してください。 (この記事は 2008 R2 SQL Serverからの記事ですが、プリンシパルは引き続き適用されます。正しい IP アドレスを使用するようにクライアントを構成することも、接続するたびにポート番号を指定することもできます)。
- IP アドレス (または IP アドレスと名前付きインスタンスのインスタンス名) を使用して接続できたら、コンピューター名 (またはコンピューター名と名前付きインスタンスのインスタンス名) を使用して接続を試みます。 TCP/IP 接続を強制するには、コンピューター名の前に
tcp:
を付けます。 たとえば、 ACCNT27 という名前のコンピューター上の既定のインスタンスでは、tcp:ACCNT27
を使用します。 PAYROLL という名前付きインスタンスの場合は、そのコンピューターでtcp:ACCNT27\PAYROLL
を使用します。 その IP アドレスで接続できるが、そのコンピューター名では接続できない場合、名前解決の問題が発生しています。 「手順 7: TCP/IP 接続をテストする」セクションに戻ります。 - TCP を強制してコンピューター名を使用し接続できたら、TCP を強制せずにコンピューター名を使用して接続を試みます。 たとえば、既定のインスタンスの場合、CCNT27 などのコンピューター名のみを使用します。 名前付きインスタンスの場合、ACCNT27\PAYROLL などのコンピューター名とインスタンス名を使用します。 TCP を強制すると接続できるが、TCP を強制しなければ接続できない場合、クライアントは 名前付きパイプなどの別のプロトコルを使用している可能性があります。 この問題を解決するには、次の手順を実行します。
- クライアント コンピューターで、SQL Server Configuration Manager を使用します。 左側のウィンドウで、[ SQL Native Client version Configuration]\(SQL ネイティブ クライアント <バージョン> の構成\) を展開し、[ クライアント プロトコル] を選択します。
- 右側のウィンドウで、[TCP/IP] が有効になっていることを確認します。 [TCP/IP] が有効になっていない場合は、[TCP/IP] を右クリックして [有効化] を選択します。
- TCP/IP のプロトコル順序が、名前付きパイプ (または古いバージョンの VIA) プロトコルよりも小さいことを確認します。 一般に、共有メモリは順序 1、TCP/IP は順序 2 のままにする必要があります。 共有メモリは、クライアントと SQL Server が同じコンピューターで起動している場合にのみ使用されます。 有効になっているすべてのプロトコルは、成功するまで順番に試行されますが、接続が同じコンピューターにない場合、共有メモリはスキップされます。
手順 10: ユーザーのアクセス許可を確認する
名前付きパイプを使用して接続している場合は、ユーザーが Windows にログインするアクセス許可を持っているかどうかをチェックします。 詳細については、「 名前付きパイプ接続の問題のトラブルシューティング」を参照してください。