MSSQLSERVER_3056
適用於:SQL Server
詳細資料
屬性 | 值 |
---|---|
產品名稱 | SQL Server |
事件識別碼 | 3056 |
事件來源 | MSSQLSERVER |
元件 | SQLEngine |
符號名稱 | DMPDB_INVALID_FSDATA |
訊息文字 | 備份作業在 FILESTREAM 容器中偵測到未預期的檔案。 備份作業將繼續,並包含檔案 '%ls'。 |
說明
如果 FILESTREAM 容器 (folder) 底下沒有 SQL Server 所建立的檔案,就會引發錯誤 3056。 備份作業會包含該檔案,但這會導致資料庫中的 filestream 元件狀態不一致。
警告
FILESTREAM 容器是由 SQL Server 管理的資料夾。 請勿在 FILESTREAM 資料夾中新增或移除檔案
使用者動作
錯誤訊息包含未預期的檔案名稱。 調查此檔案最終在此資料夾中的方式。
終止備份,並確保不會覆寫或遺失此資料庫的先前備份
針對備份失敗的資料庫執行完整的 DBCC CHECKB,併發生錯誤 3056。 請勿搭配 physical_only使用
徹底檢閱 DBCC CHECKB 輸出;錯誤可能會在不同階段期間偵測到,而且相同物件相隔數百行
- CHECKDB 輸出的最後一行會提供錯誤的摘要計數。 請確定您已找到每個計數錯誤的個別訊息
- 您是否在底部找到類似以下的錯誤:
CHECKDB found 1 allocation errors and 1 consistency errors in database 'AG_Filestream'.
如果報告的唯一錯誤是 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 aaaabbbb-0000-cccc-1111-dddd2222eeee is not a valid FILESTREAM file in container ID 65537.
注意
建議您先在資料庫的備份/測試複本上測試這些步驟,再於生產系統上嘗試這些步驟。
若要尋找檔案,請執行此命令以尋找 FILESTREAM 群組的實體資料夾
SELECT name, physical_name, state_desc, type_desc FROM sys.database_files WHERE type_desc = 'FILESTREAM'
在 Windows 檔案總管中,開啟 7906 或 7908 錯誤中識別的子資料夾(例如 \782fc3bb-dc63-4ab8-9de6-e9dfa36454d2)
然後尋找錯誤訊息中識別的檔案(例如NO_USER_FILE_SHOULD_BE_HERE.txt),並將此檔案的複本複製到暫存目錄做為備份。
確定您有複本之後,就可以從資料夾移除檔案
採取步驟以瞭解此系統資料夾中新增此檔案的原因和方式,並採取步驟以防止進一步發生
- 請確定有適當的權限可供使用者存取此 FILESTREAM 資料夾(s)
- 瞭解並確保沒有應用程式在 FILESTREAM 資料夾中建立檔案
執行新的 DBCC CHECKDB,並確定它不會引發任何錯誤
如果有任何其他 CHECKDB 錯誤,包括 7903,7904,7905,7907,則 SQL Server FILESTREAM 資料夾已損毀或竄改,而不只是無效新增外部檔案。 這種情況無法手動修復
- 檢查您的硬體是否有任何問題並加以解決
- 請確定您的系統受到惡意代碼保護。 請注意,FILESTREAM 數據檔應該從防病毒軟體掃描中排除。 請參閱 改善 FILESTREAM 效能的建議和指導方針
- 然後從狀況良好的資料庫備份還原
執行 DBCC CHECKDB
如果您執行 DBCC CHECKDB,可能會回報錯誤 7908 或 7906,但無法修復。
從備份還原
如果問題與硬體無關,且可用的已知清除備份,請從備份還原資料庫