Directory Servisi (DS) Active Directory (AD) veritabanı (Ntds.dit) için online defragmentation işlemini garbage-collection işleminin bir parçası olarak her 12 saatte bir yapar. Garbage-collection işlemi sırasında öncelikle tombstone süresi dolmuş objeler veritabanından tamamıyla kaldırılır, gereksiz log dosyaları temizlenir ve son olarak da online defragmentation (birleştirme) işlemi yapılır. Fakat bu online defragmentation sırasında veritabanını küçültemez. Yeni nesnelerin ve attribute’ların eklenmesiyle de Active Directory veritabanı (Ntds.dit) zamanla çok büyük boyutlara ulaşabilir. Bu boyutu küçültmenin yolu ise offline defragmentation yapmaktır.

Şekil-1 Offline Defragmentation öncesi veritabanı ve boyutu
Ntds.dit dosyasını offline olarak küçültmek için aşağıdaki adımları sırasıyla gerçekleştireceğiz fakat işlemlere başlamadan önce mutlaka Active Directory yedeği almalısınız. Özellikle tek domain controller’dan oluşan bir yapınız varsa bu çok önemlidir. Compact işlemi sırasında veritabanı bozulabilir ve geri dönülmesi yapılamayabilir!
1. Sunucuyu Directory Services Restore Mode (Dsrepair)’ da başlatın. Bunu, makine açılırken F8’e basarak açılış seçeneklerinden bu modu seçerek yapabilirsiniz. Eğer sunucuya terminal bağlantı ile bağlanmışsanız msconfig yardımıyla bir sonraki açılış modunu Dsrepair olarak belirleyebilirsiniz. Bunun için;
Start > Run’a msconfig yazıp, enter’e basın.
Boot.ini sekmesinde, Boot Options kısmında /SAFEBOOT ve DSREPAIR seçeneklerini seçin. Değişikliği uygulayıp, makineyi yeniden başlatın.

Şekil-2
2. Sunucuya yerel Administrator hesabı ile logon olun.
3. Güvenli modda çalıştığınızı belirten uyarı mesajını OK ile geçin.
4. Start > Run’a Cmd yazarak, command prompt’u çalıştırın.
5. Sırasıyla aşağıdaki koyu olarak belirttiğim komutları yazıp enter’e basın.
C:\> ntdsutil
ntdsutil: files
file maintenance:info
….
file maintenance:compact to c:\temp
6. Defragmentation işlemi başlayacaktır. Ntds.dit dosyasının büyüklüğüne ve bölünme miktarına göre işlem süresi değişebilir. Operation completed successfully in ….. seconds mesajından sonra iki kez quit komutunu kullanarak ntdsutil’den çıkın.
7. C:\Temp altına birleştirdiğimiz yeni Ntds.dit dosyasını %Systemroot%\Ntds klasörü altına taşıyın. Bu işlemi komut satırından aşağıdaki komutla da yapabilirsiniz.
copy c:\temp\ntds.dit %systemroot%\ntds\ntds.dit
8. Sunucuyu normal olarak başlatın (msconfig’den safeboot’u işaretleyerek yaptıysanız bu seçeneği tekrar kaldırın).
Tüm işlemlerin akışı aşağıdaki gibi oluşacaktır. Koyu olanlar girdiğim komutları gösteriyor.
C:\Documents and Settings\mshowtoadm>ntdsutil
ntdsutil: files
file maintenance: info
Drive Information:
C:\ NTFS (Fixed Drive ) free(7.2 Gb) total(19.5 Gb)
D:\ NTFS (Fixed Drive ) free(5.7 Gb) total(14.3 Gb)
DS Path Information:
Database : C:\WINNT\NTDS\ntds.dit – 2.1 Gb
Backup dir : C:\WINNT\NTDS\dsadata.bak
Working dir: C:\WINNT\NTDS
Log dir : C:\WINNT\NTDS – 40.0 Mb total
res2.log – 10.0 Mb
res1.log – 10.0 Mb
edb0128E.log – 10.0 Mb
edb.log – 10.0 Mb
file maintenance: compact to C:\Temp
Opening database [Current].
Executing Command: C:\WINNT\system32\esentutl.exe /d”C:\WINNT\NTDS\ntds.dit” /t”
C:\Temp\ntds.dit” /p /o
Initiating DEFRAGMENTATION mode…
Database: C:\WINNT\NTDS\ntds.dit
Temp. Database: C:\Temp\ntds.dit
Defragmentation Status (% complete)
0 10 20 30 40 50 60 70 80 90 100
|—-|—-|—-|—-|—-|—-|—-|—-|—-|—-|
……………………………………………
Note:
It is recommended that you immediately perform a full backup
of this database. If you restore a backup made before the
defragmentation, the database will be rolled back to the state
it was in at the time of that backup.
Operation completed successfully in 347.406 seconds.
Spawned Process Exit code 0x0(0)
If compaction was successful you need to:
copy “C:\Temp\ntds.dit” “C:\WINNT\NTDS\ntds.dit” and delete the old log files:
del C:\WINNT\NTDS\*.log
file maintenance: quit
ntdsutil: quit
Aşağıdaki şekilde eski ve yeni ntds.dit dosyalarının ilk ve son hallerini görebilirsiniz. Kazanılan disk alanı yaklaşık 500 MB civarında.

Şekil-3
Referanslar
Performing Offline Defragmentation of the Active Directory Database

