首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 2005 服務無法啟動:資料/日誌檔案被 NTFS 壓縮導致錯誤 17058 解決實錄

     編輯:關於SqlServer

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 加密。解決:移除壓縮屬性 → 重啟服務。

故障現象

  • SSMS 無法連線,顯示「無法開啟與伺服器的連線」。
  • 服務管理員中 SQL Server (MSSQLSERVER) 狀態為「已停止」,啟動後立即停止。
  • 錯誤日誌 (C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG\ERRORLOG) 含 OS error: 50 / The request is not supported。

根因確認

  1. 開啟檔案總管 → 定位資料目錄:C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\
  2. 右鍵 mastlog.ldf (或 master.mdf、其他 .mdf/.ndf/.ldf) → 「內容」→ 「進階」。
  3. 發現 「壓縮內容以節省磁碟空間」 核取方塊被勾選。

圖 1:檔案進階屬性顯示已啟用 NTFS 壓縮

解決步驟

  1. 取消勾選 「壓縮內容以節省磁碟空間」 → 「確定」。
  2. 提示「套用變更至這個資料夾、子資料夾和檔案」 → 選擇 「僅套用到這個檔案」 (或全資料夾,視情況)。
  3. 對資料目錄下 **所有 .mdf / .ndf / .ldf** 重複上述操作 (建議全資料夾遞迴取消壓縮)。
  4. 重啟 SQL Server 服務 → 正常啟動成功。

為何 NTFS 壓縮會導致 SQL Server 失效

  • SQL Server 使用非緩衝 I/O (FILE_FLAG_NO_BUFFERING) 直接存取磁碟,要求檔案系統提供**固定、連續的實體簇區對應**。
  • NTFS 壓縮將檔案內容以壓縮單位 (Compression Unit, 16 clusters) 儲存,**讀寫需解壓縮/壓縮**,破壞固定對應,導致 FSCTL_GET_COMPRESSION / FSCTL_SET_COMPRESSION 衝突,回傳 STATUS_REQUEST_NOT_SUPPORTED (0xC00000BB / Win32 50)。
  • EFS 加密同理,會導致 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,第一時間檢查檔案壓縮屬性,移除即可秒級恢復。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved