Ana veritabanı bozuk, örnek başlamıyor - seçeneklerim nelerdir?


11

Yardım! Ana veritabanım bozuk, SQL örneğini çevrimiçi bile edemiyorum! Sunucumu yedeklemek için seçeneklerim nelerdir?

Bir ana yedek var, ama "Ana veritabanını geri yükleme" MSDN sayfası örneği yapamam tek kullanıcı modunda başlatmak istiyor!

(Not: Bu soruyu SQL sürümünde belirtilmemiş olarak bırakıyorum, böylece daha yaygın olarak uygulanabilir bir referans olacak. DBA.SE ile ilgili benzer sorular var, ancak sunucunun başlayamadığı hiçbir şey yok.)


(Yorumlar veya diğer cevaplar kesinlikle hoş geldiniz, ancak bunu web'de başka bir yerde bulamadığım bazı yönler de dahil olmak üzere kapsamlı bir cevap sağlama girişiminde sordum.)
BradC

Yanıtlar:


12

İşte araştırabileceğim birkaç yol. Bunların hepsini yapmayın (bazıları aynı amacı gerçekleştirmek için farklı tekniklerdir), ancak dikkate almaya değer:

1. SQL Hata Günlüğünü doğrudan inceleyin

SQL hata günlüklerini içeren klasöre doğrudan göz atın ERRORLOGve SQL örneğinin neden başlamaması hakkında daha fazla bilgi almak için en son not defterini yükleyin . Belki de problemin ana veritabanında olmadığını göreceksiniz.

2. Örneği tek kullanıcı modunda başlatmayı deneyin

Burada (tek kullanıcı modu) ve (minimum yapılandırma modu) dahil olmak üzere SQL sunucusu için başlangıç ​​seçeneklerinin tam listesi . Diğer seçenekler, sorun buysa, ana veritabanının yolunu belirtmenize olanak tanır.-m-f

Örneği başlatabiliyorsanız , ana veritabanını geri yüklemek için bağladığınız MSDN makalesindeki adımları veya Thomas LaRock'un bu ayrıntılı adımını izleyin .

Başka bir uygulama yapmadan önce her zaman tek kullanıcı bağlantısını alırsa, önce başlatılmaması için SQL Agent'ı devre dışı bırakın. İkinci olarak, uygulama adını belirtmek için parametreyi kullanmak için bu sorudaki fikirlere bakın-m"Application Name" .

3. masterBaşka bir örneğe geri yükleme ve dosyalarını kopyalama

Bu belgesiz teknikten sadece bir tane daha bahsetmiştim , ancak geçen hafta sonu başarıyla kullandım, bu yüzden denemeye değer olabilir.

Örneği tek kullanıcı modunda başlatamıyorsanız, ancak aynı sürümü ve derlemeyi çalıştıran başka bir SQL örneğiniz varsa , bilinen son iyi ana veritabanı yedeklemesini ölü sunucunuzdan diğer örneğe geri yüklemeyi deneyin:

  • Elbette ( master_please_god_let_this_work) farklı bir ad olarak geri yükleyin , WITH MOVEböylece masteriyi sunucunuzun üzerine yazmazsınız
  • Geri yükleyin WITH NORECOVERY. Bunun gerekli olduğundan emin değilim, ancak diğer sunucunun geri yüklenen master'daki hiçbir şeyi değiştirmeyeceğini bildiğimden daha iyi hissettirdi
  • Çevrimdışı olarak ayarla: ALTER DATABASE [master_please_god_let_this_work] SET OFFLINE
  • Geri yüklenen MDF ve LDF dosyalarını iyi sunucudan ölü sunucuya kopyalayın
  • Bozuk ana dosyaları geri yüklenen sürümlerinizle değiştirmek için master.mdfve mastlog.ldfdosyalarını gerektiği gibi yeniden adlandırın
  • Parmaklarınızı çaprazlayın ve örneği başlatın
  • İsteğe bağlı: yeniden canlandırılan sunucuda yeni bir master geri yüklemesi yapın. Bunun gerekli olmadığından emin değiliz, çünkü değişmemeye oldukça dikkat ettik master.

4. Sistem veritabanlarını yeniden oluşturun

Aynı sürümü çalıştıran başka bir örneğiniz yoksa veya # 3'te listelenen belgesiz prosedürü kullanmaktan memnun değilseniz veya yedeklemeniz yoksamaster ( neden yedeklemeniz yok ?? ), Eğer yapabilirsiniz orijinalinden SQL sistem veritabanları disk takmak yeniden :

Setup.exe /ACTION=REBUILDDATABASE /...

Bu tamamlandığında, masterson iyi yedeklemenizden geri yüklemek için önceden bağlanmış adımları takip edebilirsiniz . Ayrıca msdb, tüm işlerinizi, iş planınızı ve iş geçmişinizi saklamak için son zamanlarda yedeklemenizi geri yüklemeniz gerekir .

5. Tüm USER veritabanlarını yeni (veya mevcut) bir SQL örneğine geri yükleme

Zaten çalışmakta olan başka bir mevcut örneğiniz varsa (uygun SQL sürümü, yeterli disk alanı), gerekirse diğer sorun giderme adımlarında çalışırken, muhtemelen en son yedeklemelerden veritabanı geri yüklemelerini başlatırım.

Yeni (veya yeniden yüklenen) örneğinizin aynı diske erişimi varsa, bunları yeni veritabanları olarak eklemek çok daha hızlıdır:

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

6. Üzerinde değişiklik yapın master

Başarılı bir şekilde geri masteryükledikten sonra (yukarıdaki tekniklerden herhangi biri aracılığıyla), az önce geri yüklediğiniz yedeklemeden sonra yapılmışsa, kaybolabilecek değişiklikleri araştırmanız gerekir:

  • Güvenlik değişiklikleri
  • Yeni veritabanları (dosyalar hala diskte olacak, sadece ekleyin)
  • Sunucu genelinde ayarlar

Bunları bulmanın sihirli bir yolu yok, eğer varsa, bu tür değişiklikler için kendi şirketinizin dokümantasyon yoluna geri dönmeniz gerekecek.


1
Güzel mesaj. +1. Master'ımı bozan, başka bir sunucudaki bir yedeği geri yükleyen ve daha sonra dosyaları eski sunucuya kopyalayan bir test yaptım. Sorunsuz çalıştı. Bu arada, master bozulurken 3411 hatasını aldım.
Racer SQL

Harika, bu tekniği doğruladığınız için teşekkürler. Benim durumumda, gerçek bir hatayla karşılaşmadım, ancak ana db'm, herhangi bir küme hizmeti zaman aşımı ayarının çok ötesinde, kurtarılması saatler sürüyordu.
BradC

1
@RafaelPiccinelli Master sunucudaki her şey (güvenlik, diğer veritabanları, vb.) Hakkında "meta-veri" tutar, böylece mantıklı. 5 ve 6 numaralı puanlarıma bakın. Bu dbs'yi yeniden eklemeniz ve yerine sahip olduğunuz güvenliği yeniden ayarlamanız gerekir. BTW, umarım hepsini laboratuvar ortamında yapıyorsunuz !!
BradC

Evet, bu yüzden test. Bir hata alıyorum ama muhtemelen depolama alanımda izinli. yine güzel yazı. Bu son yorumu sileceğim haha.
Racer SQL

2

Ben sadece içine koştu olası bir sorun ve çözüm eklemek istedim - başarısız bir Toplu Güncelleme (SQL2016 CU12) ve olay görüntüleyici ve errlog "Ana veritabanı kurtarılamıyor. SQL Server Master'ı tam bir yedeklemeden geri yükleyin, onarın veya yeniden oluşturun. ", ancak sonunda CU yürütülebilir dosyasını yeniden kullanırsam yükseltme durumunu" Tamamen yüklü değil "olarak algıladığını ve yalnızca tekrar güncelleyin, ardından başarıyla tamamlandı ve ana veritabanı ve diğerleri sorunsuz bir şekilde açıldı.


Listeye iyi bir ekleme; dahil ettiğiniz için teşekkürler.
BradC
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.