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 shutdown
proses 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.
sumber
Jawaban:
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:
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:
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:
sumber
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
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
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
, atauSHUTDOWN
fase. Dari dokumenPRESHUTDOWN
, yang saya asumsikan sedang mereka gunakan,Seperti yang mungkin diperlukan, saya berasumsi itulah cara kerja SQL Server.
sumber
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.
sumber
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.
sumber