Bisakah saya memulihkan database SQL dari Siaga / Hanya Baca tanpa file siaga?

8

Apakah ada cara untuk memulihkan database SQL dari mode Standby / Read-Only jika "file siaga" hilang?

(Saya melihat beberapa referensi menyebut ini file TUF dalam skenario pengiriman log, tetapi dalam kasus saya, itu hanya pemulihan manual dan file siaga memiliki ekstensi BAK.)

Melakukan "KEMBALIKAN DATABASE foo WITH RECOVERY" menghasilkan kesalahan fatal:

During startup of warm standby database 'foo', its standby file
('path\filename.bak') was inaccessible to the RESTORE statement.
The operating system error was '5(Access is denied.)'. Diagnose the
operating system error, correct the problem, and retry startup.

Pemulihan dilakukan beberapa saat yang lalu, dan sayangnya file siaga ada di folder cadangan dan dihapus oleh rutin pembersihan folder kami. Tidak ada salinan file di media lain mana pun. Cadangan asli yang digunakan untuk memulihkan ke titik ini juga sudah lama hilang.

Untungnya ini bukan masalah besar bagi kami (itu adalah pengembalian sementara), tetapi saya tidak dapat menemukan referensi lain yang berguna di luar sana tentang pertanyaan ini, selain "jangan hapus file itu".

Jika sampai pada itu, saya kira saya bisa skrip seluruh database, atau menggunakan SSIS untuk menyalin semua objek ke wadah database baru, karena saya memiliki salinan read-only dari db di depan saya.

Adakah cara untuk memperbaiki masalah ini? Saya tentu tidak berharap bahwa saya dapat membalikkannya kembali ke "memulihkan" dan terus melakukan pemulihan berikutnya atau apa pun, saya hanya ingin memaksanya ke mode online normal dalam keadaan saat ini, sehingga saya dapat melakukan hal-hal seperti mengubah izin, atau mengubah mode pemulihan, atau mengambil cadangan lengkap baru atau sesuatu.

BradC
sumber

Jawaban:

7

Ternyata itu bisa dilakukan jika Anda menggunakan CONTINUE_AFTER_ERROR

RESTORE DATABASE foo WITH RECOVERY, CONTINUE_AFTER_ERROR

Saya masih mendapatkan peringatan ketika saya mencobanya tetapi kemudian melakukan CHECKDB dan tidak menerima kesalahan.

RESTORE WITH CONTINUE_AFTER_ERROR was successful but some damage was encountered. Inconsistencies in the database are possible.
RESTORE DATABASE successfully processed 0 pages in 4.180 seconds (0.000 MB/sec).
Msg 3441, Level 17, State 1, Line 13
During startup of warm standby database 'foo' (database ID 46), its standby file ('C:\MSSQL\Backup\foo_standby') was inaccessible to the RESTORE statement. The operating system error was '2(The system cannot find the file specified.)'. Diagnose the operating system error, correct the problem, and retry startup.

Mengingat peringatan itu, saya tidak 100% yakin apakah saya akan mencobanya pada basis data produksi di mana saya tidak memiliki cadangan yang baik. Mengingat bahwa ini adalah pengembalian sementara, mungkin ada baiknya mencobanya.

Kenneth Fisher
sumber