特定のサーバからのみSQL Serverへアクセスできなくなった(起動トラブル):SQL Serverトラブルシューティング(19)
本連載は、「Microsoft SQL Server」で発生するトラブルを「どんな方法で」「どのように」解決していくか、正しい対処のためのノウハウを紹介します。今回は「特定のサーバからのみSQL Serverへアクセスできない場合の対処方法」を解説します。
本連載では、「Microsoft SQL Server(以下、SQL Server)」で発生するトラブルについて、「なぜ起こったか」の理由とともに具体的な対処方法を紹介していきます。
トラブル 14(カテゴリー:起動):特定のサーバからのみSQL Serverへアクセスできなくなった
「Windows Server 2012 R2」上に「SQL Server 2016 RTM」をインストールした環境を想定して解説します。
トラブルの実例:特定のアプリケーションサーバからのみSQL Serverへ接続できなくなった。もちろん、SQL Serverには何も変更を加えていない。
表示されたエラーメッセージには「SQL Serverへの接続を確立しているときにネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないかアクセスできません。インスタンス名が正しいこと、およびSQL Serverがリモート接続を許可するように構成されていることを確認してください。 (provider: TCP Provider, error: 0 - システムのバッファー領域が不足しているか、またはキューがいっぱいなため、ソケット操作を実行できませんでした。) (Microsoft SQL Server、エラー: 10055)」と、接続できなかった旨が記載されていた(図14-1)。ちなみに、Windowsのアプリケーションログ(「イベントビューアー」→「Windows ログ」→「Application」)を確認しても、関連すると思われるエラーは記録されていなかった。
トラブルの原因を探る
エラーメッセージには「キューがいっぱいなため、ソケット操作を実行できませんでした」とあります。まず、netstatコマンド(*1)でTCP接続に関する状況を確認してみます。
netstat -nao
状況を確認すると、かなりたくさんのプロセスがTCPポートを使用していました(図14-2)。
クライアントがTCP通信を行う際は、多くの場合、Windows Serverから動的ポートが割り当てられます。Windows Server 2008以降では、標準で「49152〜65535」が動的ポートの範囲として設定されています。プロセスが使えるポート番号を全て使い切ってしまったら、新たなポート番号が割り当てられなくなります。ポート番号が割り当てられなければTCP通信は開始されず、結果としてSQL Serverに接続できません。
今回の例では、アプリケーションサーバの動的ポートが枯渇してしまったことが原因と推測されます。
解決方法
このトラブルの解決方法は、「クライアント(本例ではアプリケーションサーバ)が使用するTCPのポート番号をきちんと確保する」ことです。不要なプロセスを終了して使えるポートを確保する、あるいはnetshコマンドで、使える動的ポートの範囲を広げる手段があります(*2)。
netsh int ipv4 show dynamicport tcp
netsh int ipv4 set dynamicport tcp start=45536 num=20000
「特定のサーバのみSQL Serverにアクセスできない」場合の解決手順
- SQL Serverへのネットワークや、クライアント側の状況を確認する
- (本例の場合は)動的ポートの範囲を増やす、もしくはポートを使用しているプロセスを終了する
- (本例の場合は)必要に応じてポートを使用しているプロセスの実装を見直す
筆者紹介
内ヶ島 暢之(うちがしま のぶゆき)
ユニアデックス株式会社所属。Microsoft MVP Data Platform(2011〜 )。OracleやSQL Serverなど商用データベースの重大障害や大型案件の設計構築、プリセールス、社内外の教育、新技術評価を行っていた。2016年4月よりIoTビジネス開発の担当となり、新しい仕事に奮闘中。ストレッチをして柔らかい身体を手に入れるのが当面の目標。
椎名 武史(しいな たけし)
ユニアデックス株式会社所属。入社以来 SQL Serverの評価/設計/構築/教育などに携わりながらも、主にサポート業務に従事。SQL Serverのトラブル対応で社長賞の表彰を受けた経験も持つ。休日は学生時代の仲間と市民駅伝に参加し、銭湯で汗を流してから飲み会へと流れる。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 「SQL Server 2016」に搭載される新たなセキュリティ対策を追う
パブリックプレビューが公開されているマイクロソフトのRDB次期版「SQL Server 2016」。特徴の1つとするセキュリティ対策機能のポイントと目指すところをキーパーソンに聞いた。 - そもそも、リレーショナルデータベースとは何か?
データベースを基礎から勉強し理解を深めていくことは簡単なことではありません。本連載では、データベースに対するハードルを少しでも低くするために、初心者の方に必要なデータベースの基本から、障害対策やチューニングといった実践に即した内容までを幅広く解説していきます。今回は、データベースの役割と、それを管理するソフトウェアであるDBMSの基本機能について解説します。【更新】 - データの登録を行うINSERT文
- 複数の条件を指定してSELECT文を実行する
前回は、SELECT文の初歩の初歩を解説しました。今回は、複数の条件を指定して、目的のデータを取り出す方法を解説します(編集部) - Oracle運用の基本「ログ」を理解しよう
本連載では、Oracle Database運用の鍵となるトラブル対処法について紹介していきます。第1回、第2回では情報収集の要となるログについて見ていきます。ログの出力情報は10gと11gとでは大きく異なる点がありますので、それぞれについても確認しておきましょう。