Ini masalah saya. Saya mencoba untuk memindahkan database ke server baru melalui pemulihan penuh, lalu cutover dengan cadangan / pemulihan diferensial cepat. Saya bisa melakukan pemulihan penuh tanpa masalah, tetapi ketika mengembalikan cadangan diferensial, saya mendapatkan peringatan berikut:
Msg 3127, Level 16, Negara 1, Baris 1 File 'Database_Log2' dari database yang dipulihkan 'DatabaseName' dibiarkan dalam keadaan mati karena database menggunakan model pemulihan sederhana dan file ditandai untuk akses baca-tulis. Oleh karena itu, hanya file baca-saja yang dapat dipulihkan oleh pemulihan sedikit demi sedikit.
Basis data dipulihkan dan dianggap online, tetapi operasi pencadangan gagal karena file DEFUNCT ini dengan kesalahan berikut:
Msg 3636, Level 16, State 2, Line 1 Terjadi kesalahan saat memproses metadata 'BackupMetadata' untuk database id 10 file id 6. Msg 3046, Level 16, State 2, Line 1 Metadata tidak konsisten telah ditemukan. Satu-satunya operasi pencadangan yang mungkin adalah pencadangan log-ekor menggunakan opsi WITH CONTINUE_AFTER_ERROR atau NO_TRUNCATE. Msg 3013, Level 16, Status 1, Baris 1 DATABASE CADANGAN diakhiri secara tidak normal.
Jika saya melakukan RESTORE FILELISTONLY pada penuh dan diferensial keduanya memberi saya output yang sama, yang cocok dengan apa yang saya lihat dari sys.database_files pada sumber database. Server adalah SQL2012 SP1, pada edisi Pengembang.
Saya dapat melakukan pencadangan penuh, dan segera setelah itu melakukan diferensial, dan mengembalikan file-file ini ke database yang berbeda pada server yang sama dan melihat masalah yang sama persis, jadi ada sesuatu dengan bagaimana diferensial dibuat yang menyebabkan ini. Jika saya mengembalikan cadangan penuh DENGAN PEMULIHAN tidak ada masalah. Saya tidak tahu apakah file ini dulu ada di database ini, tetapi sangat mungkin file ini dulu ada dan sudah dihapus sejak lama. Jika saya query sys.database_files pada database yang dipulihkan, file DEFUNCT memiliki nilai untuk drop_lsn, yang sepertinya mengkonfirmasi ini. Saat ini di sumber basis data hanya ada satu filegroup (PRIMARY), 4 file data dan satu file log.
Ada ide?
sumber
Jawaban:
Berikut adalah langkah-langkah untuk mereproduksi ini, diuji pada SQL 2012 SP1 Edisi Pengembang. Ini tidak terjadi pada SQL 2008. Untuk meringkas, database dibuat di SQL 2012 saat model database dalam pemulihan SEDERHANA, yang memiliki cadangan penuh diambil saat file log tambahan ada, tidak dapat membuat cadangan diferensial yang dapat digunakan jika file log tambahan tersebut pernah dihapus.
Saya mengirimkan item Connect untuk bug ini di sini . Satu-satunya cara saya dapat menghapus file yang mati ini adalah untuk melepaskan database, dan melampirkan kembali dengan ATTACH_REBUILD_LOG.
UPDATE: Bug yang membuat skenario ini dalam skrip repro saya tampaknya telah diperbaiki oleh KB ini: https://support.microsoft.com/en-us/kb/2830400 . Dari komentar itu muncul perbaikan tambahan tersedia untuk SQL2012 / 2014, skenario tampak sangat mirip: https://support.microsoft.com/en-us/kb/3009576
sumber