MSSQL Server Log Dosyasının Shrink Olmaması Durumu

Bu makalede MSSQL Server Log Dosyasının Shrink olamama konusunu ele almış olacağız. Bazen büyüyen log dosyamızı shrink etmek istediğimizde shrink işleminin gerçekleşmediğini görürüz. Bunun birden fazla sebebi olabilir. benim ilk olarak karşılaşmış olduğum sorun log dosyasının backup job’ı olmasına rağmen log backup alınamaması ve bu da log dosyasının maksimum boyut olan 2 TB boyutuna  ulaşmasına sebep olmuştu.(CDC özelliğinin enable edilmesinden dolayı) Çözüm yöntemi olarak ikinci bir log dosyası oluşturup log kayıtlarının yeni oluşturulan log’a yazılmasını sağlamıştık. Bu makaleden önceki iki makalede bu sorunun çözümünü ele almıştım.

Veritabanımızda recovery model full kullanıyorsak yapılan her işlem log dosyasına yazılır. Log backup almazsak log dosyası belirli bir süre sonra şişer veritabanı kullanılamaz hale gelmektedir. Bu yüzden düzenli bir şekilde log backup alınarak ldf dosyasının truncate olması sağlanır.

Aşağıdaki sorgu yardımıyla veritabanında log backup alındıktan sonra neden truncate olmadığını görebiliriz.

select name, log_reuse_wait_desc from sys.databases

log_reuse_wait_desc: Transaction log’un neden “temizlenemediğini” (reuse edilemediğini) gösterir.

Not: log_reuse_wait kolonu ise log_reuse_wait_desc kolonundaki değerlerin sayısal olarak karşılığıdır.

NOTHING ifadesi veritabanımızın shrink edilebilir yapıda olduğunu göstermektedir.

LOG_BACKUP ifadesi veritabanımızda log backup alınmamış demektir. Log backup aldıktan sonra log dosyamızı shrink edebiliriz.

ACTIVE_TRANSACTION ifadesi Veritabanında aktif bir transaction olduğunda ve bu transaction’ın log dosyasını tamamen doldurduğunu anlıyoruz.

LOG_SCAN SQL Server bir log taraması yapıyor, bu bitmeden reuse yapılmaz.

AVAILABILITY_REPLICA AlwaysOn (AG) kullanılmakta ve log, diğer replikalara gönderilmediği için bekletiliyor.

XTP_CHECKPOINT In-Memory OLTP (Hekaton) tabloları için özel bir durum.

OTHER_TRANSIENT Geçici başka bir durum var. Genelde kısa sürer.

REPLICATION ifadesi veritabanımızda herhangi bir replikasyon yoksa bu yapı CDC özelliğin aktif edildiğini göstermektedir. CDC özelliği aktifse veritabanımız log backup aldıktan sonra truncate olmayacaktır. Bu özelliğin pasif edilmesi gerekmektedir. Çalıştığım kurumda cdc özelliği aktif edildiği için log dosyasının dolduğunu görmüştüm. Bunun için CDC özelliğini veritabanı altında kapatmıştık. CDC özelliğinin nasıl aktif veya pasif edildiği ve  ne olduğuyla ilgili makaleyi okuyabilirsiniz.

LOG_BACKUP, ACTIVE_TRANSACTION, REPLICATION ile ilgili sorunları çözdükten sonra tekrar komutu çalıştırdığımızda NOTHING yazması gerekmektedir.

Not: Aşağıdaki komut ile instance altındaki tüm databaselerin son log backup’larını bulabiliriz.

use msdb
select database_name,[D] AS FullYedek,[I] AS DifferentialYedek,[L] AS LogYedek
from (select database_name,type,backup_start_date from backupset) b
PIVOT (MAX(backup_start_date) FOR type IN ([D],[I],[L])) AS PivotTable
ORDER BY database_name

Başka bir makalede görüşmek dileğiyle..

Göklerde ve yeryüzünde bulunan kimselerle, sıra sıra (kanat çırparak uçan) kuşların Allah’ı tespih ettiğini görmez misin? Her biri duasını ve tesbihini kesin olarak bilmektedir. Allah onların yapmakta olduğu şeyleri hakkıyla bilendir. Nûr -41

Author: Yunus YÜCEL

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir