"Log transaksi untuk database sudah penuh karena 'LOG_BACKUP'" di host bersama

92

Saya memiliki situs web Asp.Net MVC 5 dengan pendekatan kode pertama EntityFramework dalam paket hosting bersama. Ia menggunakan WebbsitePanel open source untuk panel kontrol dan panel SQL Server-nya agak terbatas. Hari ini ketika saya ingin mengedit database, saya mengalami kesalahan ini:

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

Saya mencari-cari dan menemukan banyak jawaban terkait seperti ini dan ini atau ini tetapi masalahnya adalah mereka menyarankan untuk menjalankan kueri di database. Saya mencoba berlari

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

dengan studio visual (di HomeController) tetapi saya mendapatkan kesalahan berikut:

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

Bagaimana saya bisa memecahkan masalah saya? Haruskah saya menghubungi tim dukungan (yang agak buruk untuk tuan rumah saya) atau dapatkah saya menyelesaikannya sendiri?

Alireza Noori
sumber
Jalankan ALTER tanpa transaksi.
usr
@usr Bagaimana saya melakukan itu?
Alireza Noori
Ini adalah masalah database, menyusutkan database bisa berfungsi. Mintalah DBA untuk membantu Anda dalam hal ini.
Shashank Chaturvedi
Anda pasti sudah membuka transaksi. Saya tidak tahu, mungkin EF melakukannya secara otomatis. Anda perlu melakukan riset tentang EF dan transaksi. Atau, jalankan ini dari SSMS. Atau, gunakan ADO.NET mentah. Mungkin penghosting Anda tidak akan mengizinkan pernyataan itu dan mereka perlu mengeluarkan cadangan log lebih sering.
usr

Jawaban:

39

Hubungi perusahaan hosting Anda dan minta mereka menyiapkan pencadangan log biasa atau setel model pemulihan menjadi sederhana. Saya yakin Anda tahu apa yang menginformasikan pilihan tersebut, tetapi saya akan tetap eksplisit. Setel model pemulihan ke penuh jika Anda memerlukan kemampuan untuk memulihkan ke titik waktu tertentu. Apa pun cara database salah dikonfigurasi sebagaimana adanya.

Ben Thul
sumber
Terima kasih. Saya ingin melakukan ini sendiri tetapi menghubungi mereka juga dan mereka telah menyiapkan pemulihan dan menjalankan shrinkDB. Selain itu, saya tidak memerlukan pemulihan, jadi saya memberi tahu mereka untuk menyetelnya ke SIMPLEmode.
Alireza Noori
1
Halaman MSDN ini menjelaskan cara mengatur model pemulihan menjadi sederhana!
shekhar
147

Selain Jawaban Ben, Anda dapat mencoba Pertanyaan Di Bawah ini sesuai kebutuhan Anda

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 

Perbarui Kredit @ cema-sp

Untuk menemukan nama file database gunakan query di bawah ini

select * from sys.database_files;
Mohit Dharmadhikari
sumber
8
Tambahan: untuk menemukan {database-file-name}:select * from sys.database_files;
cema-sp
2
Saya dapat memastikan ini berhasil. Harus menjadi jawaban yang diterima.
garrettendi
2
Terima kasih @Mohit Dharmadhikari; Saya mencoba banyak hal lain termasuk mengalokasikan lebih banyak ruang disk, dan meningkatkan ukuran file log, namun tidak ada yang berhasil sampai saya mengecilkan file Log yang ada terlebih dahulu.
Johnny
1
Terima kasih, sangat membantu.
Obakeng Molebatsi
3
Saya yakin {database-file-name} akan sama dengan namekolom, untuk baris log, dari kueri ini:select * from sys.database_files
Bob Horn
14

Kadang-kadang ketika disk kehabisan ruang, pesan "log transaksi untuk database XXXXXXXXXX penuh karena 'LOG_BACKUP'" akan dikembalikan ketika pernyataan SQL pembaruan gagal. Periksa ruang disk Anda :)

Hein Gous
sumber
5

Galat ini terjadi karena log transaksi menjadi penuh karena LOG_BACKUP. Oleh karena itu, Anda tidak dapat melakukan tindakan apa pun pada database ini, dan dalam kasus ini, mesin database SQL Server akan memunculkan kesalahan 9002.

Untuk mengatasi masalah ini, Anda harus melakukan hal berikut

  • Ambil cadangan basis data lengkap.
  • Kecilkan file log untuk mengurangi ukuran file fisik.
  • Buat LOG_BACKUP.
  • Buat Rencana Pemeliharaan LOG_BACKUP untuk sering membuat log cadangan.

Saya menulis artikel dengan semua detail tentang kesalahan ini dan cara mengatasinya di Log transaksi untuk database 'SharePoint_Config' penuh karena LOG_BACKUP

Mohamed
sumber
9
Memposting pesan kesalahan sebagai jawaban Anda sama sekali tidak membantu. Jawaban khusus tautan juga tidak disukai di StackOverflow. Anda harus mengekstrak teks yang relevan dari tautan dan mengutipnya di sini. Hal ini sangat penting jika tautan mati di masa mendatang, seperti yang pasti terjadi pada semua tautan.
Dan Bechard
3

Ini juga bisa terjadi ketika file log dibatasi ukurannya.

Database klik kanan di Object Explorer

Pilih Properties

Pilih File

Pada baris log, klik elipsis di kolom Autogrowth / Maxsize

Ubah / verifikasi Ukuran File Maksimum Tidak Terbatas.

masukkan deskripsi gambar di sini

Setelah beralih ke unlimited, database kembali hidup.

Roy Latham
sumber
1

Saya mendapat kesalahan yang sama tetapi dari pekerjaan backend (pekerjaan SSIS). Setelah memeriksa pengaturan pertumbuhan file Log database, file log pertumbuhan terbatas 1GB. Jadi yang terjadi adalah ketika pekerjaan dijalankan dan meminta SQL server untuk mengalokasikan lebih banyak ruang log, tetapi batas pertumbuhan log menurun menyebabkan pekerjaan gagal. Saya memodifikasi pertumbuhan log dan mengaturnya untuk tumbuh sebesar 50MB dan Pertumbuhan Tidak Terbatas dan kesalahannya hilang.

Andy
sumber