システムデータベースが破損して起動しない(起動トラブル)SQL Serverトラブルシューティング(13)

本連載は、「Microsoft SQL Server」で発生するトラブルを「どんな方法で」「どのように」解決していくか、正しい対処のためのノウハウを紹介します。今回は「システムデータベースが破損して起動しなくなった場合の対処方法」を解説します。

» 2016年08月26日 05時00分 公開
[内ヶ島暢之ユニアデックス株式会社]

連載バックナンバー

 本連載では、「Microsoft SQL Server(以下、SQL Server)」で発生するトラブルについて、「なぜ起こったか」の理由とともに具体的な対処方法を紹介していきます。

トラブル 08(カテゴリー:起動):システムデータベースが破損して起動しない

 第5回「SQL Serverの起動ログ“ERRORLOG”には、何が記録されているのか?」で、SQL Serverの起動から、使用可能になるまでのプロセスとして、まず「masterデータベース」を起動し、masterデータベースの起動が完了してから個別の「ユーザーデータベース」を起動していくことを解説しました。今回は、システムデータベースの根本となる「masterデータベース」が起動しなくなってしまった場合の事例を紹介します。

トラブルの実例:BSOD(Blue Screen Of Death:OSが致命的なエラーに遭遇した場合に、全面ブルーのエラー表示画面を出力する動作のこと)が発生し、OSごと強制終了された(図8-1)

 その後に再起動したところ問題がないように思えたが、念のためCHKDSKを修復オプション付きで実行してSQL Serverを再起動したところ、「SQL Serverインスタンスの起動に失敗した」と表示されて起動できなくなってしまった。

photo 図8-1 BSOD(ブルースクリーン)の画面例

トラブルの原因を探る

 エラーログを確認すると、「masterデータベースの開始に失敗」しているようです(図8-2)。

photo 図8-2 SQL Serverのエラーログから、起動が失敗する原因は「masterデータベースを開始できない」からであるようだ

 エラーログには、「指定されたファイル(=master.mdf)が見つかりません」と記述されています。masterデータベースの実体ファイルである「master.mdf」というファイルがなくなってしまったようです。

 BSODが発生し、OSのファイルシステムに不整合が起きました。ただしこの時点では、不整合のあるセクターに「master.mdf」の断片が“まだ”残っていたと想定されます。そのために、起動だけはできたのでしょう。

 その後、CHKDSKを行いました。CHKDSKは、ファイルシステムの整合性を保つために修復する機能を持つツールですが、不整合の状況と修復オプションによって、ファイルが消失してしまうことがあります。今回のトラブル事例では、CHKDSKを不整合を修正する「修復オプション」付きで実行した結果、master.mdfは断片しかないので不要と判断されて、消失してしまった──。SQL Serverの起動に必要なファイルである「master.mdf」が存在しないので、結果として起動できなくなってしまったということになります。

解決方法

 SQL Serverのデータファイルに致命的なエラーが発生したら、バックアップからリストアする作業が必要となります。

 今回のトラブル事例では、インスタンスの起動ができないので、その前処理として「システムデータベースの再構築」を行います。手順は以下の通りです。

  1. SQL Serverのセットアップを使って、「システムデータベースの再構築」を行う(*1)
  2. SQL Serverをシングルユーザモードで起動する(図8-3)
  3. masterデータベースのリストアを行う(*2)
  4. SQL Serverを再起動し、ユーザデータベースへのアクセスを確認する
  5. masterデータベースのバックアップ後に加えたシステム変更を再実行する

photo 図8-3 シングルユーザモードでの起動とリストア画面。赤枠で示している通り、シングルユーザモードで動いているため、管理者以外は接続ができない

 このときに必要なのが、「masterデータベース」を含むシステムデータベースのバックアップです。

 データベースのバックアップとして、ユーザデータベースのみを残しているケースを時々見受けます。しかし、今回の事例のような障害が起きたら、かなり大変な事態に陥ります。もしmasterデータベースのバックアップがなかったら、ログイン情報やアタッチされていたデータベース、サーバ構成オプションなどの情報が失われてしまいます。ログインの手動再作成、ユーザデータベースのアタッチなどの復旧手順が極めて煩雑になります。このため筆者は、システムデータベースのバックアップも取ること強く推奨します。

「システムデータベースが破損して起動しない」場合の解決手順

  • (普段から)「システムデータベースのバックアップ」も取るようにしておく
    1. エラーログを確認して、どのファイルが障害の原因か特定する
    2. (本例の場合は)システムデータベースの再作成を行う
    3. masterデータベースのバックアップをリストアする


本トラブルシューティングの対応バージョン:SQL Server 全バージョン

筆者紹介

内ヶ島 暢之(うちがしま のぶゆき)

ユニアデックス株式会社所属。Microsoft MVP Data Platform(2011〜 )。OracleやSQL Serverなど商用データベースの重大障害や大型案件の設計構築、プリセールス、社内外の教育、新技術評価を行っていた。2016年4月よりIoTビジネス開発の担当となり、新しい仕事に奮闘中。ストレッチをして柔らかい身体を手に入れるのが当面の目標。

椎名 武史(しいな たけし)

ユニアデックス株式会社所属。入社以来 SQL Serverの評価/設計/構築/教育などに携わりながらも、主にサポート業務に従事。SQL Serverのトラブル対応で社長賞の表彰を受けた経験も持つ。休日は学生時代の仲間と市民駅伝に参加し、銭湯で汗を流してから飲み会へと流れる。


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。