
Merhabalar,
Bu makalemde, exchange sistem yöneticilerinin canını sıkan bir problemin çözümünden bahsetmek istiyorum. Aslında basit bir konu, fakat etkilerine baktığımızda çok da hızlı çözülebilecek bir durum değil. Neden mi? Gayet basit, çünkü exchange sunucularınızın database boyutları muhtemelen çok yüksek ve bu derece yüksek database’lerde indexleme işinin çok uzun sürmesi…
Peki database index bozulduğunda neler olabilir? Mesela kullanıcılar outlook’larından bir mail’i aramak istediklerinde hiçbirşey bulamayabilirler. O mailin olduğunu biliyorlar fakat arama yaptıklarında hiçbir sonuç bulunamıyor.
Diğer bir etkisi de, eğer hem aktif hem de pasif database index bozulduysa, siz pasif olan kopyayı aktive etmeye çalıştığınızda index hataları olduğuna dair uyarı alırsınız ve işlem gerçekleşmez. Komut satırından zorlayarak aktive edebilirsiniz elbette.
Başka bir etkisi de, kullanıcı mailbox’larını başka bir database üzerine taşımak istediğinizde, oldukça uzun taşıma süreleri göreceksinizdir, ayrıca taşıma detaylarına bakmak istediğinizde de istatistik verilerini göremeyebilirsiniz.
Bu yüzden can sıkıcı olabiliyor bazen bu durum.
Gelelim problemin çözümüne…
Yapacağımız işlem index resetlemesi yaparak, database’in komple sıfırdan indexlenmesini sağlamak olacak. Fakat bazen bu da işe yaramayacak 🙂 Bu makalenin ilerleyen bölümünde buna da değineceğim ve bu durumda kesin çözümün ne olacağını aktaracağım.
Sistemin nasıl göründüğüne bakalım öncelikle. Şu komutla, database’ler hakkında bilgi alalım.
Get-MailboxDatabaseCopyStatus * | sort name | Select name,status,contentindexstate

Gördüğünüz gibi hem aktif database hem de pasif database Content Index State Failed ve Suspended durumda. Komutu daha farklı da kullanabilirsiniz. Ben isme göre sıralamak için sort name parametresi kullandım.
Çözüm 1:
Öncelikle exchange sunucu üzerinde 2 servisi durduruyoruz. Bunlar Microsoft Exchange Search (MSExchangeFastSearch) ve Microsoft Exchange Search Host Controller (HostControllerService) servisleridir.

İster komut satırından isterseniz windows servis yöneticisinden bu servisleri stop edebilirsiniz.
Komut satırında yapmak isterseniz Exchange Management Shell’i Run as Admin olarak çalıştırarak aşağıdaki komutları kullanınız.
Stop-Service MSExchangeFastSearch
Stop-Service HostControllerService

Servisleri durdurduktan sonra Database’in bulunduğu klasöre gidip, uzantısı .single olan klasörü komple siliyoruz. Bu klasör Database Indexing klasörüdür.
Eğer database’lerin hangi lokasyonda durduğunu bilmiyorsanız, exchange sunucu üzerinde nerede olduğunu görmek için şu komutu kullanabilirsiniz:
Get-MailboxDatabase | select EdbFilePath

Bu lokasyona gidiyoruz ve .single uzantılı klasörü siliyoruz.

Problemli olan tüm database’lerinizde bu işlemi yapınız.
Sonrasında stop ettiğimiz servislerimizi yeniden start ediyoruz.
Start-Service MSExchangeFastSearch
Start-Service HostControllerService
Servisleri başlattıktan kısa bir süre sonra, .single uzantılı yeni bir klasör yaratılacak ve indexleme işlemi otomatik başlayacaktır.
Tekrar komutla kontrol ettiğimizde aşağıdaki gibi “Crawling” durumuna geçtiğini göreceğiz.

Aktif kopyalar öncelikle başlayacaktır ve önce onların düzeltilmesinden sonra pasif kopyaların düzeltilmesi yapılacaktır. Database boyutlarınıza göre uzun sürecek bir işlem olacaktır.
DAG yapınız varsa, aktif kopyalar düzeltildikten sonra pasifler hala başlamadıysa aşağıdaki komut ile tüm kopyaların güncellenmesini sağlayabilirsiniz.
Update-MailboxDatabaseCopyStatus * | Where {$_.ContentIndexState -eq “FailedAndSuspended” | Update-MailboxDatabaseCopy -CatalogOnly
Eğer DAG yapınız yoksa ya da sadece tek bir database için indexleme yapacaksanız aşağıdaki gibi kullanabilirsiniz.
Update-MailboxDatabaseCopy “Database Name\Server Name” -CatalogOnly -BeginSeed
Tekrar kontrol ettiğimizde son durumlarını görebiliriz. 1 tanesi dışında hepsi bitmiş, DB1 hala devam etmekte.
Get-MailboxDatabaseCopyStatus * | Select name,status,contentindexstate

Normal şartlarda indexleme işlemi başarılı olacaktır. Fakat bazı istisnai durumlar da olabilir elbette. Index klasörünü silip, servisleri başlattığınızda bu klasör oluşturulmuyor ve indexleme otomatik başlamıyorsa Çözüm 2’yi deneyiniz.
Çözüm 2:
İlk yöntem ile istediğiniz sonucu bazen elde edemeyebilirsiniz. Sunucuyu restart edip ilk yöntemi tekrar denediğinizde de sonuç alamıyorsanız, exchange üzerinde bazı dizinleri yeniden oluşturmamız gerekecek.
İki servisi yine stop ediyoruz.
Stop-Service MSExchangeFastSearch
Stop-Service HostControllerService

Şu lokasyondaki tüm klasörleri siliniz.
NOT : Servisleri durdurmadan kesinlikle bu klasörleri silmeyiniz.
C:\Program Files\Microsoft\Exchange Server\V15\Bin\Search\Ceres\HostController\Data\Nodes\Fsis

Sonrasında komut satırından şu lokasyona gidiyoruz:
cd “C:\Program Files\Microsoft\Exchange Server\V15\Bin\Search\Ceres\Installer”
ve ardından installer çalıştırarak bu dizinlerin yeniden oluşturulmasını sağlıyoruz.
.\installconfig.ps1 -action i -datafolder “c:\Program Files\Microsoft\Exchange Server\V15\Bin\Search\Ceres\HostController\Data”

Başarılı şekilde bittiğinde servisleri yeniden start ediyoruz.
Start-Service MSExchangeFastSearch
Start-Service HostControllerService
Az önce sildiğiniz 4 tane klasör yeniden oluşturulacaktır ve indexleme işlemleriniz de otomatik olarak başlayacaktır.

Eğer başlamıyorsa, ilk yöntemdeki gibi servisleri durdurup, index klasörünü silip, servisleri tekrar başlatınız.
Yararlı olması dileğiyle.
Yusuf İşleyen