12 Mart 2014 Çarşamba

The transaction log for database ... is full due to 'LOG_BACKUP'


HATA:
Message
Executed as user: DOMAIN\svc_SQLService. The transaction log for database 'veritabanıAdı' is full due to 'LOG_BACKUP'. [SQLSTATE 42000] (Error 9002)  BACKUP DATABASE is terminating abnormally. [SQLSTATE 42000] (Error 3013).  The step failed.

AÇIKLAMA:
Yedek almak istediğinizde böyle bir hata alabilirsiniz. Aslında hata mesajı hatanın ne olduğunu anlatıyor. Temel sorun, Transaction Log dosyanızın dolmuş olması. Olası senaryo, veritabanınızın Recovery Model'ı FULL. Çok uzun süren veya açık kalan bir Transaction var ya da işlem(ler) yapıldı yapıldı ve Transaction Log dosyasının içindeki boşluk doldu ve Transaction Log dosyasının otomatik büyümesi kapalı veya disk doldu.

ÇÖZÜM:
Böyle bir durumda, eğer düzenli olarak Transaction Log yedeği almayacaksanız ve Log Shipping'iniz yoksa, o zaman veritabanının Recovery Model'ını SIMPLE'a çevirmeyi düşünebilirsiniz. Eğer Transaction Log dosyanızın bulunduğu disk tamamen dolduysa, o zaman sadece Recovery Model'ını SIMPLE'a çevirmek de sizi kurtarmayabilir; böyle bir durumda başka müsait bir diske bir tane daha Transaction Log dosyası oluşturmayı düşünebilirsiniz, daha sonra ortalık durulunca bu yeni Transaction Log dosyasını kaldırabilirsiniz.

2 yorum:

Adsız dedi ki...

Ben bu hata ile 2.000.000 veri olan tabloma delete from sorgusu çektiğimde karşılaşıyorum.
Recovery Model e baktım simple yazıyor.
Acaba neyden kaynaklı böyledir?

Ekrem Önsoy dedi ki...

Recovery Model'ı ne yaparsak yapalım, SQL Server'da (Memory Optimized'daki Durable olmayan tablolar hariç) her işlem Transaction Log dosyasına işlenir. Bu nedenle tek seferde büyük bir DELETE işleminin yapılması da Transaction Log dosyasının dolmasına neden olabilir. Bunu engellemek için DELETE işlemini parça parça yapmalısın.