web-dev-qa-db-ja.com

Microsoft SQL Serverをホストしているマシンを安全に再起動するには、どの手順が必要ですか?

MS SQL Serverインスタンスをホストしているサーバーを再起動するときにデータの破損を防ぐために必要な特別な手順はありますか?

たとえば、最近、SQLサービスを手動で停止することを推奨されました。私の理解では、これはWindowsのshutdownプロセスによって処理されます。

先ほど述べたように、個々の人が推奨する可能性のある手順は無数にあると思いますが、 廃止された、または迷信的な慣行の繰り返しを避けるため を希望します。マイクロソフトからの推奨事項、または広範な業界標準はありますか?


この質問は、マシンをリブートする短期的な手順に関連しています。マシンを永久的に停止する前に、マシンが未使用であることを確認するための長期的な手順について 別の質問 があります。

24

SQLサーバーを再起動するときは、空想/心配または怖がっている必要はありません。

実行時間の長いトランザクションがないことを確認してください。ビジネスへの影響を最小限に抑えるために、メンテナンスウィンドウとも呼ばれる低/最小のアクティビティ期間中にコンソールまたはシャットダウンコマンドを使用してSQLサーバーを再起動するのが最適です。

DR設定があり、ダウンしたくない場合は、フェイルオーバーしてからパッシブノードまたはセカンダリノードを再起動するのが最善です。

SQL Serverのクリーンシャットダウンは、以下のシナリオで発生します。

  • サービスコンソールを使用してSQLサーバーを停止します。
  • サーバーをシャットダウンする
  • sSMSでのSHUTDOWNコマンドの実行

上記のすべての状況で、SQLサーバーはすべてのデータベースを完全にシャットダウンしてから、すべてのトランザクションのコミットまたはロールバック、すべてのダーティページのディスクへの書き込み、およびトランザクションログへのエントリの書き込みを含むサービスを終了します。

SQLサーバーの不適切なシャットダウン:

  • nowaitによるシャットダウン
  • サーバーから電源ケーブルを引く(アクセスできる場合)。
  • タスクマネージャからsqlserver.exeを強制終了しています
  • SQLサーバーのバイナリ、exe、システムデータベースが存在する、またはWindowsのシステムドライブの障害が発生した原因を特定します。通常はC:\ドライブです。
  • サーバーの過熱によりシャットダウンします(めったに起こらないはずです!!)

SQL Serverは常に、上記のように何かを不適切にしない限り、クリーンシャットダウンを実行しようとします。

回復段階で舞台裏で何が起こるかについてのいくつかの本当に良い読書リンク:

14
Kin Shah

これはすべてこのページで詳細に説明されています。

あなたの質問が具体的に「Microsoftが推奨するものはありますか」と尋ねているので、ここでこの議論を行うことは逆効果だと思いがちです。記事はプロセスの詳細を示します

  • どちらかを使用
    • コマンドライン
    • パワーシェル、
    • SQL Server Management Studio(GUI)
  • 2008、2012、2014、2016。
  • どちらでも
    • データベースエンジン
    • または、エージェント

それらのステップが満足できるものであるかどうかは私の意見ですが、あなたはそれを望んでいません。したがって、正しい答えは常に最新のものになります。

電源を切る前にサービスを停止する

たまたまSQLサービスを実行しているサーバーをシャットダウンする前にそうする必要があるか、推奨されますか?.

いいえ、必要ありません。 Windowsカーネルがシャットダウンする信号をSQL Serverに送信すると、安全な方法でシャットダウンが行われ、システムはそれが完了するまで待機します。一般的に言えば、安全にシャットダウンする機能を備えて構築されたものは、手動でシャットダウンする必要はありません。すべてのMicrosoftアプリケーションが 独自のAPIとプロシージャPRESHUTDOWN、またはSHUTDOWNフェーズ。 PRESHUTDOWNのドキュメントから、彼らが使用していると思いますが、

システムがシャットダウンすることをサービスに通知します。システムのシャットダウン時の厳しい時間制限を超えてクリーンアップタスクを実行するために追加の時間が必要なサービスは、この通知を使用できます。サービスコントロールマネージャーは、この通知を登録したアプリケーションにSERVICE_CONTROL_SHUTDOWN通知を送信する前に、その通知を登録したアプリケーションに送信します。

この通知を処理するサービスは、サービスが停止するか、SERVICE_PRESHUTDOWN_INFOで指定されたシャットダウン前のタイムアウト間隔が経過するまで、システムのシャットダウンをブロックします。これは、ユーザーエクスペリエンス、サービスはこの機能を使用する必要があります次のシステム起動時のデータ損失または大幅な回復時間を回避するために絶対に必要な場合

必要に応じて、それがSQL Serverの動作方法だと思います。

5
Evan Carroll

シャットダウンして、DBの破損を防ぐことに関しては、正確ではありません。 MS SQL Serverは非常に成熟した製品であり、単純な「シャットダウン」によって破損の問題が発生する可能性はエッジシナリオです。 CHECK DBを実行しないか、DBにチェックサム検証を設定すると、破損が発生する可能性が高くなります。

おそらく、MDF/NDF/LDFファイルに直接触れる外部ツールがあると、シャットダウンの間にファイルを「移動」しようとしたり、シャットダウン中にソフトウェアがファイルをロックしようとしたりするなどの問題が発生する可能性があります。 DBファイルをホストしているディスクがいっぱいのときにWindowsクラスタリングが台無しになるのを見てきましたが、特に「db破損」の原因にはなりません。

スムーズなシャットダウンまたはフェイルオーバーを確実にしたい場合は、チェックポイントを実行し、DBCC CHECKDBを頻繁に(少なくとも、バックアップから破損したデータを回復するのに十分な時間)実行していることを確認し、外部の依存関係があることを確認します。ミラーリングなどの面倒を見る。

エキスパートが他にも「ベストプラクティス」を持っている場合は、ぜひ聞いてみたいと思いますが、過去数年間ブログとオンラインリソースを精査しているので、データの破損と単純な「シャットダウン/再起動」はあまり見られません。

3
Ali Razeghi