當 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 等系統資料庫。
SQLSERVER -f -m-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
USE MASTER;
GO
ALTER DATABASE DB_NAME SET RECOVERY SIMPLE;
簡單模式下 UPDATE/DELETE/INSERT 不記錄完整日誌,避免日誌暴增。
USE MASTER;
GO
EXEC sp_dboption 'databasename', 'trunc. log on chkpt.', true;
或於企業管理員中設定資料庫屬性「截斷記錄檔於檢查點」。
sp_resetstatus 僅重置旗標,不修復實際資料損壞,後續必須執行 DBCC CHECKDB 驗證一致性。