SQL Server 2005 服務啟動失敗,錯誤日誌記錄:
FCB::Open failed: Could not open file C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\mastlog.ldf for file number 2. OS error: 50 (The request is not supported.)
或事件檢視器:檔案 "mastlog.ldf" 已壓縮,但未駐留在唯讀資料庫或檔案群組中。必須將此檔案解壓縮。
根因:資料/日誌檔案被 NTFS 壓縮屬性標記 (可能由磁碟清理/壓縮老舊檔案自動觸發)。SQL Server **嚴禁**資料/日誌/備份檔案使用 NTFS 壓縮/EFS 加密。解決:移除壓縮屬性 → 重啟服務。
C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG\ERRORLOG) 含 OS error: 50 / The request is not supported。C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\mastlog.ldf (或 master.mdf、其他 .mdf/.ndf/.ldf) → 「內容」→ 「進階」。
圖 1:檔案進階屬性顯示已啟用 NTFS 壓縮
FSCTL_GET_COMPRESSION / FSCTL_SET_COMPRESSION 衝突,回傳 STATUS_REQUEST_NOT_SUPPORTED (0xC00000BB / Win32 50)。ERROR_ENCRYPTION_FAILED。
; PowerShell 掃描 SQL 資料目錄壓縮屬性 (納入每日巡檢)
$SqlDataPaths = @(
"C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA",
"D:\SQLData",
"E:\SQLLog"
)
foreach ($path in $SqlDataPaths) {
if (Test-Path $path) {
Get-ChildItem $path -Recurse -File -Include *.mdf,*.ndf,*.ldf |
Where-Object { (Get-ItemProperty $_ -Name Attributes).Attributes -band [IO.FileAttributes]::Compressed } |
Select FullName, @{N='Compressed';E={$true}} |
Format-Table -AutoSize
}
}
| 錯誤做法 | 正確做法 |
|---|---|
| 啟用 NTFS 壓縮資料/日誌檔案 | 新增磁碟/擴充 LUN、移動資料/日誌檔案至大磁碟 (ALTER DATABASE ... MODIFY FILE + 離線移動)、啟用資料壓縮 (ROW/PAGE/Columnstore)、清理舊備份/日誌、啟用瞬間檔案初始化 (IFI) 減少初始佔用 |
| 啟用 EFS 加密資料檔案 | 使用 TDE (Transparent Data Encryption, Enterprise) 或 Always Encrypted (應用層) |
結論:**SQL Server 資料/日誌/備份檔案絕對不可啟用 NTFS 壓縮或 EFS 加密**。遇到服務啟動失敗 + OS Error 50,第一時間檢查檔案壓縮屬性,移除即可秒級恢復。