Bu makalede MSSQL Servis hesabının Change Pending durumunda neden kaldığını böyle durumlarda neler yapılması gerektiğini ele almış olacağız.
Sql Server Configuration Manager ekranına girdiğimizde sql server servisimizin change pending durumunda kaldığını görürüz.

Sql server servis hesabımız change pending durumunda olsa bile sql server yapımıza bağlanıp sorgularımızı çalıştırabiliriz. Change Pending yapısından kurtulmak için SSMS arayüzün de yeni bir query açıp aşağıdaki komutun çalıştırılması gerekmektedir. Bu yapı sayesinde sql server servisimiz stop edecek ve tekrar start ettiğimizde change pending durumundan kurtulmuş olacaktır.
SHUTDOWN WITH NOWAIT


SQL Server servisi herhangi bir nedenle beklenmedik şekilde kapandığında checkpoint işlemi gerçekleştirilemez. Bu durumda bellekte bulunan ancak henüz veri dosyalarına yazılmamış değişiklikler olabilir. SQL Server, write-ahead logging prensibi gereği tüm işlemleri önce transaction log dosyasına yazar. Bu sayede servis kapansa bile yapılan işlemlerin durumu log üzerinden takip edilebilir.
Servis yeniden başlatıldığında SQL Server otomatik olarak crash recovery sürecini başlatır. Bu süreçte önce hangi işlemlerin tamamlandığı ve hangilerinin yarım kaldığı analiz edilir. Commit edilmiş ancak veri dosyalarına yazılamamış işlemler redo aşamasında tekrar uygulanır. Commit edilmemiş işlemler ise undo aşamasında rollback edilerek geri alınır. Bu rollback işlemleri, veritabanının tutarlı bir duruma dönmesini sağlar.
Bu davranış ACID kurallarından atomicity ve consistency ilkeleriyle doğrudan ilişkilidir. Atomicity gereği bir transaction ya tamamen uygulanır ya da tamamen geri alınır. Consistency gereği ise veritabanı her zaman tutarlı bir durumda tutulur. SQL Server, beklenmedik kapanmalar sonrasında bile bu prensipleri korumak için recovery mekanizmasını devreye alır.
SQL Server’da RECOVERY_PENDING durumu, veritabanının recovery sürecine girmek istediğini fakat bunu yapacak gerekli kaynaklara erişemediğini gösterir. Yani SQL Server “düzeltmek istiyorum ama yapamıyorum” demektedir. Bu nedenle bu durum, RECOVERING gibi zamanla tamamlanan bir süreç değildir. Event viewerdan ve error loglardan hatanın neden kaynaklandığını öğrenebiliriz. Sql error logunu başka bir klasöre kopyalayıp notepad’den açılabilir.
Sql servisi kapanırken hangi işlemlerin checkpoint yaptığını söyleyelim. Sql server kapanacağı zaman öncelikle yeni bir transaction almasın diye tüm kullanıcıları disable moduna çeker. Sysadmin ve serveradmin bu loginlerin dışındadır. Daha sonra sp_lock ve sp_who komutlarını çalıştırarak stored procedure ve tsql komutlarının bitmesini bekler. Bu işlemler sonucunda tüm veritabanlarını checkpoint eder ve servis durdurulur. Bu durdurma sırasında sunucu kapanırsa change pending olur. Bunun içinde yukarıdaki komutun kullanılması gerekmektedir.
Servisimiz yukarıdaki shutdown komutuyla stop ettikten sonra tekrar start ettiğimizde Change Pending modun dan servisimiz çıkmış olacaktır.

CHANGE_PENDING durumundayken SHUTDOWN WITH NOWAIT çalıştırmak SQL Server için en riskli senaryolardan biridir. İlk olarak sql server error loglarından hatanın sebebinin öğrenilmesi gerekmektedir. SHUTDOWN WITH NOWAIT komutuyla servisi stop ettikten sonra tekrar servisi açarken Error 32 hatası alınırsa ilgili makalenin okunması gerekmektedir.
Bu makalede mssql server Change Pending yapısını görmüş olduk.
Başka bir makalede görüşmek dileğiyle..
Onlar – ” Yalnızca Allah’a Dayanıp Güvenirler. ” Mücadele – 10
