نگهداری از پایگاه داده اکتیو دایرکتوری

یکی از قابل توجه ترین مدیریت ها روی Active Directory مدیریت Data Store و به خصوص Database Maintenance (نگهداری پایگاه داده) است. در شرایط عادی، نیاز به مدیریت مستقیم وجود ندارد زیرا مکانیسم های خودکار، به خوبی می توانند عملیات نگه داری از پایگاه داده را انجام دهند. با این وجود در شرایط خاص، ممکن است با استفاده از ابزار ntdsutil نیاز به مدیریت مستقیم وجود داشته باشد. در ادامه ابتدا روش های خودکار توضیح داده می شود و سپس روش استفاده از این ابزار جهت Database maintenance شرح داده خواهد شد.

Garbage Collection
یکی از روش های خودکار Garbage Collection است که پروسه ی آن روی هر دامین کنترلر (DC) هر ۱۲ ساعت یکبار اجرا می شود. با استفاده از این پروسه، فضای خالی در database دوباره باز پس گرفته می شود.

همانطور که پیش تر اشاره شد، زمانی که شیئ از محیط اکتیو دایرکتوری حذف می شود، یک Tombstone (سنگ قبر) از آن باقی می ماند. در واقع attribute به نام isDeleted دارای مقدار True می شود و بیشتر attribute های آن دارای مقدار Null خواهند شد و تنها attribute هایی که برای تشخیص آن نیاز است نگه داشته می شوند. این attribute ها شامل GUID، SID، USN و DN است. در نهایت این Tombstone ها با سایر DC ها Replicate می شود. هر Tombstone دارای یک LifeTime است که تا پایان آن دامین کنترلر آن Tombstone را نگه داری می کند. به صورت پیش فرض این LifeTime برابر ۱۸۰ روز است. اولین پروسه Garbage Collection که پس از به اتمام رسیدن LifeTime اجرا شود، Tombstone را حذف می کند. علاوه بر حذف کردن Tombstone ها، پروسه ی Garbage Collection، فایل های Transaction Log غیر ضروری را حذف می کند. همانطور که گفته شد، Transaction Log ها فایل هایی هستند که تغییرات روی Database ابتدا روی آن ها نوشته می شود و سپس روی Database اعمال می شوند.

امکان ویرایش زمان انجام پروسه Garbage Collection از طریق ADSI Edit وجود دارد و لازم است ویژگی garbageCollPeriod ویرایش شود.

Online Defragmentation

مرحله آخر در Garbage Collection یک فرآیند Online Defragmentation است. در این فرآیند برای بهبود در بهره وری (Efficiency) اکتیو دایرکتوری فضای بین اشیاء و Range پیشین اشیاء در اکتیو دایرکتوری حذف می گردد.

در عملکرد عادی، Database برای اعمال سریع ترین حالت در اعمال تغییرات بهینه شده است و زمانی که یک شیئ از database حذف می شود، Database page ای که شامل آن شیئ است روی حافظه بارگذاری می شود و شیئ از روی حافظه حذف می گردد. زمانی که یک شیئ اضافه می شود، بلافاصله و بودن در نظر گرفتن حالت بهیه ذخیره سازی برای استفاده های آینده اضافه می شود. پس از مدتی (چند ساعت) که تغییرات بلافاصله روی پایگاه داده Commit شدند، Database دیگر بهینه نخواهد بود. به عنوان مثال ممکن است شامل Page های خالی باشد. این فرآنید سبب می شود تا database دوباره به وضعیت بهینه بازگردد. اشیائی که از لحاظ منطقی لازم است کنار یکدیگر باشند زیرا در فراخوانی ها با هم به کار گرفته می شوند در یک Page قرار می گیرند و یا در Page های مجاور قرار می گیرند. یکی از معایب Online Defragmentation آن است که امکان Shrink کردن سایز پایگاه داده را ندارد و اگر حجم عظیمی از اشیاء حذف شده باشند، ممکن است فرآیند Online Defragmentation تعداد زیادی Page خالی ایجاد کند و امکان حذف آن ها را به صورت online ندارد.

این فرآیند به عنوان قسمتی از فرآیند Garbage Collection و پس از آن انجام می شود و پس از اتمام آن یک Log در Directory Service Log ثبت می شود.

Offline Defragmentation

همانطور که پیش تر اشاره شد، فرآیند Online Defragmentation قادر به Shrink کردن حجم database نیست. به صورت عادی، این مسئله قابل توجه نیست زیرا فضایی که از database خالی می شود، برای ساخت اشیاء جدید به کارگرفته می شود. اما در بسیاری از سناریو ها استفاده از Offline Defragmentation توصیه می شود. به عنوان مثال زمانی که نقش Global Catalog یا به اختصار GC از روی یک دامین کنترلر (DC) حذف می گردد، خصوصا زمانی که از یک ساختار چند دامینی استفاده شود، حجم GC می تواند قابل توجه شود. برای انجام Offline Defragmentation مراحل زیر را انجام دهید:

۱) از Active Directory Domain Services مشابه آنچه در Disaster Recovery توضیح داده شده است، نسخه پشتیبان (Back Up) تهیه کنید.

۲) کنسول Services را باز کنید و سپس سرویس Active Directory Domain Services را با تمام سرویس های مرتبط Stop کنید. می توانید در خط فرمان وارد کنید:

net stop ntds

3) خط فرمان را باز کنید و ntdsutil را اجرا کنید.

۴) در ntdsutil prompt وارد کنید: Activate Instance NTDS

5) سپس وارد کنید: files

6) از File Maintenance وارد کنید info. این دستور، اطلاعات مربوط به مسیر و سایز Database فعلی را نمایش می دهد.

۷) وارد کنید: compact to drive:directory و پارتیشن را طوری انتخاب کنید که فضای کافی برای ذخیره سازی Database داشته باشد. بدیهی است اگر directory دارای فاصله در مسیر آن است باید در Quotation قرار گیرد.

۸) فرآیند یک database جدید در مسیر مشخص شده می سازد. این فایل به نام ntds.dit خواهد بود.

۹) در پایان برای خروج quit را دوبار وارد کنید.

۱۰) لازم است فایل ساخته شده جایگزین با فایل اصلی پایگاه داده شود.

۱۱) دامین کنترلر لازم است restart شود.

۱۲)فراموش نکنید اگر به دلیل حذف حجم عظیمی از اشیاء از این فرآیند استفاده می کنید، لازم است روی تمام دامین کنترلر ها به صورت جداگانه انجام شود.

Database Recovery
علاوه بر استفاده ntdsutil در offline defragmentation، از این ابزار در روش های دیگری نیز می توان بهره برد. یکی از آن ها در database recovery است.
Recover کردن از روی Transaction Log

Recover کردن از روی Transaction Log به آن معناست که به صورت Force دامین کنترلر Transaction Log ها را بازگرداند. این عملیات به صورت خودکار در زمان روشن شدن مجدد پس از Force shutdown صورت می گیرد. با این وجود می توان این کار را به صورت دستی انجام داد:

۱) سرور را reboot کنید و وارد Directory Services Restore Mode شوید. به صورت دیگر، می توانید سرویس را Stop کنید. توجه کنید تمام Operation ها روی database با استفاده از ntdsutil نیاز دارند سرویس Stop باشد.

۲) در خط فرمان وارد کنید ntdsutil

3) در ntds prompt وارد کنید: activate Instance NTDS

4) سپس وارد کنید: File

5) در File Maintenance prompt وارد کنید: recover

در Database recovery لازم است این گام اولین گام باشد. پس از این گام می توانید در صورت نیاز مراحل روش های زیر را پیش بگیرد.
Database integrity

بررسی صحت پایگاه داده به آن معنا است که Database در سطح binary (دودویی) برای corruption های احتمالی بررسی می گردد. این فرآیند همچنین تمام سرآیند ها (Headers) و جداول را بررسی می کند. با توجه به آنکه تمام بایت ها بررسی می گردند، زمان انجام این پروسه قدری طولانی است برای انجام این بررسی در File Maintenance prompt وارد کنید: integrity
Semantic Database Analysis

آنالیز مفهومی پایگاه داده بررسی در سطح دودویی نمی باشد و سازگاری (consistency) پایگاه داده را با مفاهیم اکتیو دایرکتوری بررسی می کند و موضوعاتی همانند آنکه تمام اشیاء با GUID معین دارای SID و Metadata های قابل قبول هستند را بررسی می کند. برای انجام این آنالیز:

۱) در خط فرمان وارد کنید ntdsutil

2) در ntds prompt وارد کنید: activate Instance NTDS

3) در ntds prompt وارد کنید: Semantic Database Analysis

4) در Semantic Database Analysis prompt وارد کنید verbos on این دستور سبب می شود ابزار اطلاعاتی را در خصوص آنالیز انجام شده روی اسکرین پرینت کند.

۵) برای شروع وارد کنید go.
جا به جا کردن database و Transaction Log

ابزار ntdsutil می تواند برای جا به جا کردن مسیر فایل های database و Transaction Log ها مورد استفاده قرار گیرد. به عنوان مثال برای زمانی که در یک دامین کنترلر عملیاتی هر دو دسته فایل روی یک دیسک قرار دارند و می خواهید جای آن ها را تغییر دهید. برای این منظور لازم است در Directory Restore Mode وارد شوید و ntdsutil را اجرا کنید:

۱) در ntds prompt وارد کنید: activate Instance NTDS

2) سپس وارد کنید: File

3) برای آنکه محل فعلی فایل ها را بدانید وارد کنید: info

4) برای جا به جا کردن Database دستور move db to directory را وارد کنید به طوری که directory مسیر مقصد برای فایل های database است. این فرآیند، فایل های کنونی database را به محل مشخص شده منتقل می کند و Registry را برای تنظیمات جدید، تنظیم می کند.

۵) به صورت مشابه برای جا به جا کردن Transaction Log ها می توانید وارد کنید: move logs to directory