[研究] SQL Server 資料庫 的交易紀錄已滿,因為發生 'LOG_BACKUP'。
[研究]縮小 SQL Server Database Transaction Log File 資料庫交易記錄檔 (.ldf) 大小
2022-04-14
環境:SQL Server 2019 Standard
最近連上某系統,發現無法登入;因為客製化的遠端錯誤訊息不足,所以直接登入連上該主機,在該伺服器主機上再測試一次,訊息顯示資料庫的交易紀錄已滿。
檢查存放資料庫檔案的 D:\,發現已經爆滿了,刪除部分其他檔案後,系統正常運作了。
********************************************************************************
DBCC SHRINKFILE (Transact-SQL) - SQL Server | Microsoft Docs
https://docs.microsoft.com/zh-tw/sql/t-sql/database-console-commands/dbcc-shrinkfile-transact-sql?view=sql-server-ver15
在 SQL Server Management Studio ( SSMS ) 上執行
use TestDB;
GO
ALTER DATABASE TestDB SET RECOVERY SIMPLE;
GO
DBCC SHRINKFILE (TestDB_Log, 1);
GO
ALTER DATABASE TestDB SET RECOVERY FULL;
GO
|
********************************************************************************
用圖形介面加上命令操作
(其實不會比上面方便)
********************************************************************************
變更預設 .ldf 檔案大小限制
預設約 2TB,但若磁碟分割沒有那麼大,或希望它不會超過多大,可以設定一下。
********************************************************************************
2024-01-26 補
請問為何發生 "資料庫 MyDB 的交易記錄已滿,因為發生 'LOG_BACKUP'。" ?
ChatGPT
這個錯誤訊息表示資料庫(MyDB)的交易日誌(log)已滿,這通常是由於交易日誌沒有進行備份 (LOG_BACKUP) 而導致的。
在SQL Server或其他資料庫管理系統中,交易日誌是用來記錄數據庫的所有變更的地方。當交易日誌檔案的大小達到其最大限制時,資料庫引擎就會停止對資料庫進行修改,除非進行交易日誌備份以釋放空間。
要解決這個問題,你可以執行交易日誌備份操作。這可以通過使用SQL Server Management Studio (SSMS) 或 Transact-SQL 語句進行。以下是一個使用 T-SQL 的簡單範例:
BACKUP LOG MyDB TO DISK = 'C:\Path\To\Backup\MyDB_LogBackup.bak';
請注意,這只是一個簡單的範例,實際情況可能需要根據你的環境和需求進行調整。請確保在執行備份操作之前仔細檢查和測試。
另外,也建議設定定期的交易日誌備份作業,以確保日誌文件不會再次達到最大限制。這可以透過定期執行類似的備份操作來實現。
**********
訊息 4208,層級 16,狀態 1,行 1
當復原模式為 SIMPLE 時,不允許使用陳述式 BACKUP LOG。請使用 BACKUP DATABASE 或使用 ALTER DATABASE 來變更復原模式。
訊息 3013,層級 16,狀態 1,行 1
BACKUP LOG 正在異常結束。
ChatGPT
這個錯誤訊息表明在資料庫的復原模式為 "SIMPLE" 時,是不允許使用陳述式 BACKUP LOG 的。在 "SIMPLE" 復原模式下,SQL Server自動處理交易日誌,並且不允許手動執行交易日誌備份。
如果你的資料庫在 "SIMPLE" 復原模式下,你不需要手動執行交易日誌備份。系統會自動管理交易日誌的截斷(截斷不再需要的部分),而不需要額外的操作。這種模式通常用於小型資料庫或不需要複雜還原的應用程序。
如果你確實需要執行交易日誌備份,你可能需要將資料庫的復原模式更改為 "FULL" 或 "BULK-LOGGED"。這可以使用 ALTER DATABASE 來實現,例如:
ALTER DATABASE MyDB SET RECOVERY FULL;
請注意,在 "FULL" 或 "BULK-LOGGED" 復原模式下,你可以使用 BACKUP LOG 進行交易日誌備份,但同時也需要定期進行交易日誌備份和日誌檔案的備份,以防止日誌檔案變得過大。
**********
訊息 4214,層級 16,狀態 1,行 2
無法執行 BACKUP LOG,因為沒有目前的資料庫備份。
訊息 3013,層級 16,狀態 1,行 2
BACKUP LOG 正在異常結束。
ChatGPT
這個錯誤訊息表明在嘗試執行 BACKUP LOG 操作時,系統發現沒有目前的資料庫備份。在 SQL Server 中,通常在執行交易日誌備份之前,需要先執行完整資料庫備份(FULL DATABASE BACKUP)。這是為了確保在還原操作中有完整的起點,可以使用完整備份的檔案還原到某個時間點。
以下是一個可能的步驟:
執行完整資料庫備份:
BACKUP DATABASE MyDB TO DISK = 'C:\Path\To\Backup\MyDB_FullBackup.bak';
執行交易日誌備份:
在執行 BACKUP LOG 之前,確保先執行了完整資料庫備份。
BACKUP LOG MyDB TO DISK = 'C:\Path\To\Backup\MyDB_LogBackup.bak';
請注意,這只是一個簡單的範例,實際情況可能需要根據你的環境和需求進行調整。確保在執行備份操作之前,了解你的系統的備份策略和需求。
如果你確定已經執行了完整資料庫備份,但仍然遇到這個錯誤,可能需要檢查備份文件的路徑是否正確,以及是否有足夠的權限進行備份操作。
最後成功的指令
ALTER DATABASE MyDB SET RECOVERY FULL;
BACKUP DATABASE MyDB TO DISK = 'C:\Temp\MyDB_FullBackup.bak';
BACKUP LOG MyDB TO DISK = 'C:\Temp\MyDB_LogBackup.bak';
ALTER DATABASE MyDB SET RECOVERY SIMPLE;
|
********************************************************************************
(完)
相關
[研究] SQL Server 資料庫 的交易紀錄已滿,因為發生 'LOG_BACKUP'。
[研究] 資料庫 'xxx' 的交易記錄已滿,因為發生 'LOG_BACKUP'。
[研究] SQL Server 2016 刪除 .ldf 檔案
[研究]檢視 SQL Server Database Transaction Log File 資料庫交易記錄檔 (.ldf) 內容
沒有留言:
張貼留言