データを収集して SQL Server の接続に関する問題をトラブルシューティングする
この記事は、特定のカテゴリに基づいて関連する質問をすることで、SQL Server 接続の問題の根本原因を特定するのに役立ちます。 SQL Server の接続の問題をトラブルシューティングするための前提条件とチェックリスト記事には収集する最も重要な項目が含まれていますが、この記事の質問は、接続の問題の原因を絞り込んで効果的にトラブルシューティングするのに役立ちます。
Note
すべての質問がすべての問題に適用されるわけではありません。 ただし、これらの質問は、接続の問題をトラブルシューティングする方法を検討する際に役立ちます。
この記事で提供されている情報を使用して、問題の正確な性質をゼロインできるようになったら、エラーの種類については、「 SQL Server での一貫性のある認証の問題の概要 を参照してください。
データの収集方法
データを収集するには、 Problem Steps Recorder (PSR)、 Network トレース、 NETLOGON トレースなどのツールを使用できます。 このセクションでは、これらすべてのツールの組み合わせをインストールして構成する詳細な手順について説明します。
クライアント コンピューターとサーバー コンピューターの両方で、次の手順を同時に実行します。 アプリケーションが 3 層または n 層のアーキテクチャの場合は、中間サーバーでもインストールを実行します。
影響を受けるすべてのコンピューターに WireShark をインストールするか、組み込みの
NETSH
コマンド (Windows 2008 以降のバージョン) を使用します。 再起動は必要はありません。次のコマンドを実行して、クライアントとすべてのサーバーで NETLOGON デバッグ ログを有効にします。
NLTEST /DBFLAG:2080FFFF
可能であれば、次のいずれかの手順を実行します。
- クライアント コンピュータを再起動します。
- ユーザーにログオフしてもう一度ログインするように依頼します。
- クライアント アプリケーションを閉じてから再度開きます。
クライアント コンピューターで、 Problem Steps Recorder (psr.exe) を起動し、 [レコードの開始] を選択。
このツールは、問題の前にあるすべてのユーザー アクションを正確にキャプチャし、結果を.zip ファイルに保存します。
すべてのコンピューターでネットワーク キャプチャを開始します。
NETSH を使用している場合は、
NETSH TRACE START CAPTURE=YES TRACEFILE=C:\TEMP%computername%.ETL
コマンドを実行します (適切なファイル名またはパス名を使用します)。IPCONFIG /FLUSHDNS
コマンドを実行して、すべてのコンピューターでドメイン ネーム システム (DNS) キャッシュをフラッシュします。NBTSTAT /RR
コマンドを実行して、すべてのコンピューターの NETBIOS キャッシュをクリアします。KLIST purge
コマンドを実行して、クライアント Kerberos チケットを消去します。KLIST -li 0x3e7 purge
コマンドを実行して、各サーバーのチケットをクリアします。Note
コマンドを入力します。 ハイフンが長い (em) ダッシュに変換される可能性があるため、コマンド ラインにコピーして貼り付けないでください。
KLIST
では、大文字と小文字が区別されます。問題を再現します。
psr.exe記録を停止します。
ネットワーク キャプチャを停止します。 わかりやすい名前を使用して、NETSH:
NETSH TRACE STOP
コマンドを実行して、記録されたファイルを保存します。 たとえば、ファイルの名前は、SQLProd01.netmon.cap にすることができます。コマンド プロンプトが再び表示されるまで待ってから、ウィンドウを閉じます。 プロンプトが表示される前に、コマンド プロンプト ウィンドウを閉じないでください。
NETLOGON ログを C:\windows\debug\netlogon.log にコピーし、ファイルにわかりやすい名前を付けます。 たとえば、 SQLProd01.netlogon.log。
NLTEST /DBFLAG:0x0
コマンドを実行してログ記録を無効にします。
データを収集して問題を分類する
次の一連の質問は、問題が該当するカテゴリを見つけるのに役立つよう設計されているため、トラブルシューティングの正しい方向に進むことができます。 関連する質問の各ドロップダウンを選択します。
特定の質問に進む前に、SQL Server 接続に必要なすべての前提条件が満たされていることを確認してください。 前提条件の詳細については、「 SQL Server の接続に関する問題をトラブルシューティングするための前提条件とチェックリストを参照してください。
より広範な観点の質問
- この問題はデータベース接続にのみ影響しますか、それとも Web とファイル共有の接続にも影響しますか? 多くのケースは、データベース サーバー上で発生するため、SQL Server チームに報告されます。 ただし、問題がデータベースにまったく関連していない可能性があり、より一般的な Windows または Active Directory のサポートが必要になる場合があります。
- ユーザー ドメイン、クライアント ドメイン、またはサーバー ドメインが異なる場合、信頼関係は存在しますか? 外部、フォレスト、一方向、双方向、またはなしですか?
- すべてのリソースが同じドメインにある場合、接続は正しく機能しますか?
- 問題は断続的か定期的か、それとも一貫していますか?
- この問題は、複数のユーザーがアプリケーションを使用している場合にのみ発生しますか? より多くのユーザーがそれを使用している場合、それはより頻繁に発生しますか?
- この問題は、特定の時刻または特定の曜日にのみ発生しますか?
- この問題は、バックアップが作成されているか、データベースのインデックスが再作成されている場合にのみ発生しますか?
- この問題は複数のサーバーに影響しますか?
- この問題は n ノード クラスター内の 1 つのノードにのみ影響しますか? "はい" の場合は、その特定のノードの再構築を検討する方が効率的な場合があります。
- この問題は、複数のクライアントのうち 1 つまたは 2 つのクライアントにのみ影響しますか? "はい" の場合は、再構築の方が効率的です。
- この問題は名前付きパイプにのみ影響し、TCP (またはその逆) には影響しませんか?
- この問題は、SQL Server ログインと TCP/IP を使用するときに発生しますか?
- 失敗したケースと比較できる作業ケースは存在しますか? システムはどのように異なりますか?
クライアント コンピューター
次の質問を使用して、クライアント コンピューターのさまざまなコンポーネントに関するデータを収集します。 このデータは、問題を特定するのに役立つ場合があります。
オペレーティング システム名、エディション、バージョン (WinVer) は何ですか?
SQL Server ドライバーまたはプロバイダーの名前とバージョンは何ですか?
コンピューター名と IP アドレスは何ですか?
コンピューターのドメインの状態は何ですか? ドメインに参加している場合、ドメイン名は何ですか?
どのアプリケーションランタイム環境が使用されますか? たとえば、インターネット インフォメーション サービス (IIS)、Windows フォーム、Web Sphere、SQL Server Integration Services (SSIS) ジョブなどです。
どのアプリケーション言語が使用されますか?
使用される接続文字列は何ですか?
サーバーへの接続に使用される認証の種類は何ですか? たとえば、New Technology LAN Manager (NTLM)、Kerberos、SQL、Azure Active Directory (AAD) などです。
アプリケーションがサーバーまたはサービスの場合、ユーザー資格情報はバックエンド データベースに委任されますか?
制約付き委任は使用されますか?
アプリケーション サービス アカウントとドメインとは
どの種類のサービスが使用されますか? 物理、仮想、またはクラウドですか? たとえば、IaaS、Web アプリ、Web ロール、Power BI などです。
クライアント ドライバーとは Java Database Connectivity (JDBC) ですか、それとも Linux または Mac で実行されますか?
Note
ワークフローは現在、より多くの Windows 指向です。
この問題は、SQL Native Client 以降のドライバー (またはその逆) ではなく、
Provider=SQLOLEBD
やDriver={SQL Server}
などのレガシ プロバイダーにのみ影響しますか?この問題は、1 つのアプリケーションまたは複数のアプリケーションでのみ発生しますか?
ユニバーサル データ リンク (UDL) ファイルは、他の SQL Server ベースのサーバーに接続しようとすると失敗しますか、それとも問題のあるサーバーのみに失敗しますか?
ユーザーは SQL Server ベースのサーバーにログインし、SQL Server Management Studio (SSMS) を使用して接続を試みますか?
この問題は、完全修飾ドメイン名 (FQDN) (またはその逆) を使用する場合ではなく、サーバーの NETBIOS 名を使用する場合にのみ発生しますか? IP アドレスを使用して機能しますか?
Windows 10 Enterprise Edition を実行しているクライアントでは、Credential Guard 機能が有効になっていますか? "はい" の場合、これは完全な委任シナリオに影響する可能性があります。
ログ情報
ログ ファイルに関するデータを収集するには、次の質問を使用します。
- 呼び出し履歴の正確なエラー メッセージは何ですか?
- ログは SQL Server ERRORLOG および ERRORLOG.1 ファイルから収集されましたか?
- アプリケーション イベント ログはクライアントとサーバーから収集されましたか?
- クライアント アプリケーションのログ ファイルと構成ファイルは収集されましたか? たとえば、 web.config、rsreportserver.config、*.config、または *.ini。
- コンピューター、ルーターなどを表示するネットワークを視覚的に表現できますか?
新規または既存の問題
問題が最近開発されたかどうか、またはしばらくの間持続しているかどうかを判断することを指します。
- 問題は常に存在していたか (新規インストール)、またはアプリケーションが最近壊れる前にしばらく正しく機能していましたか?
- アプリケーションが正常に機能していた場合、環境にどのような変更が加えられましたか? たとえば、インストールされた更新プログラム、アップグレードされたドメイン コントローラー、ファイアウォール設定の変更、使用停止されたドメイン コントローラー、ドメイン内の別の OU への移動などです。
サーバー コンピューター
リンク サーバーの場合は、中間層サーバーとバックエンド サーバーの両方のサーバー情報を収集します。 IIS から SQL への委任の問題の場合は、 web.config 認証設定など、Web サーバー上の情報を収集します。
- オペレーティング システム名、エディション、バージョン (Winver) の名前は何ですか?
- データベースの名前とバージョンは何ですか?
- コンピューターの名前は何ですか?
- IP アドレスは何ですか?
- コンピューターがドメインに参加している場合、ドメイン名は何ですか?
- SQL Server サービス アカウントとドメインとは
- SQL Server インスタンスの名前は何ですか?
- 有効になっているプロトコルはどれですか?
- サーバーがリッスンするポートはどれですか?
- サーバー パイプの名前は何ですか? この情報は、エラー ログで確認できます。
- どの種類の環境が使用されますか? 物理、仮想、またはクラウドですか? たとえば、IaaS (Azure 仮想マシン (VM) の SQL) や PaaS (Azure SQL Database、SQL Managed Instance (MI)) などです。
- データベースはスタンドアロン、クラスター化、ミラー化、または Always On を使用してデプロイされていますか?
- フェールオーバー パートナー名と IP アドレスは何ですか?
- 仮想クラスター名またはリスナー名とポートは何ですか?
- 仮想 IP またはリスナー IP はどれですか?
- データベースはどのオペレーティング システムにインストールされていますか? Windows、Linux、Mac のどちらですか? これはデータ収集に影響を与える可能性があります。
- データベースの場所は何ですか? Azure に含まれますか?
- 最新の Service Pack と累積的な更新プログラムに関するサーバーの現在の状態は何ですか? 既に修正されている問題をデバッグしても意味がありません。
- トランスポート層セキュリティ (TLS) 1.2 をサポートするために SQL Server は最近アップグレードされましたか? クライアントも更新されましたか? TLS 1.0 がオフになっていますか?
- SQL Server サービスの現在の状態は何ですか? 実行されていますか?
- SQL Browser サービスの状態は何ですか? 実行されていますか?
- サービス アカウントに対する問題の具体的な内容は何ですか? 別のサービス アカウントを使用してサーバーを実行しても問題は解決されますか?
ユーザー情報
次のユーザーの詳細を収集します。
- ユーザーはクライアント コンピューターに直接ログインするか、リモートでアクセスしますか? たとえば、ユーザーはブラウザーを使用していますか?
- ユーザーは SQL エージェントなどのサービスですか? プロセス ID が使用されているか、保存されている資格情報が使用されていますか?
- クライアント アプリケーションへの接続に使用される認証の種類は何ですか? Windows、フォーム認証、または AAD ですか?
- ユーザーは統合セキュリティを使用してサーバーに接続しますか?
- ユーザー名とドメイン名は何ですか?
ユーザーがクライアント アプリケーションにリモート接続している場合は、次の詳細を収集します。
- コンピューター名と IP アドレスは何ですか?
- コンピューターのドメインに参加していますか? "はい" の場合、ドメイン名は何ですか?
- ユーザーは VPN またはプロキシ サーバー経由で接続していますか? いずれかの方法が直接接続されている場合、問題は発生しますか?
- ユーザーが Web サーバーに接続している場合、サーバーは負荷分散されますか?
- スティッキー セッションまたはセッション アフィニティが使用されていますか?
- ユーザーはターミナル サーバーまたはジャンプ ボックスにログインし、アプリケーションにアクセスしていますか?
- この問題は、特定の組織単位 (OU) のユーザーにのみ影響しますか?
- ユーザー、クライアント、またはサーバーは Active Directory の別の組織単位 (OU) に移動しましたか?
- この問題は管理者以外のユーザーにのみ影響しますか?
- この問題は、特定のドメイン内のユーザーのすべてまたは一部にのみ影響しますか?
関連項目
サードパーティの情報に関する免責事項
この資料に記載されているサードパーティ製品は、マイクロソフトと関連のない他社の製品です。 明示的か黙示的かにかかわらず、これらの製品のパフォーマンスや信頼性についてマイクロソフトはいかなる責任も負わないものとします。