"บันทึกธุรกรรมสำหรับฐานข้อมูลเต็มเนื่องจาก" LOG_BACKUP "" ในโฮสต์ที่ใช้ร่วมกัน


91

ฉันมีเว็บไซต์ Asp.Net MVC 5 พร้อมแนวทางแรกของ EntityFramework ในแผนโฮสต์ที่ใช้ร่วมกัน ใช้WebbsitePanel แบบโอเพนซอร์สสำหรับแผงควบคุมและพาเนล SQL Server ค่อนข้าง จำกัด วันนี้เมื่อฉันต้องการแก้ไขฐานข้อมูลฉันพบข้อผิดพลาดนี้:

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

ฉันค้นหารอบ ๆ และพบคำตอบที่เกี่ยวข้องมากมายเช่นนี้และสิ่งนี้หรือสิ่งนี้แต่ปัญหาคือพวกเขาแนะนำให้เรียกใช้แบบสอบถามบนฐานข้อมูล ฉันพยายามวิ่ง

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

กับสตูดิโอภาพ (บนHomeController) แต่ฉันได้รับข้อผิดพลาดต่อไปนี้:

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

ฉันจะแก้ปัญหาของฉันได้อย่างไร? ฉันควรติดต่อทีมสนับสนุน (ซึ่งค่อนข้างแย่สำหรับโฮสต์ของฉัน) หรือฉันสามารถแก้ปัญหานี้ได้ด้วยตัวเอง?


ดำเนินการแก้ไขโดยไม่มีธุรกรรม
usr

@usr ฉันจะทำอย่างไร
Alireza Noori

เป็นปัญหาฐานข้อมูลการหดฐานข้อมูลอาจทำงานได้ ขอให้ DBA ช่วยคุณในเรื่องนี้
Shashank Chaturvedi

คุณต้องเปิดธุรกรรมอย่างใด ฉันไม่รู้ว่า EF อาจทำโดยอัตโนมัติ คุณต้องทำการค้นคว้าเกี่ยวกับ EF และธุรกรรม หรือดำเนินการจาก SSMS หรือใช้ ADO.NET แบบดิบ อาจเป็นไปได้ว่าผู้ให้บริการโฮสต์ของคุณจะไม่อนุญาตให้ใช้คำสั่งนั้นและพวกเขาจำเป็นต้องออกการสำรองข้อมูลบันทึกบ่อยขึ้น
usr

คำตอบ:


38

โทรหา บริษัท โฮสติ้งของคุณและให้พวกเขาตั้งค่าการสำรองข้อมูลบันทึกตามปกติหรือตั้งค่ารูปแบบการกู้คืนเป็นแบบง่าย ฉันแน่ใจว่าคุณรู้ว่าอะไรเป็นตัวบอกทางเลือก แต่ฉันจะพูดอย่างชัดเจน ตั้งค่าโมเดลการกู้คืนเป็นแบบเต็มหากคุณต้องการความสามารถในการกู้คืนไปยังจุดใดเวลาหนึ่งโดยพลการ ไม่ว่าจะด้วยวิธีใดก็ตามที่กำหนดค่าฐานข้อมูลไม่ถูกต้องตามที่เป็นอยู่


ขอขอบคุณ. ฉันต้องการทำสิ่งนี้ด้วยตัวเอง แต่ติดต่อพวกเขาด้วยและพวกเขาได้ตั้งค่าการกู้คืนและดำเนินการshrinkบนฐานข้อมูล นอกจากนี้ฉันไม่ต้องการการกู้คืนดังนั้นฉันจึงบอกให้พวกเขาตั้งค่าเป็นSIMPLEโหมด
Alireza Noori

1
นี้หน้า MSDNอธิบายถึงวิธีการตั้งค่ารูปแบบการกู้คืนเพื่อง่าย!
shekhar

147

นอกเหนือจากคำตอบของ Ben คุณสามารถลองใช้แบบสอบถามด้านล่างได้ตามความต้องการของคุณ

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 

อัพเดท Credit @ cema-sp

หากต้องการค้นหาชื่อไฟล์ฐานข้อมูลให้ใช้แบบสอบถามด้านล่าง

select * from sys.database_files;

8
เพิ่มเติม: เพื่อค้นหา {database-file-name}:select * from sys.database_files;
cema-sp

2
ฉันสามารถยืนยันได้ว่าการรักษานี้ใช้ได้ผล ควรเป็นคำตอบที่ได้รับการยอมรับ
garrettendi

2
ขอบคุณ @Mohit Dharmadhikari; ฉันลองสิ่งอื่น ๆ อีกมากมายรวมถึงการจัดสรรพื้นที่ดิสก์ให้มากขึ้นและเพิ่มขนาดไฟล์บันทึก แต่ก็ไม่มีอะไรทำงานจนกว่าฉันจะย่อไฟล์บันทึกที่มีอยู่ก่อน
Johnny

1
ขอบคุณมีประโยชน์มาก
Obakeng Molebatsi

3
ฉันเชื่อว่า {database-file-name} จะเท่ากับnameคอลัมน์สำหรับแถวของบันทึกจากข้อความค้นหานี้:select * from sys.database_files
Bob Horn

14

ในบางครั้งเมื่อพื้นที่ว่างบนดิสก์หมดข้อความ "บันทึกธุรกรรมสำหรับฐานข้อมูล XXXXXXXXXX เต็มเนื่องจาก" LOG_BACKUP "" จะถูกส่งกลับเมื่อคำสั่ง SQL อัพเดตล้มเหลว ตรวจสอบ diskspace ของคุณ :)


5

ข้อผิดพลาดนี้เกิดขึ้นเนื่องจากบันทึกธุรกรรมเต็มเนื่องจาก LOG_BACKUP ดังนั้นคุณจึงไม่สามารถดำเนินการใด ๆ กับฐานข้อมูลนี้ได้และในกรณีนี้ SQL Server Database Engine จะเพิ่มข้อผิดพลาด 9002

ในการแก้ปัญหานี้คุณควรทำสิ่งต่อไปนี้

  • สำรองฐานข้อมูลแบบเต็ม
  • ย่อขนาดล็อกไฟล์เพื่อลดขนาดฟิสิคัลไฟล์
  • สร้าง LOG_BACKUP
  • สร้างแผนการบำรุงรักษา LOG_BACKUP เพื่อบันทึกการสำรองข้อมูลบ่อยๆ

ฉันเขียนบทความพร้อมรายละเอียดทั้งหมดเกี่ยวกับข้อผิดพลาดนี้และวิธีแก้ไขที่บันทึกธุรกรรมสำหรับฐานข้อมูล 'SharePoint_Config' เต็มเนื่องจาก LOG_BACKUP


9
การโพสต์ข้อความแสดงข้อผิดพลาดเนื่องจากคำตอบของคุณไม่มีประโยชน์เลย คำตอบแบบลิงก์เท่านั้นยังรวมอยู่ใน StackOverflow คุณควรแยกข้อความที่เกี่ยวข้องจากลิงค์และอ้างถึงที่นี่ นี่เป็นสิ่งสำคัญอย่างยิ่งในกรณีที่ลิงก์เสียในอนาคตเนื่องจากลิงก์ทั้งหมดจะทำอย่างหลีกเลี่ยงไม่ได้
Dan Bechard

3

นอกจากนี้ยังสามารถเกิดขึ้นได้เมื่อไฟล์บันทึกถูก จำกัด ขนาด

คลิกขวาที่ฐานข้อมูลใน Object Explorer

เลือกคุณสมบัติ

เลือกไฟล์

ในบรรทัดบันทึกให้คลิกที่จุดไข่ปลาในคอลัมน์ Autogrowth / Maxsize

เปลี่ยน / ตรวจสอบขนาดไฟล์สูงสุดไม่ จำกัด

ป้อนคำอธิบายภาพที่นี่

หลังจากเปลี่ยนเป็นไม่ จำกัด ฐานข้อมูลก็กลับมามีชีวิตอีกครั้ง


1

ฉันได้รับข้อผิดพลาดเดียวกัน แต่มาจากงานแบ็กเอนด์ (งาน SSIS) เมื่อตรวจสอบการตั้งค่าการเติบโตของไฟล์บันทึกของฐานข้อมูลพบว่าไฟล์บันทึกมีขนาด จำกัด 1GB สิ่งที่เกิดขึ้นคือเมื่องานทำงานและขอให้เซิร์ฟเวอร์ SQL จัดสรรพื้นที่บันทึกเพิ่มเติม แต่ขีด จำกัด การเติบโตของบันทึกถูกปฏิเสธทำให้งานล้มเหลว ฉันแก้ไขการเติบโตของบันทึกและตั้งค่าให้เติบโต 50MB และ Unlimited Growth และข้อผิดพลาดก็หายไป

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.