MSSQLSERVER_3056

適用於:SQL Server

詳細資料

屬性
產品名稱 SQL Server
事件識別碼 3056
事件來源 MSSQLSERVER
元件 SQLEngine
符號名稱 DMPDB_INVALID_FSDATA
訊息文字 備份作業在 FILESTREAM 容器中偵測到未預期的檔案。 備份作業將繼續,並包含檔案 '%ls'。

說明

如果 FILESTREAM 容器 (folder) 底下沒有 SQL Server 所建立的檔案,就會引發錯誤 3056。 備份作業會包含該檔案,但這會導致資料庫中的 filestream 元件狀態不一致。

警告

FILESTREAM 容器是由 SQL Server 管理的資料夾。 請勿在 FILESTREAM 資料夾中新增或移除檔案

使用者動作

錯誤訊息包含未預期的檔案名稱。 調查此檔案最終在此資料夾中的方式。

  1. 終止備份,並確保不會覆寫或遺失此資料庫的先前備份

  2. 針對備份失敗的資料庫執行完整的 DBCC CHECKB,併發生錯誤 3056。 請勿搭配 physical_only使用

  3. 徹底檢閱 DBCC CHECKB 輸出;錯誤可能會在不同階段期間偵測到,而且相同物件相隔數百行

    • CHECKDB 輸出的最後一行會提供錯誤的摘要計數。 請確定您已找到每個計數錯誤的個別訊息
    • 您是否在底部找到類似以下的錯誤: CHECKDB found 1 allocation errors and 1 consistency errors in database 'AG_Filestream'.
  4. 如果報告的唯一錯誤是 7908 7906 ,則可以找出錯誤中所報告的實際檔案。 錯誤看起來可能像這樣,例如:

    Msg 7906, Level 16, State 1, Line 8
    Database error: The file "\782fc3bb-dc63-4ab8-9de6-e9dfa36454d2\NO_USER_FILE_SHOULD_BE_HERE.txt" is not a valid FILESTREAM file in container ID 65537.
    Msg 7908, Level 16, State 1, Line 8
    Table error: The file "\782fc3bb-dc63-4ab8-9de6-e9dfa36454d2\NO_USER_FILE_SHOULD_BE_HERE.txt" in the rowset directory ID 3068163f-7398-4ae7-843c-67672e29c37e is not a valid FILESTREAM file in container ID    65537.
    

    注意

    建議您先在資料庫的備份/測試複本上測試這些步驟,再于生產系統上嘗試這些步驟。

  5. 若要尋找檔案,請執行此命令以尋找 FILESTREAM 群組的實體資料夾

    SELECT name, physical_name, state_desc, type_desc 
    FROM sys.database_files
    WHERE type_desc = 'FILESTREAM'
    
  6. 在 Windows 檔案總管中,開啟 7906 或 7908 錯誤中識別的子資料夾(例如 \782fc3bb-dc63-4ab8-9de6-e9dfa36454d2)

  7. 然後尋找錯誤訊息中識別的檔案(例如 NO_USER_FILE_SHOULD_BE_HERE.txt),並將此檔案的複本複製到臨時目錄做為備份。

  8. 確定您有複本之後,就可以從 資料夾移除檔案

  9. 採取步驟以瞭解此系統資料夾中新增此檔案的原因和方式,並採取步驟以防止進一步發生

    • 請確定有適當的許可權可供使用者存取此 FILESTREAM 資料夾(s)
    • 瞭解並確保沒有應用程式在 FILESTREAM 資料夾中建立檔案
  10. 執行新的 DBCC CHECKDB,並確定它不會引發任何錯誤

  11. 如果有任何其他 CHECKDB 錯誤,包括 7903,7904,7905,7907,則 SQL Server FILESTREAM 資料夾已損毀或竄改,而不只是無效新增外部檔案。 這種情況無法手動修復

    • 檢查您的硬體是否有任何問題並加以解決
    • 請確定您的系統受到惡意程式碼保護。 請注意,FILESTREAM 資料檔案應該從防毒軟體掃描中排除。 請參閱 改善 FILESTREAM 效能的建議和指導方針
    • 然後從狀況良好的資料庫備份還原

執行 DBCC CHECKDB

如果您執行 DBCC CHECKDB,可能會回報錯誤 7908 7906 ,但無法修復。

從備份還原

如果問題與硬體無關,且可用的已知清除備份,請從備份還原資料庫