當 SQL Server 因磁碟空間不足無法完成資料庫復原,會回傳錯誤 1105 並將 sysdatabases.status 設為「疑慮」。錯誤訊息典型如下:
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
-m:單一用戶模式,僅允許一個連線-f:最小配置啟動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
新增檔案提供額外空間,讓 SQL Server 能完成復原流程。
正常啟動服務,資料庫應自動完成復原並上線。
sp_resetstatus 僅關閉疑慮旗標,不釋放空間。後續須執行日誌備份與 DBCC SHRINKFILE 縮減實體檔案。
USE MASTER;
GO
ALTER DATABASE db_name SET RECOVERY SIMPLE;
GO
INSERT/UPDATE/DELETE 僅記錄最小資訊,日誌自動截斷-- 完整備份
BACKUP DATABASE db_name TO DISK = 'path\full.bak';
-- 排程每 15-60 分鐘日誌備份
BACKUP LOG db_name TO DISK = 'path\log.trn';
ALTER DATABASE db_name
MODIFY FILE (NAME = db_name_log, MAXSIZE = 10GB, FILEGROWTH = 512MB);
FILEGROWTH 過小導致頻繁擴展碎片MAXSIZE 防止佔滿磁碟sp_configure 'allow updates', 1; RECONFIGURE WITH OVERRIDE;UPDATE sysdatabases SET status = -32768 WHERE dbid = DB_ID('db_name');DBCC REBUILD_LOG('db_name', 'path\new_log.ldf');DBCC CHECKDB('db_name');警告:緊急模式操作可能導致交易一致性遺失,僅作為最後手段,且必須在完整備份後執行。