2014-01-20 150 views
30

我有一個Asp.Net MVC 5網站,在共享主機方案中使用EntityFramework codefirst方法。它使用開放源碼WebbsitePanel作爲控制面板,其SQL Server面板有一定的限制。今天,當我想編輯數據庫,我遇到了這個錯誤:「由於共享主機中的'LOG_BACKUP'」數據庫的事務日誌已滿

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

我尋找了一圈,發現不少相關答案像thisthisthis但問題是,他們建議在運行數據庫的查詢。我試圖運行

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

與Visual Studio(在HomeController),但我得到以下錯誤:

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

我怎樣才能解決我的問題?我應該聯繫支持團隊(這對我的主機來說有點窮)還是我可以自己解決?

+0

在沒有事務的情況下執行ALTER。 – usr

+0

@usr我該怎麼做? –

+0

它的數據庫問題,縮小數據庫可能工作。請一位DBA幫助你解決這個問題。 –

回答

22

致電您的託管公司,讓他們設置常規日誌備份或將恢復模式設置爲簡單。我相信你知道什麼通知選擇,但無論如何我會明確的。如果您需要恢復到任意時間點的能力,請將恢復模式設置爲「已滿」。無論哪種方式,數據庫都會按原樣錯誤配置。

+0

謝謝。我想自己做這件事,但也聯繫了他們,他們已經設置了恢復並對數據庫進行了縮減。另外,我不需要恢復,所以我告訴他們把它設置爲「SIMPLE」模式。 –

+0

此[MSDN頁面](https://docs.microsoft.com/zh-cn/sql/relational-databases/backup-restore/view-or-change-the-recovery-model-of-a-database-sql -server)解釋瞭如何將恢復模型設置爲簡單! – shekhar

6

發生此錯誤是因爲事務日誌由於LOG_BACKUP而變滿。因此,您無法對此數據庫執行任何操作,並且在這種情況下,SQL Server數據庫引擎將引發9002錯誤。

爲了解決這個問題,你應該做到以下幾點

  • 以一個完整的數據庫備份。
  • 收縮日誌文件以減少物理文件大小。
  • 創建一個LOG_BACKUP。
  • 創建一個LOG_BACKUP維護計劃以經常備份日誌。

我寫的所有細節關於此錯誤以及如何The transaction log for database ‘SharePoint_Config’ is full due to LOG_BACKUP

+2

發佈錯誤消息作爲您的答案根本沒有什麼幫助。在StackOverflow上,只有鏈接的答案也不被贊同。您應該從鏈接中提取相關文本並在此處引用。如果鏈接將來消失,這一點尤其重要,因爲所有鏈接都不可避免地會這樣做。 – Dan

1

解決它,我得到了同樣的錯誤,但是從後端作業(SSIS作業)的文章。在檢查數據庫的日誌文件增長設置時,日誌文件的增長有限,爲1GB。所以發生了什麼是作業運行時,它要求SQL服務器分配更多的日誌空間,但日誌的增長限制下降導致作業失敗。我修改了日誌增長並將其設置爲增長50MB和無限增長,錯誤消失。

28

除了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 

更新信用@ CEMA-SP

要找到數據庫文件名使用下面的查詢

select * from sys.database_files; 
+2

其他:找到{數據庫文件名}:'select * from sys.database_files;' –

+0

有沒有一種方法可以在SQL Server實例基礎上完成(以便它適用於所有數據庫)? – nawfal

-3

這個錯誤我在客戶端系統遇到過,我們有空間cr unch在服務器位置本身。由此我們無法收縮日誌或進行完整備份。

以下是使用的解決方法:#從上面給出的Mohit解決方案對此特定場景#copied。

USE DBNAME;
GO

ALTER DATABASE DBNAME SET RECOVERY SIMPLE;
GO

DBCC SHRINKFILE('DBNAME',10);
GO

ALTER DATABASE DBNAME SET RECOVERY FULL;
GO

+0

已發佈 – user5226582

1

偶爾當磁盤空間不足時,當更新SQL語句失敗時,將返回由於'LOG_BACKUP'導致數據庫XXXXXXXXXX事務日誌已滿的消息「。 檢查你的磁盤空間:)

相關問題