Langkah-langkah apa yang diperlukan untuk me-restart mesin hosting Microsoft SQL Server dengan aman?

24

Apakah ada langkah-langkah khusus yang diperlukan untuk mencegah kerusakan data saat memulai ulang server yang menjalankan instance MS SQL Server?

Sebagai contoh, saya baru-baru ini menemukan rekomendasi untuk menghentikan layanan SQL secara manual. Pemahaman saya adalah bahwa ini ditangani oleh shutdownproses Windows .

Saya yakin ada jutaan langkah yang mungkin disarankan orang secara perorangan, seperti yang baru saja saya sebutkan, tetapi saya ingin menghindari praktik usang atau takhayul yang berulang . Apakah ada rekomendasi dari Microsoft, atau standar industri yang tersebar luas?


Pertanyaan ini berkaitan dengan prosedur jangka pendek me-reboot mesin. Ada pertanyaan lain mengenai prosedur jangka panjang untuk memastikan bahwa sebuah mesin tidak digunakan, sebelum menurunkannya secara permanen.

Jon dari Semua Perdagangan
sumber
Saya tidak masuk akal untuk meminta "standar industri yang tersebar luas" dan tidak menginginkan "miliaran langkah yang mungkin direkomendasikan orang secara individu". Itu mungkin akun mereka tentang standar industri. Kedua pertanyaan ini sepertinya pertanyaan yang valid, tetapi sumber otoritatif akan menjadi tautan ke artikel Microsoft.
Evan Carroll

Jawaban:

14

Anda tidak perlu khawatir / khawatir atau takut ketika Anda me-restart server sql.

Pastikan Anda tidak memiliki transaksi yang berjalan lama. Yang terbaik adalah memulai kembali sql server menggunakan perintah console atau shutdown selama periode aktivitas rendah / minimum yang disebut juga jendela pemeliharaan untuk meminimalkan dampak pada bisnis Anda.

Jika Anda memiliki pengaturan DR dan Anda tidak ingin turun, maka yang terbaik adalah failover dan kemudian restart node pasif atau sekunder.

Bersihkan Shutdown SQL Server terjadi dalam skenario di bawah ini:

  • Hentikan sql server menggunakan konsol Layanan.
  • Mematikan server Anda
  • menjalankan perintah SHUTDOWN di SSMS

Dalam semua situasi di atas, sql server dengan bersih mematikan semua databasenya dan kemudian menghentikan layanan yang melibatkan melakukan atau mengembalikan semua transaksi, menulis semua halaman kotor ke disk dan kemudian menulis entri ke dalam log transaksi.

Shutdown server sql yang tidak benar:

  • shutdown dengan nowait
  • menarik kabel daya dari server Anda (jika Anda memiliki akses).
  • membunuh sqlserver.exe dari task manager
  • Kegagalan Dirve tempat biner, exe, database server sql berada atau kegagalan drive sistem windows .. biasanya C: \ drive.
  • terlalu panas dari server yang menyebabkannya shutdown (jarang terjadi !!)

SQL Server akan selalu mencoba melakukan shutdown bersih ... kecuali Anda melakukan sesuatu yang tidak benar seperti yang dinyatakan di atas.

Beberapa tautan bacaan yang sangat baik tentang apa yang terjadi di balik layar selama fase pemulihan:

Kin Shah
sumber
Sangat detail, terima kasih. Apa yang Anda maksud dengan "DR Setup"?
Jon of All Trades
@JonofAllTrades Disaster Recovery .. misalnya pengiriman log, Mirroring Database atau Anda bahkan dapat memikirkan ketersediaan tinggi seperti Clustering
Kin Shah
1
Sementara saya sepenuhnya setuju dengan daftar skenario shutdown yang 'tidak tepat' ini, korupsi data tidak boleh terjadi bahkan saat itu, terima kasih kepada Write-Ahead Logging.
John Alan
5

Ini semua rinci di halaman ini.

Karena pertanyaan Anda secara khusus bertanya "apakah ada yang direkomendasikan oleh Microsoft " Saya cenderung berpikir bahwa ini kontraproduktif dengan diskusi ini di sini. Artikel mereka merinci proses yang dilaluinya

  • Menggunakan salah satunya
    • garis komando
    • Powershell,
    • SQL Server Management Studio (GUI)
  • Untuk 2008, 2012, 2014, 2016.
  • Untuk keduanya
    • Mesin Basis Data
    • atau, Agen

Apakah langkah-langkah itu memuaskan atau tidak akan menjadi pendapat saya, yang tidak Anda inginkan. Jadi jawaban yang benar akan selalu paling baru di sana.

Menghentikan layanan, sebelum dimatikan

apakah perlu atau disarankan untuk melakukannya sebelum mematikan server yang menjalankan layanan SQL.

Tidak, itu tidak perlu. Ketika Kernel Windows mengirimkan sinyal untuk dimatikan ke SQL Server, itu akan melakukannya dengan cara yang aman dan sistem akan menunggu untuk menyelesaikannya. Secara umum, apa pun yang dibangun dengan kemampuan mematikan dengan aman tidak harus ditutup secara manual, dan masuk akal bahwa semua aplikasi Microsoft mengikuti API mereka sendiri dan prosedur yang mengikat ke dalam PRESHUTDOWN, atau SHUTDOWNfase. Dari dokumen PRESHUTDOWN, yang saya asumsikan sedang mereka gunakan,

Memberitahu layanan bahwa sistem akan dimatikan. Layanan yang membutuhkan waktu tambahan untuk melakukan tugas pembersihan di luar batasan waktu yang ketat pada saat pematian sistem dapat menggunakan pemberitahuan ini. Manajer kontrol layanan mengirimkan pemberitahuan ini ke aplikasi yang telah mendaftar sebelum mengirim SERVICE_CONTROL_SHUTDOWNpemberitahuan ke aplikasi yang telah mendaftar untuk pemberitahuan itu.

Layanan yang menangani pemberitahuan ini memblokir pematian sistem hingga layanan berhenti atau interval waktu habis preshutdown yang ditentukan melalui SERVICE_PRESHUTDOWN_INFOkedaluwarsa. Karena ini memengaruhi pengalaman pengguna, layanan harus menggunakan fitur ini hanya jika benar-benar diperlukan untuk menghindari kehilangan data atau waktu pemulihan yang signifikan pada awal sistem berikutnya.

Seperti yang mungkin diperlukan, saya berasumsi itulah cara kerja SQL Server.

Evan Carroll
sumber
Itu hampir apa yang saya tanyakan. Dokumen itu menjelaskan cara mematikan mesin SQL Server, tetapi tidak menjawab apakah perlu atau disarankan untuk melakukannya sebelum mematikan server yang kebetulan menjalankan layanan SQL.
Jon of All Trades
@JonofAllTrades diperbarui lagi.
Evan Carroll
3

Tidak persis kapan harus mematikan dan mencegah korupsi DB. MS SQL Server adalah produk yang sangat matang dan kemungkinan menyebabkan masalah korupsi dengan 'shutdown' sederhana akan menjadi skenario tepi. Anda jauh lebih mungkin menyebabkan korupsi dengan tidak menjalankan CHECK DB atau memiliki validasi checksum yang ditetapkan pada DB Anda.

Mungkin memiliki alat eksternal yang secara langsung menyentuh file MDF / NDF / LDF dapat menyebabkan masalah, seperti mencoba 'memindahkan' file-file tersebut di antara shut downs atau meminta beberapa perangkat lunak untuk mengunci file-file tersebut selama shut down. Saya telah melihat Windows Clustering mengacaukan ketika disk hosting file DB penuh, tetapi tidak secara khusus menyebabkan 'korupsi db'.

Jika Anda ingin membantu memastikan shutdown atau failover yang lancar, Anda dapat menjalankan pos pemeriksaan, pastikan Anda sering menjalankan DBCC CHECKDB (setidaknya cukup waktu untuk dapat memulihkan data yang rusak dari cadangan), dan periksa apakah ada dependensi eksternal Diurus seperti mirroring.

Jika ada ahli yang memiliki 'praktik terbaik' saya ingin mendengarnya, tetapi menjelajahi blog dan sumber daya online selama beberapa tahun terakhir, saya belum melihat banyak korupsi data dan 'shutdown / restart' sederhana.

Ali Razeghi
sumber
-1

Cara saya melakukannya: 1) Nonaktifkan semua Pekerjaan. 2) Pastikan tidak ada pekerjaan yang sedang dieksekusi. 3) Jalankan SP_Who3 secara rutin untuk memeriksa aktivitas, juga jalankan sp_whoisactive untuk info lebih lanjut. 4) Jika tidak ada aktivitas dan satu-satunya hal yang Anda lihat adalah permintaan sp_who3 Anda saat ini 5) Bawa DB offline 6) Klik kanan di bagian atas database dan klik Stop 7) Verifikasi apakah layanan dalam keadaan berhenti di services.msc 8 ) Dilakukan

PS. Jika Anda memiliki PAGEIOLATCH / IOCOMPLETION atau aktivitas lain di SP_Who3 jangan lakukan hal di atas karena dapat menempatkan database Anda dalam mode pemulihan.

Gozzy
sumber
Sangat jarang itu layak atau layak untuk menghentikan semua lalu lintas ke database bagi kebanyakan orang. Saya juga mencatat manfaat apa yang ada untuk membuat semua database offline - yang hanya akan menambah lebih banyak waktu untuk proses.
LowlyDBA
Ini sama sekali bukan saran yang bagus. mengapa Anda menyarankan untuk mengambil dbs offline - jika dbs berada di HADR misalnya mirroring atau AG, Anda tidak akan bisa melakukan itu.
Kin Shah