Microsoft SQL Server'ı barındıran bir makineyi güvenle yeniden başlatmak için hangi adımlar gereklidir?


23

Bir MS SQL Server örneği barındıran bir sunucuyu yeniden başlatırken verilerin bozulmasını önlemek için gerekli özel adımlar var mı?

Örneğin, yakın zamanda SQL servisini manuel olarak durdurma önerisiyle karşılaştım. Anladığım kadarıyla bu Windows shutdownişlemi tarafından ele alınmasıdır .

Bireysel insanların tavsiye edebileceği bir zillion adım olduğuna eminim, az önce bahsettiğim gibi, fakat eski veya batıl uygulamaları tekrarlamaktan kaçınmak istiyorum . Microsoft'tan ya da yaygın endüstri standartlarından herhangi bir öneri var mı?


Bu soru, bir makineyi yeniden başlatmanın kısa vadeli prosedürü ile ilgilidir. Bir makinenin kullanılmadığından emin olarak uzun süre kalıcı olarak çıkarılmadan önce yapılması gereken bir başka soru var .


"Yaygın endüstri standartlarını" istemek ve "bireysel insanların önerebileceği zillion adımlarını" istemekten bir anlam ifade etmiyorum. Muhtemelen onların endüstri standartları hesabı. Bunların her ikisi de geçerli sorular gibi görünüyor, ancak yetkili kaynak Microsoft makalesine bir bağlantı olacak.
Evan Carroll

Yanıtlar:


14

Sql sunucusunu yeniden başlatırken fantezi / endişeli veya korkmanıza gerek yok.

Sadece uzun süren işlemlerin olmadığından emin olun. En iyisi, sql sunucusunu, işletmenize etkiyi en aza indirgemek için bakım penceresi olarak da adlandırılan düşük / asgari bir aktivite döneminde konsol veya kapatma komutunu kullanarak yeniden başlatmaktır.

Herhangi bir DR kurulumunuz varsa ve aşağı olmak istemiyorsanız, en iyisi yerine çalışma ve pasif veya ikincil düğümü yeniden başlatmaktır.

Temiz Kapatma SQL Server aşağıdaki senaryolarda ortaya çıkar:

  • Servis konsolunu kullanarak sql sunucusunu durdurun.
  • Sunucunuzu kapatma
  • SSMS’de SHUTDOWN komutunu çalıştırıyor

Her şeyden önce, sql sunucusu tüm veritabanlarını temiz bir şekilde kapatır ve sonra tüm işlemleri taahhüt veya geri alma, kirli tüm sayfaları diske yazıp işlem günlüğüne bir giriş yazmayı içeren hizmeti sonlandırır.

Sql sunucusunun hatalı kapatılması:

  • nowait ile kapatma
  • güç kablosunu sunucunuzdan çekerek çıkarın (erişiminiz varsa).
  • görev yöneticisinden sqlserver.exe öldürülmesi
  • Hangi sql sunucusu ikili dosyalarının, exe'nin, sistem veritabanlarının üzerinde durduğu veya Windows sistem sürücüsü arızasının arızalanması. Genellikle C: \ sürücüsü.
  • sunucunun aşırı ısınmasının kapanmasına neden oluyor (nadiren gerçekleşmesi gerekir !!)

Yukarıda belirtildiği gibi uygunsuz bir şey yapmazsanız, SQL Server her zaman temiz bir kapatma yapmaya çalışır .

İyileşme aşamasında sahne arkasında ne olduğuna dair bazı gerçekten iyi okuma bağlantıları:


Harika detay, teşekkürler. "DR Kurulumu" ile ne demek istiyorsunuz?
Tüm İşlemlerden Jon,

@JonofAllTrades Felaket Kurtarma .. örn. Günlük sevkiyat, Veritabanı Aynalama veya Kümelenme gibi Yüksek Kullanılabilirliği bile düşünebilirsiniz
Kin Shah

1
Bu 'uygunsuz' kapatma senaryoları listesine tamamen katılıyor olsam da, İleride Yazma Günlüğü sayesinde veri bozulmalarının o zaman bile gerçekleşmemesi gerekiyor.
John Alan,

5

Bu sayfa tamamen ayrıntılı olarak açıklanmıştır.

Sorunuzun özellikle "Microsoft tarafından önerilenler var mı" diye sorması , bu konunun burada tartışılması için karşı-üretken olduğunu düşünmeye meyilliyim. Makale, süreci ayrıntılı olarak açıklar.

  • İkisinden birini kullanarak
    • Komut satırı
    • Güç kalkanı,
    • SQL Server Management Studio (GUI)
  • 2008, 2012, 2014, 2016 için.
  • Her ikisi için de
    • Veritabanı Motoru
    • veya, Ajan

Bu adımların tatmin edici olup olmadığı, istemediğiniz kanaatim olur. Yani doğru cevap her zaman orada en güncel olacak.

Hizmet kapatılmadan önce durdurma

SQL servislerini çalıştıran bir sunucuyu kapatmadan önce yapılması gerekli mi yoksa tavsiye edilmeli mi?

Hayır, gerekli değil. Windows Çekirdeği, SQL Server'a kapatma sinyalini gönderdiğinde, bunu güvenli bir şekilde yapacaktır ve sistem bunun tamamlanmasını bekleyecektir. Genel olarak konuşursak, güvenli bir şekilde kapanma kabiliyetine sahip herhangi bir şeyin manuel olarak kapatılması gerekmez ve tüm Microsoft uygulamalarının kendi API'lerini ve işlemleriniPRESHUTDOWN ya da SHUTDOWNaşamalarını bağlama prosedürlerini takip etmeleri gerekir . Kullandıklarını PRESHUTDOWNdüşündüğüm belgelerden ,

Bir sistemin kapatılacağını bildirir. Sistem kapatma sırasında yapılan sıkı zaman kısıtlamasının ötesinde temizleme işlemleri yapmak için ek süre gerektiren servisler bu bildirimi kullanabilir. Servis kontrol yöneticisi bu bildirimi, bu bildirime kaydolmuş SERVICE_CONTROL_SHUTDOWNolan uygulamalara bir bildirim göndermeden önce, kendisine kaydolmuş olan uygulamalara gönderir .

Bu bildirimi işleyen bir servis, servis durana kadar sistemin kapatılmasını veya sona erme ile belirtilen ön kapatma zaman aşımı aralığını engeller SERVICE_PRESHUTDOWN_INFO. Bu, kullanıcı deneyimini etkilediğinden, servisler bu özelliği yalnızca bir sonraki sistem başlangıcında veri kaybını veya önemli kurtarma sürelerini önlemek için kesinlikle gerekli olduğunda kullanmalıdır.

Gerektiği gibi, SQL Server'ın böyle çalıştığını varsayıyorum.


Neredeyse istediğim buydu . Bu belge, SQL Server motorunun nasıl kapatılacağını açıklar, ancak SQL servislerini çalıştıran bir sunucuyu kapatmadan önce gerekli ya da yapılması önerilen olup olmadığını cevaplamaz.
Tüm İşlemlerden Jon,

@JonofAllTrades tekrar güncellendi.
Evan Carroll

3

Tam olarak kapanma ve DB'nin bozulmasının önlenmesi söz konusu olduğunda değil. MS SQL Server çok olgun bir üründür ve basit bir 'kapanma' tarafından yolsuzluk sorununa yol açma olasılığı son senaryo olacaktır. CHECK DB çalıştırmayarak veya DB'nizde sağlama toplamı doğrulaması yaparak yolsuzluğa neden olma olasılığınız çok daha fazla.

Belki de doğrudan MDF / NDF / LDF dosyalarına doğrudan dokunan harici araçlara sahip olmak, dosyaları dosyalar arasında 'hareket ettirmeye çalışmak' veya bazı yazılımların dosyaları kapatırken kilitlemeye çalışmasını sağlamak gibi sorunlara neden olabilir. DB dosyalarını barındıran bir disk dolu olduğunda, özellikle 'db bozulmasına' neden olmadığında Windows Kümelemesi'nin berbat olduğunu gördüm.

Düzgün kapanma veya yük devretme işlemine yardımcı olmak istiyorsanız, bir kontrol noktası çalıştırabilir, DBCC CHECKDB uygulamasını sık sık çalıştırdığınızdan emin olun (en azından bir yedekten bozuk verileri kurtarabilmek için yeterli zaman) ve dış bağımlılıkların olup olmadığını kontrol edin. yansıtma gibi halledilir.

Herhangi bir uzmanın başka “en iyi uygulamaları” varsa, bunları duymayı çok isterdim, ancak son birkaç yıldır blogları ve çevrimiçi kaynakları araştırıyorsanız, veri bozulmalarında ve basit bir “kapatma / yeniden başlatma” konusunda pek bir şey görmedim.


-1

Bunu yapma yöntemim: 1) Tüm İşleri devre dışı bırakın. 2) Şu anda hiçbir işin yürütülmediğinden emin olun. 3) Aktiviteyi kontrol etmek için SP_Who3'ü sık sık çalıştırın, daha fazla bilgi için sp_whoisactive'i çalıştırın. 4) Etkinlik yoksa ve gördüğünüz tek şey geçerli sp_who3 sorgunuzsa 5) DB'leri çevrimdışı duruma getirin 6) Veritabanının en üstünde sağ tıklayın ve Durdur 7 düğmesine tıklayın. ) Yapıldı

PS. Bir PAGEIOLATCH / IOCOMPLETION veya SP_Who3'teki herhangi bir aktiviteniz varsa, veritabanlarınızı kurtarma moduna sokabileceğinden yukarıdakileri yapmayın.


Çok nadiren çoğu insan için veri tabanına olan tüm trafiği durdurmak uygun olur veya buna değer . Ayrıca, tüm veritabanlarını çevrimdışına almanın ne gibi bir fayda sağladığından da eminim - bu işlem için daha fazla zaman kazandıracak.
LowlyDBA

Bu hiç de iyi bir tavsiye değil. dbs'i çevrimdışına almayı neden önerirsin - eğer dbs HADR'de ise örneğin yansıtma veya AG ise, bunu yapamazsın.
Kin Shah,
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.