"Veritabanı için işlem günlüğü, paylaşılan bir ana bilgisayardaki 'LOG_BACKUP' nedeniyle dolu


91

Paylaşılan bir barındırma planında EntityFramework codefirst yaklaşımına sahip bir Asp.Net MVC 5 web sitem var. Kontrol paneli için açık kaynaklı WebbsitePanel'i kullanır ve SQL Server paneli biraz sınırlıdır. Bugün veritabanını düzenlemek istediğimde şu hatayla karşılaştım:

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

Etrafa arandı ve benzeri ilgili birçok sorunun cevabını buldum bu ve bu ya bu ama sorun onlar veritabanı üzerinde bir sorgu çalıştırmanızı öneririz olduğunu. Koşmayı denedim

db.Database.ExecuteSqlCommand("ALTER DATABASE db_name SET RECOVERY SIMPLE;");

görsel stüdyo ile (üzerinde HomeController) ancak aşağıdaki hatayı alıyorum:

System.Data.SqlClient.SqlException: ALTER DATABASE statement not allowed within multi-statement transaction.

Sorunumu nasıl çözebilirim? Destek ekibiyle (ev sahibim için biraz yetersiz) iletişime geçmeli miyim yoksa bunu kendim çözebilir miyim?


ALTER'i işlem yapmadan yürütün.
usr

@usr Bunu nasıl yaparım?
Alireza Noori

Bu bir veritabanı sorunu, veritabanını küçültmek işe yarayabilir. Bir DBA'dan bu konuda size yardımcı olmasını isteyin.
Shashank Chaturvedi

Bir şekilde bir işlem açmış olmalısın. Bilmiyorum, belki EF bunu otomatik olarak yapıyor. EF ve işlem konusunda biraz araştırma yapmanız gerekir. Veya bunu SSMS'den yürütün. Veya ham ADO.NET kullanın. Muhtemelen barındırıcınız bu ifadeye zaten izin vermeyecektir ve günlük yedeklemelerini daha sık yapmaları gerekir.
usr

Yanıtlar:


38

Barındırma şirketinizi arayın ve düzenli günlük yedeklemeleri oluşturmalarını sağlayın veya kurtarma modelini basitleştirin. Eminim seçimi neyin etkilediğini biliyorsunuzdur, ama yine de açık olacağım. Zaman içinde rastgele bir noktaya geri yükleme yeteneğine ihtiyacınız varsa kurtarma modelini tam olarak ayarlayın. Her iki durumda da veritabanı olduğu gibi yanlış yapılandırılmıştır.


Teşekkür ederim. Bunu kendim yapmak istedim, ancak onlarla da iletişime geçtim ve kurtarmayı ayarladılar ve DB'de çalıştırdılar shrink. Ayrıca, kurtarmaya ihtiyacım yoktu, bu yüzden SIMPLEmoduna ayarlamalarını söyledim .
Alireza Noori

1
Bu MSDN sayfası , kurtarma modelinin nasıl basitleştirileceğini açıklar!
shekhar

147

Ben'in Cevabına Ek olarak, ihtiyacınıza göre Aşağıdaki Sorguları deneyebilirsiniz.

USE {database-name};  
GO  
-- Truncate the log by changing the database recovery model to SIMPLE.  
ALTER DATABASE {database-name}
SET RECOVERY SIMPLE;  
GO  
-- Shrink the truncated log file to 1 MB.  
DBCC SHRINKFILE ({database-file-name}, 1);  
GO  
-- Reset the database recovery model.  
ALTER DATABASE {database-name}
SET RECOVERY FULL;  
GO 

Güncelleme Kredi @ cema-sp

Veritabanı dosya adlarını bulmak için aşağıdaki sorguyu kullanın

select * from sys.database_files;

8
Ek: {database-file-name} bulmak için:select * from sys.database_files;
cema-sp

2
Bunun bir tedavi olduğunu doğrulayabilirim. Kabul edilen cevap olmalı.
garrettendi

2
Teşekkürler @Mohit Dharmadhikari; Daha fazla disk alanı ayırma ve günlük dosyası boyutunu artırma dahil olmak üzere birçok başka şeyi denedim, ancak önce mevcut Günlük dosyasını küçültene kadar hiçbir şey işe yaramadı.
Johnny

1
Teşekkürler, çok yardımcı.
Obakeng Molebatsi

3
{Database-file-name} name'in bu sorgudan günlük satırı için sütuna eşit olacağına inanıyorum :select * from sys.database_files
Bob Horn

14

Bazen bir diskte yer kalmadığında, güncelleme SQL deyimi başarısız olduğunda "XXXXXXXXXX veritabanı için işlem günlüğü 'LOG_BACKUP' nedeniyle dolu" mesajı döndürülür. Disk alanınızı kontrol edin :)


5

Bu hata, LOG_BACKUP nedeniyle işlem günlüğünün dolması nedeniyle oluşur. Bu nedenle, bu veritabanında herhangi bir eylem gerçekleştiremezsiniz ve bu durumda SQL Server Veritabanı Motoru 9002 hatası verir.

Bu sorunu çözmek için aşağıdakileri yapmalısınız

  • Tam bir veritabanı yedeklemesi alın.
  • Fiziksel dosya boyutunu azaltmak için günlük dosyasını küçültün.
  • LOG_BACKUP oluşturun.
  • Sık sık yedekleme günlükleri almak için bir LOG_BACKUP Bakım Planı oluşturun.

Bu hatayla ilgili tüm detayları ve nasıl çözüleceğini içeren bir makale yazdım 'SharePoint_Config' veritabanı işlem günlüğü LOG_BACKUP nedeniyle dolu


9
Hata mesajını cevabınız olarak göndermek hiç yardımcı olmuyor. StackOverflow'da yalnızca bağlantı yanıtları da hoş karşılanmaz. İlgili metni bağlantıdan çıkarmalı ve buradan alıntı yapmalısınız. Bu, tüm bağlantıların kaçınılmaz olarak yaptığı gibi, bağlantının gelecekte ölmesi durumunda özellikle önemlidir.
Dan Bechard

3

Bu, günlük dosyasının boyutu kısıtlandığında da olabilir.

Object Explorer'da veritabanına sağ tıklayın

Özellikleri seçin

Dosyaları Seçin

Günlük satırında Autogrowth / Maxsize sütunundaki üç noktaya tıklayın.

Maksimum Dosya Boyutunun Sınırsız olduğunu değiştirin / doğrulayın.

görüntü açıklamasını buraya girin

Sınırsız olarak değiştirildikten sonra veri tabanı canlandı.


1

Aynı hatayı bir arka uç işinden aldım (SSIS işi). Veritabanının Günlük dosyası büyüme ayarı kontrol edildiğinde, günlük dosyası 1 GB ile sınırlı büyüme gösterdi. Öyleyse olan şey, iş çalıştığında ve SQL sunucusundan daha fazla günlük alanı ayırmasını istedi, ancak günlüğün büyüme sınırının düşmesi işin başarısız olmasına neden oldu. Günlük büyümesini değiştirdim ve 50MB ve Sınırsız Büyüme ile büyümeye ayarladım ve hata ortadan kalktı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.