今週は、Active Directoryデータベースの障害復旧作業のうち、データベースの移動・圧縮について解説する。主として、Active Directoryデータベースを配置しているドライブの空き容量が少なくなった場合に必要な操作だ。

なお、この作業を行うにはディレクトリサービス復元モードでの起動(Windows 2000 Server, Windows Server 2003)、あるいはActive Directory関連サービスの停止(Windows Server 2008)が必要になるが、それについては本連載の第79回を参照していただきたい。

Active Directoryにおけるデータベースとログの役割

Active Directoryデータベースは、「データベース本体」と「ログ」で構成されている。既定値では、Active Directoryデータベースの置き場所は「%SystemRoot%\NTDS」、ファイル名は「Ntds.dit」、ログの置き場所は「%SystemRoot%\NTDS」となっている。

DBMS(Database Management System)などでよく行われているように、Active Directoryでもデータベースに対して行ったすべての操作はログに記録するようになっており、先にログを記録してからデータベースに変更を反映させるようになっている。こうすることで、変更内容に関する記録を残すとともに、操作内容の喪失を防いでいる。

問題は、オブジェクトの数が多くなって、Active Directoryデータベースのサイズが巨大化した場合だ。前述したような理由から、データベース本体だけでなくログもサイズが増えていくし、削除したオブジェクトに関する情報が直ちにデータベースから削除されるわけでもない。そのため、予想以上に空き容量が減る可能性がある。

そして、データベースやログの肥大化によってドライブの空き容量が不足すると、それが原因となって、Active Directoryデータベースに情報を追加できなくなったり、Active Directoryの動作に支障をきたしたりする可能性がある。

Active Directoryデータベースの移動

そこで、ntdsutilコマンドを使ってActive Directoryデータベースの置き場所を移動できるようになっている。一般的な派、十分な空き容量を持ったドライブ(またはパーティション)を用意して、そちらに移動することになるだろう。こうすることで、ドメインコントローラを再構成しなくても、十分な空き容量を持ったドライブを確保して運用を継続できる。

移動の手順は以下の通りだ。なお、移動先のドライブについては事前に確保してあるものとする。

  1. コマンドプロンプトで「ntdsutil」と入力して、ntdsutilコマンドを実行する
  2. 「Files」と入力する。この操作により、プロンプトが「Files」に切り替わる
  3. 「info」と入力する。すると、ディスクの空き容量を分析・報告してレジストリの読み取りを行い、データベースとログのサイズを報告する
  4. データベースを移動するには、「move DB to <移動先フォルダのパス>」と入力する
  5. ログを移動するには、「move logs to <移動先フォルダのパス>」と入力すると、データベースとログを別々の場所に置いておくと混乱しやすいので、同じパスに置く方が良いと思われる
  6. 作業が完了したら、「q」(または「quit」)と入力して、ntdsutilのプロンプトに戻る
  7. 「q」(または「quit」)と入力して、ntdsutilコマンドを終了してコマンドプロンプトに戻る

Active Directoryデータベースの圧縮

次に、Active Directoryデータベースの圧縮について解説する。圧縮といってもZIPなどの形式でファイルをアーカイブするわけではなく、データベース中の不要なレコード情報を削除して、その分の領域を開放する操作のことだ。

  1. コマンドプロンプトで「ntdsutil」と入力して、ntdsutilコマンドを実行する
  2. 「Files」と入力する。この操作により、プロンプトが「Files」に切り替わる
  3. 「compact to <パス名>」と入力して、Active Directoryデータベースを圧縮する。このとき、「<パス名>」で指定したフォルダに、esentutlコマンドで圧縮したファイルを書き出す。オリジナルのデータベースはそのまま維持している点に注意されたい
  4. 「3.」の操作によって圧縮が完了したら、古いデータベースファイルを別の場所にバックアップする
  5. 「3.」の操作によって作成した圧縮後のデータベースファイルを、Active Directoryデータベース用のフォルダに書き戻す
  6. 作業が完了したら、「q」(または「quit」)と入力して、ntdsutilのプロンプトに戻る
  7. 「q」(または「quit」)と入力して、ntdsutilコマンドを終了してコマンドプロンプトに戻る