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?
asp.net
sql-server
asp.net-mvc
database
Alireza Noori
sumber
sumber
Jawaban:
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.
sumber
shrink
DB. Selain itu, saya tidak memerlukan pemulihan, jadi saya memberi tahu mereka untuk menyetelnya keSIMPLE
mode.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;
sumber
select * from sys.database_files;
name
kolom, untuk baris log, dari kueri ini:select * from sys.database_files
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 :)
sumber
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
Saya menulis artikel dengan semua detail tentang kesalahan ini dan cara mengatasinya di Log transaksi untuk database 'SharePoint_Config' penuh karena LOG_BACKUP
sumber
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.
Setelah beralih ke unlimited, database kembali hidup.
sumber
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.
sumber