Database SQL server terjebak dalam memulihkan keadaan

79

Saya memiliki server Sharepoint. Kami memiliki masalah dengan alat cadangan kami dan sekarang beberapa database saya macet dalam memulihkan kondisi!

Gambar menampilkan memulihkan database

Apakah mungkin untuk menghentikan proses pemulihan? dan juga, Bagaimana saya bisa memastikan integritas basis data tidak terganggu?

Pooya Yazdani
sumber

Jawaban:

129

Ini kemungkinan disebabkan oleh skrip pemulihan yang menambahkan WITH NORECOVERYparameter, untuk membuat basis data siap untuk transaksi log berlaku setelah pemulihan.

Basis data sekarang menunggu file log transaksi terbaru.

Anda dapat:

  1. Terapkan log transaksi terbaru , menggunakan RESTORE LOG database_name FROM backup_device WITH RECOVERY;... atau
  2. Kembalikan database lagi, tetapi kali ini menggunakan ... WITH RECOVERY;... atau
  3. Paksa basis data dari mode pemulihan dengan menjalankan: RESTORE DATABASE YourDb WITH RECOVERY;

Sebelum Anda melakukan ini, pastikan Anda memahami implikasi dari opsi ini. Anda dapat menyebabkan kehilangan data jika Anda tidak berhati-hati.

Lihat ini untuk detail:

Thomas Kejser
sumber
Ketika itu tidak berhasil, lihat dba.stackexchange.com/questions/11175/... - lagi, BANYAK PERINGATAN DOOM jika Anda tidak tahu apa yang Anda lakukan dan memahami risiko penuh kehilangan data. Tetapi jika Anda terikat pada server non-produksi, Anda memiliki cadangan yang baik untuk melakukan pemulihan baru, dan Anda dapat me-restart SQL pada server tersebut, itu berfungsi.
NateJ
6
+ Msgstr "Paksa database keluar dari mode pemulihan dengan menjalankan: KEMBALIKAN DATABASE YourDb DENGAN PEMULIHAN". 20 menit menggaruk dan memulai kembali layanan, kemudian diperbaiki dengan satu liner. Terima kasih!
Echilon
2
Saya terjebak dengan situasi yang sama kotak dev saya. Opsi 3 bekerja seperti pesona!
Moiz Tankiwala
Saya mencoba mengembalikan DB dari .bak ke DB baru , tetapi lupa mengubah nama file pada disk. Pemulihan gagal, meskipun bukan karena file digunakan oleh database yang ada, tetapi beberapa kesalahan lainnya. Ini mengacaukan DB yang ada (terjebak dalam memulihkan keadaan). # 3 masukkan kembali online dalam hitungan detik dan periksa semua data tampak baik-baik saja. Terima kasih!
CoDEmanX
44

Script T-SQL Sederhana untuk Memecahkan masalah ini:

tulis skrip ini di jendela Permintaan Baru dan jalankan:

RESTORE DATABASE [DataBase Name] WITH RECOVERY;
Sina
sumber
KEMBALIKAN DATABASE [database_name] DENGAN PEMULIHAN .... Berfungsi sempurna untuk saya. Terima kasih!
10
Berhati-hatilah untuk memahami implikasinya. Jika DB sedang menunggu pemulihan log yang dapat menyebabkan hilangnya data yang cukup besar.
David Spillett
2
Gagal bekerja karena kesalahan, "Basis data tidak dapat dipulihkan karena log tidak dipulihkan."
Ian Boyd
0

Saya baru saja mengalami situasi ini, dan penyembuhannya cukup mengejutkan:

ALTER DATABASE DBName SET ONLINE;

Rupanya pemulihan NetBackup yang pecah meninggalkannya dalam keadaan aneh. Tidak ada solusi lain yang berhasil (walaupun saya belum mencoba me-restart layanan SQL Server)

Saya akan berhati-hati dengan database, meskipun, secara teoritis begitu pemulihan dimulai, kemudian gagal, Anda bisa merusak data. Saya hanya akan mengembalikan database lagi, jadi tidak masalah bagi saya.

ErikE
sumber
Ini adalah jawaban yang salah untuk pertanyaan ini, jika Anda mencoba menetapkan database yang ada di 'Memulihkan' Online Anda akan mendapatkan kesalahan "ALTER DATABASE tidak diizinkan saat database berada dalam keadaan Memulihkan."
James Jenkins
Mungkin Anda tidak terbiasa dengan bagaimana di StackOverflow, kami terkadang menjawab pertanyaan yang sedikit berbeda dari yang diposting. Ini memberikan nilai karena orang sering datang ke pertanyaan yang mirip dengan mereka setelah mencari online. Mengenai klaim faktual Anda tentang ALTER DATABASEtidak diizinkan, saya yakinkan Anda bahwa dalam kasus saya, basis data sebenarnya menunjukkan keadaan memulihkan, dan menggunakan SET ONLINEternyata berfungsi . Jadi sadarilah bahwa Anda menyebut saya salah atau berbohong. Apakah itu yang benar-benar perlu Anda lakukan ketika alternatif tersedia?
ErikE
@ JamesJenkins Dan apa alternatifnya? Alternatifnya adalah hipotesis yang bisa ditampilkan oleh database dalam keadaan memulihkan tetapi sebenarnya tidak dapat dipulihkan. Atau bisa juga pada langkah terakhir pemulihan, dengan pemulihan benar-benar selesai sehingga sebenarnya bisa diatur ke ONLINEnegara. Singkat cerita, saya pikir komentar dan downvote Anda tidak sesuai untuk situs ini dan informasi Anda secara faktual salah karena tidak memenuhi syarat dengan data yang saya sajikan.
ErikE
0

Seperti yang kita ketahui, opsi pemulihan basis data standar adalah dengan Pemulihan yang memastikan basis data tersedia dan Online untuk digunakan setelah penyelesaian pemulihan basis data.

Contoh:

RESTORE DATABASE YourDB FROM DISK= 'C:\\Data\\YourDBBackup.bak'
WITH RECOVERY
GO

Mari kita lihat poin penting tentang Restore dengan NO Recovery

  • Basis data tidak dapat digunakan
  • Tetap dalam mode pemulihan
  • Urutan pemulihan selanjutnya bisa dilakukan
  • Tidak mengembalikan transaksi yang tidak dikomit

Kembalikan Dengan NoRecovery

Opsi ini terutama digunakan ketika beberapa cadangan akan dipulihkan. Itu berarti, ketika Anda menjalankan perintah restore dengan opsi norecovery yang berarti, database tidak dirilis kepada pengguna sampai cadangan terakhir secara berurutan dipulihkan. Dengan cadangan terakhir, opsi Pemulihan digunakan dan basis data online.

Contoh:

RESTORE DATABASE YourDB FROM DISK - 'C:\\Data\\Backup_part1.bak' 
WITH NORECOVERY
GO

Lalu:

RESTORE LOG YourDB FROM DISK = 'C:\\Data\\BackupLog-part2.trn'
WITH RECOVERY
GO
Priyanka
sumber
1
Anda mungkin memiliki salah ketik dalam jawaban Anda. Bagian yang ditandai ... tentang Pulihkan dengan Pemulihan mencantumkan semua opsi yang berlaku untuk RESTORE ...WITH NORECOVERYopsi tersebut. Bisakah Anda memeriksanya?
hot2use