Database master rusak, contoh tidak akan mulai - apa saja pilihan saya?

11

Tolong! Basis data master saya rusak, saya bahkan tidak bisa membawa contoh SQL online! Apa pilihan saya untuk membuat cadangan server saya?

Saya memang memiliki cadangan master, tetapi halaman MSDN "Memulihkan database master" meminta saya untuk memulai instance dalam mode single-user, yang tidak bisa saya lakukan!

(Catatan: Saya membiarkan pertanyaan ini tidak ditentukan untuk versi SQL, sehingga menjadi referensi yang lebih luas berlaku. Ada beberapa pertanyaan serupa di DBA.SE, tetapi tidak ada yang melibatkan server yang tidak dapat memulai.)

BradC
sumber
(Komentar atau jawaban lain tentu saja diterima, tetapi saya menanyakan hal ini dalam upaya memberikan jawaban yang komprehensif, termasuk beberapa aspek yang tidak dapat saya temukan di tempat lain di web.)
BradC

Jawaban:

12

Berikut adalah beberapa jalan yang akan saya selidiki. Jangan lakukan semua ini (beberapa di antaranya adalah teknik yang berbeda untuk mencapai tujuan yang sama), tetapi patut dipertimbangkan:

1. Periksa SQL Error Log secara langsung

Telusuri langsung ke folder yang berisi log kesalahan SQL dan muat yang terbaru ERRORLOGke notepad untuk mendapatkan detail lebih lanjut tentang mengapa contoh SQL tidak akan mulai. Mungkin Anda akan menemukan masalahnya bukan pada database master sama sekali.

2. Cobalah untuk memulai mesin virtual dalam mode pengguna tunggal

Berikut adalah daftar lengkap opsi startup untuk SQL server , termasuk -m(mode pengguna tunggal) dan -f(mode konfigurasi minimal). Opsi lain memungkinkan Anda menentukan jalur untuk database master, jika itu masalahnya.

Jika Anda bisa memulai instance, ikuti langkah-langkah di artikel MSDN yang Anda tautkan untuk memulihkan database master, atau penelusuran terperinci ini oleh Thomas LaRock .

Jika aplikasi lain selalu meraih koneksi pengguna tunggal sebelum Anda bisa, pertama-tama nonaktifkan Agen SQL agar tidak dimulai. Kedua, lihat ide-ide pada pertanyaan ini untuk menggunakan -m"Application Name"parameter untuk menentukan nama aplikasi.

3. Kembalikan masterke instance lain dan salin file-nya

Saya hanya menemukan satu lagi penyebutan teknik tidak berdokumen ini, tetapi saya berhasil menggunakannya pada akhir pekan lalu, jadi mungkin patut dicoba.

Jika Anda tidak dapat memulai instance dalam mode single-user, tetapi Anda memiliki instance SQL lain yang menjalankan rilis dan build yang sama persis , coba pulihkan backup database master baik terakhir yang diketahui dari server Anda yang mati ke instance lain:

  • Pulihkan sebagai nama yang berbeda, tentu saja ( master_please_god_let_this_work), WITH MOVEsehingga Anda tidak menimpa masterserver yang baik
  • Kembalikan WITH NORECOVERY. Tidak yakin ini perlu, tetapi membuat saya merasa lebih baik karena saya tahu server lain tidak akan mengubah apa pun di master yang dipulihkan
  • Setel ke offline: ALTER DATABASE [master_please_god_let_this_work] SET OFFLINE
  • Salin file MDF dan LDF yang dipulihkan dari server yang baik ke server yang mati
  • Ganti nama file master.mdfdan mastlog.ldfjika perlu untuk mengganti file master yang buruk dengan versi yang dipulihkan
  • Silangkan jari Anda dan mulai mesin virtual
  • Opsional: lakukan pemulihan master baru di server yang dihidupkan kembali. Tidak yakin ini perlu, karena kami cukup berhati-hati untuk tidak berubah master.

4. Bangun kembali basis data sistem

Jika Anda tidak memiliki instance lain yang menjalankan versi yang sama, atau jika Anda tidak nyaman menggunakan prosedur tidak terdaftar yang tercantum dalam # 3, atau jika Anda tidak memiliki cadangan master( mengapa Anda tidak memiliki cadangan ?? ), Anda dapat membangun kembali database sistem SQL dari disk instalasi asli :

Setup.exe /ACTION=REBUILDDATABASE /...

Ketika ini selesai, Anda dapat mengikuti langkah-langkah yang ditautkan sebelumnya untuk memulihkan masterdari cadangan baik terakhir Anda. Anda juga perlu mengembalikan cadangan terbaru msdbuntuk menjaga semua pekerjaan Anda, jadwal pekerjaan, dan riwayat pekerjaan.

5. Kembalikan semua database USER ke instance SQL baru (atau yang sudah ada)

Jika Anda sudah memiliki instance lain yang sudah berjalan (versi SQL yang tepat, ruang disk yang cukup), saya mungkin akan memulai pemulihan database dari cadangan terbaru saat saya sedang mengerjakan langkah pemecahan masalah lainnya di atas, kalau-kalau saya membutuhkannya.

Jika instance baru Anda (atau diinstal ulang) memiliki akses ke disk yang sama, itu jauh lebih cepat untuk hanya melampirkannya sebagai database baru:

CREATE DATABASE foo 
ON (FILENAME = 'D:\data\foo.mdf'),
   (FILENAME = 'D:\data\foo_log.ldf')
FOR ATTACH;

6. Lakukan kembali setiap perubahan master

Setelah Anda berhasil memulihkan master(melalui salah satu teknik di atas), Anda perlu menyelidiki setiap perubahan yang mungkin hilang, jika dilakukan setelah cadangan yang baru saja Anda pulihkan:

  • Perubahan keamanan
  • Basis data baru (file-file itu masih ada di disk, cukup lampirkan)
  • Pengaturan di seluruh server

Tidak ada cara ajaib untuk menemukan ini, Anda harus kembali ke jejak dokumentasi perusahaan Anda sendiri untuk jenis perubahan ini, jika Anda memilikinya.

BradC
sumber
1
Pos yang bagus. +1. Saya membuat tes yang merusak master saya, memulihkan cadangan di server lain, dan kemudian menyalin file ke server lama. Itu bekerja tanpa masalah. Ngomong-ngomong, saya mendapatkan kesalahan 3411 saat master rusak.
Pembalap SQL
Bagus, terima kasih telah memverifikasi teknik itu. Dalam kasus saya, saya tidak pernah mendapatkan kesalahan yang sebenarnya, tetapi master db saya membutuhkan waktu berjam-jam untuk pulih, jauh melampaui pengaturan batas waktu layanan cluster yang mungkin.
BradC
1
@RafaelPiccinelli Master menyimpan "meta-data" tentang semua yang ada di server (keamanan, database lain, dll), sehingga masuk akal. Lihat poin saya # 5 dan # 6. Anda harus memasang kembali dbs tersebut dan mengatur ulang keamanan yang Anda miliki. BTW, saya harap Anda melakukan ini semua di lingkungan lab !!
BradC
Ya, itu sebabnya tes. Saya mendapatkan kesalahan tetapi mungkin dengan izin di penyimpanan saya. sekali lagi, posting yang bagus. Saya hanya akan menghapus komentar terakhir ini haha.
Pembalap SQL
2

Saya hanya ingin menambahkan kemungkinan masalah & solusi yang baru saja saya temui - Saya memiliki situasi yang sama selama Pembaruan Kumulatif yang gagal (SQL2016 CU12) dan pesan di penampil acara dan errlog di mana mengatakan "Tidak dapat memulihkan database master. SQL Server adalah tidak dapat berjalan. Kembalikan master dari cadangan penuh, perbaiki, atau bangun kembali. ", namun saya akhirnya menemukan bahwa jika saya hanya memutar ulang executable CU, ia mendeteksi status pemutakhiran sebagai" Tidak terinstal sempurna "dan memungkinkan saya untuk hanya menjalankan perbarui lagi, setelah itu selesai dengan sukses dan master database dan semua lainnya dibuka tanpa masalah.

B. Allen
sumber
Tambahan yang bagus untuk daftar; terima kasih sudah memasukkannya.
BradC