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


23

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

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

先ほど述べたように、個人が推奨する無数のステップがあると確信していますが、時代遅れのまたは迷信的な慣行を繰り返したくないのです。マイクロソフトからの推奨事項、または広範な業界標準はありますか?


この質問は、マシンを再起動する短期的な手順に関連しています。マシンを永久に停止する前に、マシンが使用されていないことを確認する長期的な手順に関して別の質問があります。


「広範な業界標準」を求め、「個々の人が推奨する無数のステップ」を望まないのは理にかなっていない。それはおそらく業界標準の説明です。これらはどちらも有効な質問のように見えますが、信頼できる情報源はマイクロソフトの記事へのリンクになるでしょう。
エヴァンキャロル

回答:


14

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

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

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

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

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

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

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

  • nowaitでシャットダウン
  • サーバーから電源ケーブルを引き出します(アクセスできる場合)。
  • 殺害sqlserver.exeをタスクマネージャから
  • SQLサーバーバイナリ、exe、システムデータベースが常駐する、またはWindowsシステムドライブの障害..通常はC:\ドライブで発生する障害。
  • サーバーが過熱してシャットダウンする(めったに起こりません!!)

SQL Serverは、上記のような不適切な操作を行わない限り、常にクリーンシャットダウンを試みます。

復旧フェーズ中に舞台裏で何が起こるかについてのいくつかの本当に良い読書リンク:


細かく、ありがとう。「DRセットアップ」とはどういう意味ですか?
すべての取引のジョン

@JonofAllTrades災害復旧..例えば、ログ配布、データベースミラーリングまたはあなたも、クラスタリングなどの高可用性と考えることができます
キンシャー

1
この「不適切な」シャットダウンシナリオのリストには完全に同意しますが、先書きログのおかげでデータ破損は発生しません。
ジョンアラン

5

これについては、このページで詳しく説明しています。

あなたの質問が「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の仕組みだと思います。


それはほとんど私が尋ねていたものです。このドキュメントでは、SQL Serverエンジンをシャットダウンする方法について説明していますが、SQLサービスを実行しているサーバーをシャットダウンする前にシャットダウンする必要があるかどうかは回答していません。
すべての取引のジョン

@JonofAllTradesが再び更新されました。
エヴァンキャロル

3

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

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

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

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


-1

私のやり方:1)すべてのジョブを無効にします。2)現在実行中のジョブがないことを確認します。3)SP_Who3を頻繁に実行してアクティビティを確認し、sp_whoisactiveを実行して詳細を確認します。4)アクティビティがなく、表示されるのが現在のsp_who3クエリだけである場合5)DBをオフラインにする6)データベースの上部を右クリックして[停止]をクリックする7)services.mscでサービスが停止状態にあるかどうかを確認する8 )完了

PS。PAGEIOLATCH / IOCOMPLETIONまたはSP_Who3の他のアクティビティがある場合、データベースを回復モードにする可能性があるため、上記の操作は行わないでください。


ほとんどの人にとって、データベースへのすべてのトラフィックを停止することが実行可能または価値があることはほとんどありません。また、すべてのデータベースをオフラインにするとどのようなメリットがあるのか​​を確認します。これにより、プロセスに時間を追加できます。
LowlyDBA

これはまったく良いアドバイスではありません。なぜデータベースをオフラインにすることをお勧めしますか?データベースがミラーリングやAGなどのHADRにある場合、それを行うことはできません。
キンシャー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.