Bagikan melalui


MSSQLSERVER_3056

Berlaku untuk: SQL Server

Detail

Atribut Nilai
Nama Produk SQL Server
ID Peristiwa 3056
Sumber Kejadian MSSQLSERVER
Komponen SQLEngine
Nama Simbolis DMPDB_INVALID_FSDATA
Teks Pesan Operasi pencadangan telah mendeteksi file tak terduga dalam kontainer FILESTREAM. Operasi pencadangan akan dilanjutkan dan menyertakan file '%ls'.

Penjelasan

Kesalahan 3056 muncul jika file ada di bawah kontainer FILESTREAM (folder) yang tidak dibuat oleh SQL Server. Operasi pencadangan akan mencakup file tersebut, tetapi ini akan menyebabkan status komponen aliran file yang tidak konsisten dalam database.

Peringatan

Kontainer FILESTREAM adalah folder yang dikelola oleh SQL Server. Jangan menambahkan atau menghapus file di folder FILESTREAM

Tindakan Pengguna

Pesan kesalahan menyertakan nama file yang tidak terduga. Selidiki bagaimana file ini berakhir di folder ini.

  1. Hentikan pencadangan Anda dan pastikan cadangan sebelumnya untuk database ini tidak ditimpa atau hilang

  2. Jalankan DBCC CHECKB penuh terhadap database yang pencadangannya gagal dengan kesalahan 3056. Jangan gunakan dengan physical_only

  3. Tinjau output DBCC CHECKB secara menyeluruh; kesalahan mungkin terdeteksi selama fase yang berbeda dan ratusan baris terpisah untuk objek yang sama

    • Baris terakhir output CHECKDB akan memberikan jumlah ringkasan kesalahan. Pastikan Anda telah menemukan pesan individual untuk setiap kesalahan yang dihitung
    • Apakah Anda menemukan kesalahan yang mirip dengan yang satu ini di bagian bawah: CHECKDB found 1 allocation errors and 1 consistency errors in database 'AG_Filestream'.
  4. Jika satu-satunya kesalahan yang dilaporkan adalah 7908 atau 7906, maka Anda dapat menemukan file aktual yang dilaporkan dalam kesalahan. Kesalahan mungkin terlihat seperti ini misalnya:

    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.
    

    Catatan

    Disarankan agar Anda menguji langkah-langkah ini pada salinan cadangan/pengujian database Anda sebelum Mencobanya pada sistem produksi.

  5. Untuk menemukan file, jalankan perintah ini untuk menemukan folder fisik grup FILESTREAM

    SELECT name, physical_name, state_desc, type_desc 
    FROM sys.database_files
    WHERE type_desc = 'FILESTREAM'
    
  6. Di Windows Explorer, buka subfolder yang diidentifikasi dalam kesalahan 7906 atau 7908 (misalnya \782fc3bb-dc63-4ab8-9de6-e9dfa36454d2)

  7. Kemudian temukan file yang diidentifikasi dalam pesan kesalahan (misalnya NO_USER_FILE_SHOULD_BE_HERE.txt), dan buat salinan file ini ke direktori sementara sebagai cadangan.

  8. Setelah memastikan Anda memiliki salinan, Anda dapat menghapus file dari folder

  9. Ambil langkah-langkah untuk memahami mengapa dan bagaimana file ini ditambahkan dalam folder sistem ini dan ambil langkah-langkah untuk mencegah kemunculan lebih lanjut

    • Pastikan izin yang tepat ada untuk akses pengguna ke folder FILESTREAM ini
    • Memahami dan memastikan tidak ada aplikasi yang membuat file di folder FILESTREAM
  10. Jalankan DBCC CHECKDB baru dan pastikan tidak menimbulkan kesalahan apa pun

  11. Jika ada kesalahan CHECKDB lainnya termasuk 7903.7904.7905.7907, maka telah terjadi kerusakan atau perusakan folder FILESTREAM SQL Server di luar penambahan file asing yang tidak valid. Situasi ini tidak dapat diperbaiki secara manual

    • Periksa perangkat keras Anda untuk masalah apa pun dan atasi masalah tersebut
    • Pastikan sistem Anda terlindungi dari malware. Perhatikan bahwa file data FILESTREAM harus dikecualikan dari pemindaian perangkat lunak antivirus. Lihat Rekomendasi dan panduan untuk meningkatkan performa FILESTREAM
    • Kemudian pulihkan dari pencadangan database yang sehat

Jalankan DBCC CHECKDB

Jika Anda menjalankan DBCC CHECKDB, ini dapat melaporkan kesalahan 7908 atau 7906, tetapi tidak dapat memperbaikinya.

Memulihkan dari Cadangan

Jika masalahnya tidak terkait dengan perangkat keras dan cadangan bersih yang diketahui tersedia, pulihkan database dari cadangan