我有一個長時間運行的進程,在整個持續時間內保持打開一個事務。數據庫的事務日誌已滿
我無法控制它的執行方式。
因爲事務在整個持續時間內保持打開狀態,所以當事務日誌填滿時,SQL Server不能增加日誌文件的大小。
因此該過程失敗,並顯示錯誤"The transaction log for database 'xxx' is full"
。
我試圖通過增加數據庫屬性中事務日誌文件的大小來防止這種情況,但是我得到了同樣的錯誤。
不知道接下來應該嘗試什麼。該過程運行幾個小時,因此玩試驗和錯誤並不容易。
任何想法?
如果有人有興趣,這個過程是在Microsoft Dynamics CRM 4.0.
組織進口有足夠的磁盤空間,我們在日誌中簡單記錄模式和之前已經拉開過程中備份的日誌。
- = - = - = - = - 更新 - = - = - = - = -
感謝所有到目前爲止的意見。下面是什麼使我相信,日誌就不會發展,是因爲打開的事務:
我收到以下錯誤......
Import Organization (Name=xxx, Id=560d04e7-98ed-e211-9759-0050569d6d39) failed with Exception:
System.Data.SqlClient.SqlException: The transaction log for database 'xxx' is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases
所以下面這個建議我去「log_reuse_wait_desc column in sys.databases
」並保持值「ACTIVE_TRANSACTION
」。
據微軟稱: http://msdn.microsoft.com/en-us/library/ms345414(v=sql.105).aspx
這意味着:
事務處於活動狀態(所有恢復模式)。 •日誌備份開始時可能存在長時間運行的事務。在這種情況下,釋放空間可能需要另一個日誌備份。有關更多信息,請參閱本主題後面的「長時間運行的活動事務」。
•事務被延遲(僅SQL Server 2005 Enterprise Edition及更高版本)。延遲事務實際上是一個活動事務,其回滾由於某些不可用的資源而被阻止。有關延期交易原因以及如何將其移出延期狀態的信息,請參閱延期交易。
我誤解了一些東西嗎?
- = - = - = - UPDATE 2 - = - = - = -
剛啓動了與設定爲30GB初始日誌文件的大小的過程。這將需要幾個小時才能完成。
- = - = - = - 最後的更新 - = - = - = -
這個問題實際上是由日誌文件消耗所有可用磁盤空間所致。在最後一次嘗試中,我釋放了120GB,它仍然使用了所有這些,最終失敗了。
我沒有意識到這是以前發生的,因爲當這個過程在一夜之間運行時,它會在失敗時回滾。這次我能夠在回滾之前檢查日誌文件的大小。
謝謝大家的意見。
重新「...並備份了日誌」....如果數據庫處於簡單模式,您將無法備份日誌,日誌備份不適用於簡單模式。它是否被批量記錄? – SqlACID
我備份了整個數據庫並對其進行了縮小,導致日誌縮小到1MB。然後,我將日誌文件的大小最初增加到20GB,現在增加到30GB。 – Jimbo