BarTender 系統資料庫交易記錄檔 (.LDF) 疑難排解
症狀
您發現系統資料庫異常變大,且維護時出現以下錯誤訊息:
Stored procedure: [dbo].[SpDeleteOlderRecords] Failed; Inner Message: The transaction log for database 'SystemDB' is full due to 'ACTIVE_TRANSACTION'
環境
BarTender 系統資料庫
診斷
在管理主控台的「管理任務 > 檢視資料庫大小...」中,請確認交易記錄檔案的大小是否偏小。
通常,BarTender 系統資料庫的 SQL Server 交易記錄檔(.LDF)會在資料庫維護期間增大,但維護完成後應該會縮小回原本的大小。不過,有時這個情況不會發生,導致 LDF 檔案持續變大。
解決方法
在對系統資料庫進行以下任何更動前,請務必先諮詢您的資料庫管理員。
建議您在進行以下任何更動前,先備份您的系統資料庫。
客戶的交易記錄檔空間不足,無法處理所有維護作業所需的交易資訊。維護作業包含三個步驟:
- 備份
- 刪除舊紀錄
- 重新組織或重建索引(可能需要大量交易記錄空間)
建議為交易記錄檔分配更多空間。此外,建議將復原模式設為「簡單」,這樣會大幅減少交易記錄所需空間。
步驟:
- 在 SQL Server Management Studio 中,右鍵點選您的系統資料庫 > 屬性 > 檔案,確認交易記錄檔的最大大小設定。
- 在系統資料庫屬性中,右鍵點選您的系統資料庫 > 屬性 > 選項 > 復原模式,確認復原模式已設為「簡單」。
- 如有需要,執行「手動解鎖」程序以解鎖維護(請參考下方說明)。
- 啟動管理主控台,執行維護作業。
- 維護完成後,檢查交易記錄檔案的成長情形。
- 再次進入資料庫屬性,將檔案大小限制設為磁碟上的實際檔案大小,而非無限制。
注意:如果因 SQL Server Express 的 10GB 限制,系統資料庫需要每週清理一次,這個大小可能還是不夠。此時建議使用完整版本的 SQL Server 並配置專用磁碟(可能是另一個 VMWare 映像檔或伺服器刀鋒)。請注意,這些更動無法取代定期備份與歸檔的必要性。
「手動解鎖」程序
- 停止「BarTender System Service」Windows 服務。
- 在 SQL Server Management Studio 的物件總管(通常在左側),展開您的資料庫,然後進入「Programmability」資料夾,選擇「Stored Procedures」資料夾。
- 執行下列程序(如果顯示影響 0 筆資料,請再執行一次):
exec SpDsUnlockMaintenance 0
- 找到「SpDeleteRecords」程序。
- 右鍵點選「SpDeleteRecords」,選擇「Script stored procedure as」 > 「ALTER to」 > 「New query editor window」
- 在新的編輯器中,將「ALTER PROC」那一行的「WITH EXECUTE AS 'dbo'」移除,使其變成:
ALTER PROC [dbo].[SpDeleteRecords](@pastUtcTicks bigint, @categories nvarchar(1024))
- 執行這個查詢(通常按 F5)以修改儲存程序。
- 重新啟動「BarTender System Service」Windows 服務。
縮小記錄檔大小
在執行大量釋放空間的操作(如 truncate table 或 drop table)後,您應該執行下列查詢來縮小目前資料庫的記錄檔大小。(請將下方腳本中的 [Database name] 替換為您的資料庫名稱)
-- 將系統資料庫的復原模式設為 SIMPLE,然後對交易記錄執行 DBCC SHRINKFILE 操作。
ALTER DATABASE "[Database name]" SET RECOVERY SIMPLE
DBCC SHRINKFILE ([Database name]_Log, 1);
GO
其他資源