當 SQL Server 錯誤日誌或作業系統應用程式日誌中出現 1105 錯誤 時,通常意味著交易記錄檔已滿:
Can't allocate space for object syslogs in database 'dbname' because the logsegment is full. If you ran out of space in syslogs, dump the transaction log. Otherwise use ALTER DATABASE or sp_extendsegment to increase the size of the segment.
此問題可能發生於任何資料庫,包括 master 和 tempdb。
sqlservr -f -m
參數說明:
-f:最小配置啟動-m:單用戶模式(僅允許一個連線)注意:確保無其他服務搶佔該唯一連線。
EXEC sp_resetstatus 'database_name';
預期結果:
Database 'database_name' status reset!
WARNING: You must reboot SQL Server prior to Accessing this database!
USE master;
GO
-- 新增資料檔
ALTER DATABASE db_name
ADD FILE (
NAME = dbname_dat2,
FILENAME = 'F:\MSSQL\DATA\dbname_dat2.ndf',
SIZE = 2000MB,
FILEGROWTH = 50MB
);
GO
-- 新增記錄檔(關鍵步驟)
ALTER DATABASE db_name
ADD LOG FILE (
NAME = db_name_log2,
FILENAME = 'F:\MSSQL\DATA\db_name_log2.ldf',
SIZE = 1000MB,
FILEGROWTH = 20MB
);
GO
正常啟動服務,新增的檔案空間將允許資料庫完成恢復流程。
sp_resetstatus 僅移除置疑旗標,未解決根本問題。長期解決方案:
USE MASTER;
GO
ALTER DATABASE DB_NAME SET RECOVERY SIMPLE;
GO
效果: UPDATE、DELETE、INSERT 操作不再大量記錄至交易記錄檔,有效控制記錄檔增長。
BACKUP LOG 配合 TRUNCATE_ONLY(舊版本)或簡單模式下的自動截斷FILEGROWTH 為固定大小而非百分比DBCC SQLPERF(LOGSPACE) 定期監控記錄檔空間使用率掌握此流程,配合預防性維護,可將「置疑」風險降至最低,確保資料庫服務連續性。