Sahip olduğumuz Exchange Server üzerindeki mail trafiği her zaman sorunsuz işlemeye devam etmeyebilir. Olası kötü durumlara karşı kendimizi hazırlamamız gerekmektedir. İyi bir sistemci olarak her zaman düzenli yedeklerimizi alsak ta bazı sorunlar yedek ile çözümlenemez. Servisin yavaşlaması ,gönderilen maillerin kuyrukta beklemesi , mail alma ve gönderme işleminin çok geç gerçekleşmesi , istemci mail alma programlarında ki tutarsızlık , servislerin çok fazla kaynak tüketmesi gibi durumlar bize Exchange Server’ın sorun çıkarmak üzere olduğunu ve bunun için yedekten fazlasını yapmamız gerektiğini göstermektedir . Bu gibi durumlarda Microsoft un bize sunduğu “ESEUTIL” aracını iyi bir şekilde kullanabilmemiz gerekmektedir. Ben de bu makalemde bu komut seti ile neler yapabileceğimizi anlatacağım .
ESEUTIL komut seti, ek bir yardımcı program yüklemeye gerek kalmadan Exchange Server yüklemesi ile beraber gelmektedir. Bu komut setini iyi derecede kullanabilmek için öncelikle Exchange Server ın veri dosyalarını nerede ve ne şekilde sakladığını bilmek gerekmektedir. Exchange Server standart olarak veri dosyalarını aşağıdaki dizine kurulmaktadır;
“C:\Program Files\Exchsrvr\MDBDATA”
Bu dizinde aşağıdaki dosyalar bulunmaktadır.
Bu dosyaları sırası ile incelemek gerekirse;
EDB ve STM = Exchange Server 2003 üzerinde bir depolama birimine ait veri tabanı dosyalarıdır ( priv1 = depolama birimi için, pub1 = ortak klasörler için ) . Bu depolama birimi üzerindeki mailler ve bunlara ait olan ekler bu iki veri tabanı dosyasında tutulmaktadır. Bu her iki dosya farklı istemci tiplerine göre kullanılmaktadır. Yani bir MAPI client eğer Exchange Server üzerinden bir mail almak isterse bu bilgi ona “edb” veri tabanından verilirken, internet tabanlı bir protokol ile Exchange Server dan mail alan istemci “ stm ( Streaming) “ dosyasından bilgi almaktadır. “Edb” dosyasında maillere ait başlıklar, maillerin metinleri ve ekleri bulunmaktadır. “Stm” dosyasında ise; ses, görüntü ve benzeri multimedya öğeler yer almaktadır.
E00, Exx = Bu dosyalar Exchange Server ın “Transaction Log” dosyalarıdır. Her depolama grubu için oluşturulan bu log dosyaları yeni açılan her depolama biriminde numarası bir artarak oluşturulur; E00, E01, E02 vb. Bu dosyaların kullanım amacı ise Exchange Server ın hızlı çalışmasını sağlamaktır. Exchange üzerinde yapılan mail gönderimi ve mail düzenleme gibi işlemler direk olarak veritabanına yazılmaz, bu değişiklikler bilgisayarınızın fiziksel RAM i ile log dosyalarında tutulur. Bu Exchange Server ın daha hızlı çalışmasını sağlamaktadır, ancak olası log dosyası silinmesi veya zarar görmesi durumunda veri kaybı kaçınılmazdır. Çünkü çalışmakta olan bir Exchange Server ın sunduğu hizmet; veri tabanı dosyaları, RAM ve log dosyalarının oluşturduğu bir bütündür. Bu nedenle bu bütüne ait bir parçada olan sorunlar bütüne yansımaktadır. Bu log dosyalarının her biri beş’er MB ile sınırlandırılmıştır. Yani her 5mb tan sonra yeni bir log dosyası açılmaktadır. Birinci depolama grubu için artış;
E0000001, E0000002, E0000003 şeklinde ilerlemektedir.
Res1.log, Res2.log = Exchange Server ın kullandığı fiziksel diskte yer kalmaması durumunda loglama işlemi yapılamaz. Bu da olası veri kayıplarına yol açacağı için böyle bir durumda kullanılmak üzere iki adet beş er mb lık iki dosya rezerve için kullanılmaktadır.
E00.chk , Exx.chk = Chk dosyası kontrol dosyası olarak görev yapmaktadır . Bildiğimiz üzere işlemler öncelikle RAM ve log dosyaları üzerine yazılmaktadır . Kontrol dosyası da verilerin veri tabanı üzerine kayıt edilmesini kontrol etmektir.
E00.tmp, tmp.edb = Her depolama birimi için kullanılmak üzere geçici dosyaları temsil ederler. E00.tmp ilk depolama birimi için geçici log dosyasıdır. Exchange üzerinde çalışan “Extensible Storage Engine” servisi üzerinde gerçekleşen işlemler bu log dosyasında tutulur. Veri tabanı üzerinde gerçekleşen “full-text index” gibi işlemlerde ise verilerin geçici olarak tutulduğu dizin ise “temp.edb” dir.
Exchange veri tabanı dosyalarını ve bunların görevlerini anladıktan sonra artık komut setinin kullanımına geçebiliriz. Bu komut setini çalıştırmak için DOS ortamında aşağıdaki dizine kadar gitmeliyiz veya bu dizini path olarak tanımlayabiliriz.
“C:\Program Files\Exchsrvr\bin>” Bu dizinde “ESUTIL” yazarak komut setine ait parametreleri görebiliyoruz.
Bu parametrelerden en çok kullanılanlarını örneklemek istiyorum .
Yoğun çalışan bir Exchange Server ın zamanla veritabanı şişecek ve çok fazla yer kaplamaya başlayacaktır. Bunun sonucu olarak ise aldığınız yedeklerin boyutu büyüyecek , veritabanının bulunduğu diskteki yer azalacak , Exchange server ın çalışma performansı kötü yönde etkilenecektir . Exchange Server üzerinde Günlük bakım işlemleri ile beraber online bir defrag yapılmakta ancak bu çok ta yeterli olmamaktadır . ESEUTIL ile yapacağımız defrag ise offline defrag tır ve veritabanı üzerinde son derece etkilidir. Defrag işlemi sırasında Eseutil, veritabanın yapısını inceler ve veri tabanı üzerinde ; tarama , okuma , onarım ve birleştirme yapar.
Defrag yapmak için öncelikle Mailbox Store u Dismount etmemiz gerekmektedir.
Bu işlem için ESM üzerinden şekilde gösterildiği gibi Store un üzerine gelerek “Dismount Store” seçeneğini seçiyoruz.
( Not : Eğer bu işlemi unutur ve komut satırında işlemi yaparsanız Operation terminated with error -550 <JET_errDatabaseInconsistent, Database is in inconsistent state>” şeklinde bir hata alacaksınız )
Bu işlemin ardından komut satırınsa aşağıdaki komutu çalıştırıyoruz ;
eseutil /d “c:\program files\exchsrvr\mdbdata\priv1.edb”
Burada önemli bir nokta ya dikkat çekmek istiyorum . Offline defrag yapmak için diskinizin veritabanını barındıran bölümünde veritabanı boyutunun %110 u kadar bir boş alan olmak zorundadır .
İşlem başarı ile sonuçlandıktan sonra artık Mailbox Store u tekrar mount edebiliriz
Bu işlem sayesinde artık veri tabanı gözle görülür bir şekilde küçülmektedir. ( Eğer veri tabanı parçalanmamış ise zaten defrag sonucu da boyut pek değişmeyecektir . )
Eğer defrag işlemi sırasında veritabanı birleştirme yanında diğer ek özelliklerinde kullanılmasını istiyorsanız , Defrag parametrelerinin switchlerini kullanabilirsiniz
Örneğin Defrag işlemi sonucu olası sorunlara karşılık veritabanının bir kopyasını almak isteyebilirsiniz . Bunun için aşağıdaki komutu kullanabiliriz
eseutil /d “c:\program files\exchsrvr\mdbdata\priv1.edb” /b c:\deneme
Komutun çalıştırılması yukarıdaki gibidir . Yedek dosyası ise aşağıdaki şekildedir ;
Eğer farkında olmadan Exchange Server şişmiş ve veritabanının bulunduğu diskte yer kalmamış ise Exchange Server çalışmaya devam edemeyecektir. Bu durumda en iyi çözüm hızlı bir şekilde defrag yapmak ve yer açmaktır . Ancak sorun ise defrag için gerekli olan %110 boş alanın zaten elinizde olmaması . Böyle bir durumda ise yine kullanacağınız bir ESEUTIL switch i ile bu sorunu aşabilirsiniz.
Defrag sırasında “t” switch i kullanılmaz ise eğer veritabanının bulunduğu dizinde “Tempdfrgxxx.edb” isminde geçici veritabanı dosyası oluşturulur .
Eğer veritabanının bulunduğu disk üzerinde yeriniz yok ise geçici veri tabanı dosyasını isterseniz “t” komutu ile başka bir dizin üzerine alabilirsiniz . Örneğin aşağıdaki komut ile geçici veri tabanı ismini ve konumunu değiştirmiş oluyorum . Bu komuta göre geçici veri tabanı bilgisayarımın “D” dizininde “temp.edb” isminde olacaktır .
eseutil /d “c:\program files\exchsrvr\mdbdata\priv1.edb” /t d:\temp.edb
Kullandığım “t” komutu ile defrag için gerekli olan geçici veritabanı dosyası artık belirtilen dizine alınabilir . ( not : eğer tek disk var ise map network drive üzerinde de sorunsuz çalışmaktadır. )
ESEUTIL ile aynı zamanda bozulmuş data dosyalarını da düzeltme şansınız bulunmaktadır .
Örneğin virüs programları sonucu zarar görmüş ve mount olmayan db yi /P komutu ile onarabiliriz.
eseutil /p “c:\program files\exchsrvr\mdbdata\priv1.edb”
Komutu çalıştırdığımızda karşımıza yukarıdaki gibi bir uyarı ekranı gelecektir. Bu ekranda bize Repair işleminin loglara yansımayacağı bildirilmektedir.
İşlemin sonucunda veritabanının bütünlüğünü kontrol etmek ve olası sorunları düzeltmek için aşağıdaki komutu kullanıyoruz.
isinteg –s kayro –test folder ( kayro = server ismi , folder ise test dosyasının ismi , -fix komutunu da kullanarak sorunları düzeltebilirsiniz )
bu komut hakkında daha fazla bilgi için https://support.microsoft.com/kb/182081/tr
Bu işlemin ardından sorunlu veritabanı sorunsuz bir şekilde mount olacaktır . ( not : bu işlemin %100 kurtarma ve onarma garantisi yoktur. )
Bu işlemlere rağmen veritabanı mount olmuyor ve sorunlar devam ediyor ise “/g” komutunu kullanabiliriz . Bu komut veritabanının bütünlüğünü kontrol eder ve eğer sorunlar var ise artık “/r” parametresini kullanabileceğimizi gösterir.
Komutun başarılı bir şekilde çalıştığını görebiliyoruz.
Eğer veri tabanı hala sorunlu ise “/r” parametresi ile “Soft Recovery” işlemi yapılabilir . Microsoft ; eğer Exchange Server ın veri dosyaları duruyor ancak mount işlemi gerçekleşmiyor ise bu işlemi öneriyor . Ancak veri dosyaları yok olmuş ve online olarak yedekten geri dönülmüş ise o zaman “Hard Recovery” yani “/c” parametresini önermektedir.
Eseutil Recovery faklı bir lokasyona taşınmış veritabanını kurtarabilir, bu özellik yalnızca Exchange 2003 le beraber kullanılabilir. Hard recovery “veritabanı back up alındıktan sonra bile” farklı lokasyona taşınmış olsa dahi geri kurtarma işlemini başarı ile tanımlar. Exchange 2003 öncesine kadar ise Veritabanını kurtarmak için Transaction Log files ın bulunduğu konumda olması gerekirdi. Exchange 2003 de /D switch’i kurtarma moduna eklenmiştir ve böylece transaction log files ın bulunduğu konuma da transaction logları tarafından yazılmış bilgilere rağmen geri yüklemeyi başarır. Bu yeni özellik çevrimdışı veritabanlarını ” Recovery Storage Groups” a yazarken ve ya yukarıda ki senaryoda gibi bozulmuş veritabanlarını kurtarırken son derece kullanışlıdır.
Veritabanını ve transaction log dosya gruplarını istediğiniz klasöre kopyalayabilir ve başarılı bir şekilde normal geri kurtarma işlemi yapabilirsiniz. Veritabanı bir kez doğrulandığında ( Consistence ) daha sonra veritabanını istediğiniz lokasyona taşıyabilirsiniz ve farklı log larla ilişkilendirebilirsiniz.
eseutil /r e00 /i ( veritabanının olduğu dizinde çalıştırın )
Komutun çalıştırılmış şekli yukarıdaki gibidir . Bu uygulama ile beraber sorunlu olan veritabanı dosyaları düzelecektir. ( yine bu konuda da Microsoft bir garanti vermemektedir. )
Bu komut öncesinde size tavsiyem mevcut logların sorunsuz olup olmadığını aşağıdaki komut ile kontrol edebilirsiniz
eseutil /ml c:\DBLogpath\E00
Burada loglarını E00, E01 veya E03 vb başlıyor olabilir lütfen kontrol edin.
ESEUTIL r için bazı özel durumlar vardır, örneğin yeni sistemlerde log ve DB farklı dizinlerde olabilir. Bu durumda tercihiniz her zaman komutu DB nin olduğu dizinde çalıştırmak olsun. Ancak log ve kontrol dosyası için aşağıdaki iki parametreyi kullanabilirsiniz
eseutil /r E03 /i /L “D:\LOGS\DB2\” /D “D:\LOGS\DB2\”
Bu şekilde DB ve log dosyalarının ayrı olduğu veri tabanları içinde eseutil aracını kullanabilirsiniz. Eğer logların olduğu dizinde çalıştıracak veya farklı bir dizinde çalıştırıyorsanız bu durumda veri tabanının olduğu path gerekli olur ki bunuda /D parametresi ile yazabilirsiniz. Eğer check yani kontrol dosyası farklı bir dizinde ise /S parametresi ile bu dizini belirtebilirsiniz.
Buradan anlaşılacağı üzere “P” parametresi veri kaybı göz önüne alınsada sonuç itibari ile mount olmayan veri tabanının mount olmasını ve insanların tekrar online olmasını sağlayan bir komut seti. Ancak bazı durumlarda P parametresine rağmen veri tabanı mount olmayabilir. MH parametresi ile kontrol ettiğiniz zaman hala Dirty Shutdown görürsünüz.
Bu durumda veri tabanını mount etmeye çalıştığınız zaman aşağıdaki gibi bir hata alırsınız
MapiExceptionCallFailed: Unable to mount database. (hr=0x80004005, ec=-501)
501 kodunun açıklaması log dosyası bozulmuş demektir. Bu durumda ilk olarak edb hariç ( imkanınız yani terini var ise onuda ) tüm log ve chk dosyalarını yedekleyin. Ardından edb hariç tüm log, temp,chk dosyalarını silin. Ardından P parametresini çalıştırın. Exchange konsol üzerinden veri tabanını mount etmeyi denemeden önce veri tabanı özelliklerindeki “This database can be overwritten by a restore” kutucuğunu işaretleyin ve mount edin. Hepsi bu :)
Eğer ESEUTIL aracını Exchange üzerinde değil de bir başka makinede çalıştırmak istiyorsanız Exchange server dan aşağıdaki dosyaları kopyalamanız gerekmektedir
Eseutil.exe, Ese.dll, Jcb.dll, Exosal.dll, Exchmem.dll
“C:\Program Files\Exchsrvr\bin” dizininde bulunmaktadır .
ESEUTIL ile yapılacaklar bunlarında ötesindedir , ancak her bir komutu ve bu komutların switchleri ayrı bir makale konusu olduğundan en önemli ve en çok kullanılan komutlarını anlattım . Diğer detayları ile bir başka makalede buluşmak üzerere.