今週は、Active Directoryデータベースの障害復旧作業のうち、データベースの検査・修復について解説する。

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

Active Directoryデータベースの検査

前回の連載で解説したように、Active Directoryデータベースに変更を加える際には、先にログをとってから変更作業を行うようにしている。そのため、耐障害性は比較的高い。しかし、それでも完全とはいいきれず、データベースに論理的矛盾や破損が発生する可能性は残る。

そこで、ntdsutilコマンドを使って、データベースの障害チェックを行えるようになっている。まず、Active Directoryデータベースの内容に論理的矛盾がないかどうかを検査するセマンティクス分析機能を行う際の手順について解説する。

  1. コマンドプロンプトで「ntdsutil」と入力して、ntdsutilコマンドを実行する。
  2. 「Semantic database analysis」と入力する。この操作により、プロンプトが「Semantic database analysis」に切り替わる。
  3. 「go」と入力すると、Active Directoryデータベース(Ntds.dit)に対するセマンティクス分析を開始する。
  4. 分析後にレポートを精製・出力する。出力先は、ntdsutilコマンドを実行したときのカレントフォルダで、ファイル名は「Dsdit.dmp.n」となる(末尾のnは整数で、このコマンドを実行するその都度、1ずつ増える)。このため、コマンド実行前に、レポートを出力させたいフォルダに移動しておくのが望ましい。
  5. 作業が完了したら、「q」(または「quit」)と入力して、ntdsutilのプロンプトに戻る。
  6. 「q」(または「quit」)と入力して、ntdsutilコマンドを終了してコマンドプロンプトに戻る。

なお、Semantic database analysisプロンプトでは、セマンティクス分析以外に利用可能な機能として、以下のものがある。

  • getコマンドを使用すると、Active Directoryデータベースから任意の番号のレコードを取り出すことができる。構文は「get <%d>」で、「%d」に番号を指定する。
  • 詳細モードのオン/オフを切り替えることができる。「verbose on」と入力すると詳細モードがオンになり、「verbose off」と入力するとオフになる。

Active Directoryデータベースの整合性チェック

続いて、Active Directoryデータベースの整合性チェックを行う際の手順について解説する。

  1. コマンドプロンプトで「ntdsutil」と入力して、ntdsutilコマンドを実行する。
  2. 「Files」と入力する。この操作により、プロンプトが「Files」に切り替わる。
  3. 「recover」と入力すると、esentutlコマンドを使用して、ログの内容をすべてデータベースに反映させる。タイミングによっては、ログに記録しただけで、まだデータベースに反映していない操作が残っている可能性があるので、メンテナンス前に必ずrecoverコマンドを実行する必要がある。
  4. recoverコマンドの処理が完了したら、「integrity」と入力する。すると、esentutlコマンドを使ってActive Directoryデータベースの整合性チェックを行い、データベースの破損を検出する。
  5. 作業が完了したら、「q」(または「quit」)と入力して、ntdsutilのプロンプトに戻る。
  6. 「q」(または「quit」)と入力して、ntdsutilコマンドを終了してコマンドプロンプトに戻る。

SIDの重複事故解決

Active Directoryでは、個々のオブジェクトに対してSID(Security Identifier)と呼ばれる一尉の識別番号を割り当てて区別を行っている。通常、SIDが同一データベース内で重複する事態は発生しないはずだが、まれに、複数のオブジェクトに対して同じSIDを割り当てる重複事故が発生することがある。その場合の対処手順は以下の通りだ。

  1. コマンドプロンプトで「ntdsutil」と入力して、ntdsutilコマンドを実行する。
  2. 「security account management」と入力する。この操作により、プロンプトが「Security Account Maintenance」に切り替わる。
  3. 「connect to server <サーバのDNS名>」と入力する。この操作により、操作対象となるサーバに接続する。
  4. まず、SIDが重複しているオブジェクトがないかどうかを調べるため、「check duplicate SID」と入力する。この操作により、Active Directoryデータベースを検査して、重複の有無を確認する。
  5. 重複があった場合、同じプロンプトで「cleanup duplicate sid」と入力する。この操作により、重複したSIDを削除して問題を解決する。
  6. 作業が完了したら、「q」(または「quit」)と入力して、ntdsutilのプロンプトに戻る。
  7. 「q」(または「quit」)と入力して、ntdsutilコマンドを終了してコマンドプロンプトに戻る。

なお、これら一連の操作については、「Dupsid.log」というファイル名を持つログファイルを出力する。ログファイルの名前は、ntdsutilのプロンプトで「log file <ファイル名>」と入力することで変更できる。