SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けに、EnterpriseZine Day、Security Online Day、DataTechという、3つのイベントを開催しております。それぞれ編集部独自の切り口で、業界トレンドや最新事例を網羅。最新の動向を知ることができる場として、好評を得ています。

直近開催のイベントはこちら!

EnterpriseZine編集部ではイベントを随時開催しております

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けの講座「EnterpriseZine Academy」や、すべてのITパーソンに向けた「新エバンジェリスト養成講座」などの講座を企画しています。EnterpriseZine編集部ならではの切り口・企画・講師セレクトで、明日を担うIT人材の育成をミッションに展開しております。

お申し込み受付中!

SQL Server 2012 Deep Dive

データベース整合性チェックを助ける DBCC CHECKDB

第5回

はじめまして。Premier Field Engineering 部の笹木です。SQL Server にはデータベースの整合性をチェックするための DBCC CHECKDB コマンド(以下 DBCC CHECKDB) があり、多くのシステムで定期実行されているのではないかと思います。メンテナンスプランを使えばGUIでも簡単に実行でき、問題の有無や破損しているページを報告してくれるDBCC CHECKDBですが、そのコマンド内でどのようなチェックを行っているかを意識することは少ないと思います。しかし、内部でどのような処理を行っているかを把握しておけば、納得感のある対処ができるかもしれません。今回は、データベースを守るためにひっそりとイイ仕事をしているDBCC CHECKDBに迫ってみたいと思います。

データの整合性を確保する

 データベースを運用する上で最も壊れやすいコンポーネントはディスクサブシステムだ(注1)、という言葉を何度か見聞きしたことがあります。頻繁なバックアップを行ったり、局所的な復旧を可能にしたりと壊れても問題を小さくする対処はできたとしても、データ自体の破損や整合性が合わない状態というのは長い年月データベースを運用していると、どうしても避けられない問題だと思います。

 しかも、データ整合性に何か問題が発生したとしても通常はデータ破損したタイミングで検知することはできず、そのデータを実際に使うタイミングで初めて問題があることが分かります。

 たとえば、毎年3月31日にしか実行されない年次バッチでのみ参照されるテーブルが存在し、且つそのテーブルデータが破損したとします。テーブルデータの破損が4月1日に発生した場合、約1年間そのテーブルはアクセスされないためデータ破損が起こったことが検知されません。そして、翌年の3月31日に年次バッチを実行して初めてデータ破損が発生していることに気付く、という不幸な状態に陥るかもしれません。

 上記はかなり極端な例ですが、もし定期的にデータの整合性をチェックしていたら、実際に年次バッチを実行する数か月も前から余裕を持って対処でき、業務処理が滞るのを避けられるかもしれません。そのため、「データ不整合を完全に発生させなくする」というのは現実的ではありませんが、「データ不整合が例え発生しても早期に発見し業務影響を最小限に抑える」というスタンスが重要であり、DBCC CHECKDBが大きな役割を果たします。

 (注1) ここでのディスクサブシステムとはストレージ製品のことだけを指しているのではなく、デバイスドライバやネットワーク、OSのファイルシステムも含みます。

DBCC CHECKDBコマンドは何を行っているのか

 DBCC CHECKDB はとても簡単なコマンドですが、内部ではデータベースの整合性を確保するためにとても多くのチェックを行っています。実行すると対象データベースに対する以下の処理が順に行われます。(注2)

  •  FILESTREAMに対するチェック
  •  DBCC CHECKALLOC 同等の処理
  •  不整合の修復 (修復オプションが指定されている場合)
  •  システムテーブルに対するチェック
  •  不整合の修復 (修復オプションが指定されている場合)
  •  テーブル、ビューに対する DBCC CHECKTABLE 同等の処理
  •  不整合の修復 (修復オプションが指定されている場合)
  •  SQL Server Service Broker に対するチェック
  •  DBCC CHECKCATALOG 同等の処理
  •  インデックス付きビューやXMLインデックスに対するチェック

 上記の通り、DBCC CHECKDBは実際にはDBCC CHECKALLOCや DBCC CHECKTABLEといった他の管理コマンドと同様のチェックを含んでいます。つまり、たくさんのコマンドを実行する替わりに1つのコマンドでマルッとデータベースの整合性を確保しようとするのがDBCC CHECKDBなのです。

 DBCC CHECKDBの実行結果は全ての処理が完了したタイミングで出力されるため途中経過は分かりませんが、動的管理ビュー sys.dm_exec_requests の 『command 列』を参照することで内部のどの処理を実行しているかを確認できます。以下は command 列に表示される値とどのような状態にあるかをまとめたものです。

 また、sys.dm_exec_requests ビューの『percent_complete列』を参照することで処理内での進行状況の目安にできます。例えば以下の場合、各テーブルの整合性チェックを行う処理(DBCC TABLE CHECK) が全体の約65% まで完了した状態であることが分かります。

 (注2) DBCC CHECKDBは SQL Server のバージョンによってチェックの内容に違いがある場合があります。この内容は SQL Server 2012 RTM を基にしています。

次のページ
テーブル、インデックスの整合性チェック

この記事は参考になりましたか?

  • Facebook
  • Twitter
  • Pocket
  • note
SQL Server 2012 Deep Dive連載記事一覧

もっと読む

この記事の著者

笹木幸一郎(ササキコウイチロウ)

日本マイクロソフト株式会社 / Microsoft Corporation Global Black Belt Analytics Technology Lead   SQL Server を中心としたデータプラットフォーム製品のサポート経験を経て、本社の製品インキュベーション組...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

EnterpriseZine(エンタープライズジン)
https://enterprisezine.jp/article/detail/4316 2012/10/31 00:00

Job Board

AD

おすすめ

アクセスランキング

アクセスランキング

イベント

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けに、EnterpriseZine Day、Security Online Day、DataTechという、3つのイベントを開催しております。それぞれ編集部独自の切り口で、業界トレンドや最新事例を網羅。最新の動向を知ることができる場として、好評を得ています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング