本連載は、「Microsoft SQL Server」で発生するトラブルを「どんな方法で」「どのように」解決していくか、正しい対処のためのノウハウを紹介します。今回は「ユーザーデータベースが破損して起動しなくなった場合の対処方法」を解説します。
本連載では、「Microsoft SQL Server(以下、SQL Server)」で発生するトラブルについて、「なぜ起こったか」の理由とともに具体的な対処方法を紹介していきます。
前回のmasterデータベースに起因した起動トラブルに続いて、今回は「ユーザーデータベース」に起因する起動障害について紹介します。
エラー824は、「SQL Serverのデータが破損している」「データに不整合がある」ときに示されます。SQL Serverは8KBの「ページ」という単位でデータを保存しています。このページ内のチェックサムと実際のデータを付き合わせて、不整合があるとエラー824が出力されます。
また、再起動を行っても現象が解消せず、むしろ悪化していることを考えると、この障害はメモリ上のみで発生した破損ではなく、ディスクに保存されているユーザーデータベースのデータそのものが破損してしまったことが分かります。
ユーザーデータベースが破損してしまったら、あらかじめ取得してあったデータベースのバックアップからリストアします。完全復旧モデルを利用している場合の手順は以下の通りです。
データアクセスの確認には、アプリケーションの動作確認の他に、SQL Serverの機能を使って全体的に問題がないかを確認する「DBCC CHECKDB」を使います。DBCC CHECKDBを実行し、問題がないことを確認することでリストアしたデータベースの整合性が保証されたことになります(図9-3)。
ちなみに、データ不整合エラーであるエラー824は、破損箇所へSQL Serverがアクセスしてはじめて発覚します。そのため、その時点で破損しているのが1カ所だけとは限りません。データベースの他の箇所が壊れている可能性もあります。
エラー824が“今のところ”業務に大きな影響を与えていないとしても、決して放置してはいけません。もし管理領域も壊れていたならば破損がさらに広がってしまいます。早期の対処を推奨します。
筆者は10年以上データベースサポートの仕事をしていますが、これまでに何度かデータベースの破損が業務に大きく影響を及ぼしてしまったケースに遭遇しました。
中には……バックアップさえ取られていないケースもありました。この復旧には大変な労力を要しました。このケースでは、運よく数日前に開発システムへデータを移動したばかりだったので、まずそれを戻して、差分は紙の注文書をデータ化する力業で復旧させたのです。
そのようなことが起こらないよう、バックアップを取ることはもちろんですが、それに加えて、普段から「バックアップが正しく取得されていることを確認」するルーティンを設けることを強くお勧めします。
実は、取得したバックアップが本当に有効であるかを確認するには、「実際にリストアしてみる」しかありません。できれば運用の中に、本番系から開発系へのデータベース移動を組み込んで、「バックアップの有効性を確認する仕組み」も取り入れていただきたいと思います。
この「バックアップを採取していなかったとき」のトラブルシューティングについては、別の回で紹介したいと思います。
ユニアデックス株式会社所属。Microsoft MVP Data Platform(2011〜 )。OracleやSQL Serverなど商用データベースの重大障害や大型案件の設計構築、プリセールス、社内外の教育、新技術評価を行っていた。2016年4月よりIoTビジネス開発の担当となり、新しい仕事に奮闘中。ストレッチをして柔らかい身体を手に入れるのが当面の目標。
ユニアデックス株式会社所属。入社以来 SQL Serverの評価/設計/構築/教育などに携わりながらも、主にサポート業務に従事。SQL Serverのトラブル対応で社長賞の表彰を受けた経験も持つ。休日は学生時代の仲間と市民駅伝に参加し、銭湯で汗を流してから飲み会へと流れる。
Copyright © ITmedia, Inc. All Rights Reserved.