今週は、Active Directoryデータベースの障害復旧作業のうち、データベースに残ったゴミ情報を削除する方法について解説する。

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

なぜActive Directoryデータベースにゴミが?

ゴミ情報とは、「実際には存在しないオブジェクトに関する情報が、Active Directoryデータベースに残ってしまった状態」を指す。主として、ドメイン、あるいはドメインコントローラに関する情報が問題になる。

ドメインコントローラをドメインから離脱させる場合、dcpromoコマンドを使って降格するのが正規の手順となる。しかし、ハードウェア障害などの事情でドメインコントローラが突発的にダウンして、かつ元の状態に復帰できないと、正規の手順を経図にドメインコントローラがドメインから消えてしまうことになる。結果として、存在しなくなったドメインコントローラに関する情報が、Active Directoryデータベース「ゴミ」として残る。

ドメインの場合も事情は同じだ。本来、ドメインを詳説させる際にはドメインコントローラを1台ずつ順番に降格して、すべてのドメインコントローラを消滅させた時点でドメインも消滅するのが正規の手順となる。ところが、ハードウェア障害などの原因で突発的にドメインコントローラが消滅して、消滅したドメインの「ゴミ」が残る可能性がある。

Active Directoryのゴミを取り除く手順

そこで、こうした事態に見舞われた場合にntdsutilコマンドを使用して、消滅したドメイン、あるいはドメインコントローラに関する情報を削除できるようになっている。

ただし、実際に稼働しているドメインやドメインコントローラの情報を間違って削除してしまうとおおごとだ。そこで、消滅して「ゴミ」だけが残されているドメイン、あるいはドメインコントローラがどれなのかを、きちんと確認してから作業に取りかからなければならない。

なお、ドメインそのものに関するゴミ情報を削除する際には、まず当該ドメインに対応するドメインコントローラのゴミ情報をすべて取り除く必要がある。その後でドメインのゴミ情報を取り除くのが正規の手順だ。これを間違えると、ゴミを削除しようとして新たなゴミを作ってしまう。

ゴミ情報削除の手順は以下のようになる。

  1. コマンドプロンプトで「ntdsutil」と入力して、ntdsutilコマンドを実行する。
  2. プロンプトで、「metadata cleanup」と入力する。この操作により、プロンプトが「metadata cleanup」に切り替わる。
  3. 「connections」と入力して、対象となるドメイン、あるいはドメインコントローラに接続する指示を行う。
  4. 「<接続先サーバ名> に結合しています...ローカルでログオンしているユーザーの資格情報を使って <接続先サーバ名> に接続しました」と表示したら、「q」と入力して、元のmetadata cleanupプロンプトに戻る。
  5. 「metadata cleanup」プロンプトで、「select operation target」と入力する。
  6. 「list domains」と入力する。この操作により、当該フォレストに存在するドメインの一覧を表示する。
  7. 「select domain <番号>」コマンドで、一覧の中から作業対象となるドメインを選択する。たとえば、目的のドメインが5番なら、「select domain 5」となる。
  8. 「list site」と入力する。この操作により、当該ドメインに存在するサイトの一覧を表示する。
  9. 「select site <番号>」コマンドで、一覧の中から作業対象となるサイトを選択する。たとえば、目的のサイトが3番なら、「select site 3」となる。
  10. 「list servers in site」と入力して、当該サイトに存在するドメインコントローラの一覧を表示させる。
  11. 「select server <番号>」コマンドで、一覧の中から削除対象となるドメインコントローラを選択する。たとえば、目的のドメインコントローラが2番なら、「select server 2」となる。
  12. 「q」コマンドを入力して、metadata cleanupプロンプトに戻る。
  13. 「remove selected server」と入力して、先に選択したドメインコントローラの情報を削除する。その際、いきなり削除を行うのではなく、まず警告メッセージを表示する。
  14. ドメインの情報を削除する場合には、すべてのドメインコントローラの情報を「13.」の手順で削除してから、「remove selected domain」と入力する。こちらも、いきなり削除を行うのではなく、まず警告メッセージを表示する。
  15. 削除作業がすべて完了したら、「q」コマンドを繰り返し入力して上位のプロンプトに戻り、最後にntdsutilコマンドを終了する。