日次の再起動ルーティンで急にSQL Serverが起動しなくなった(起動トラブル):SQL Serverトラブルシューティング(57)(1/2 ページ)
本連載は、「Microsoft SQL Server」で発生するトラブルを「どんな方法で」「どのように」解決していくか、正しい対処のためのノウハウを紹介します。今回は、「日時の再起動ルーティンで、ある日急にSQL Serverのサービスが起動しなくなった場合のトラブル例」を解説します。
本連載では、「Microsoft SQL Server(以下、SQL Server)」で発生するトラブルについて、「なぜ起こったか」の理由とともに具体的な対処方法を紹介していきます。
トラブル 46(カテゴリー:起動トラブル):日次の再起動ルーティンでSQL Serverのサービスが起動しなくなった
「Windows Server 2012 R2」上に「SQL Server 2016 RTM」をインストールした環境を想定して解説します。
トラブルの実例:日次のルーティンでサーバの再起動を行うシステムの運用管理を行っている。
ある日、普段はすぐ再起動されるはずのSQL Serverが正常起動しなくなり、アプリケーションにエラーが発生してしまう事態になった。SQL ServerのERRORLOGが生成されていないので、SQL Serverのサービスそのものから起動していないようだ。
このシステムはクラスタ化やミラーリング、可用性グループなどの可用性向上施策までは必要のないレベルの重要度と設定しているが、当日の業務進行には必要。代わりがないので、本日中に本システムでサービス起動を行う必要がある。
トラブルの原因を探る
今回の事例は、「これしかない」システムを当日中に復旧させる必要があるシステムのトラブル例です。サーバにはSQL ServerのERRORLOGが作成されていなかったので、サービスそのものから起動していないことがまず分かりました(図1)。
ただしERRORLOGに出力がないので、どのタイミングで起動に失敗しているのかが分かりにくい状況です。サービスやOSの再起動を行ってもトラブルは解決しませんでした。
そこで、サービスの問題なのか、SQL Serverの実行プログラムの問題なのかを切り分けるために「コマンドラインからの起動」を試します。
SQL ServerはWindowsのサービスとして実行されるプログラムですが、その裏側では「Service Control Manager」呼ばれるコンポーネントからSQL Serverのプログラム本体である「sqlservr.exe」へ起動指令が送られることで起動が実行されます。これを手動で行ってみます(図2)。
コマンドラインからサービスを介さずに実行することで、サービスからsqlservr.exeへ起動指令を出す際の問題なのか、sqlservr.exeそのものの起動の問題なのかを切り分けられます。図2では、「sqldk.dll」がないので起動できないというエラーメッセージから、sqlservr.exeの起動プロセスに原因があることが分かりました。
Windowsの実行プログラム(拡張子:.exe)は、以下の起動プロセスを経て実行されます。
- Windowsが、起動したプログラムが“起動に適したフォーマット(Portable Executable)”になっているかどうかを確認する
- プログラムをメインメモリ上へロードする
- 必要なライブラリ(DLL)を適宜ロードする
- CPUがプログラムを1行ずつ実行する
今回のトラブルは、他のプログラムやOSそのものの動作に問題はありませんでした。ですから(1)(2)のプロセスであるプログラム実行環境には問題はありません。図2の通り、(3)のプロセスで止まってしまったことになります。
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とでは大きく異なる点がありますので、それぞれについても確認しておきましょう。