トップ回答者
Windowsのシャットダウンを防ぐ方法について

質問
-
はじめまして。お世話になります。
SQL Server 2005 を実行しているPCで、重要な処理を行っている時にユーザーが Windows を終了しないようにする方法を探しています。
別のアプリケーションをサーバーPCに常駐してWM_QUERYENDSESSIONを監視した場合も、SQL Server が終了しない保証がないため、SQL Server自体でシャットダウンを中止させる方法はないでしょうか。
サーバーPCは、Windows XP/Vista/2003 Server を使用しています。
どのような情報でも良いので、教えて頂けるようお願い致します。
回答
すべての返信
-
久野さん、はじめまして。
今ひとつ情報が少なく利用状況が把握できないのですが、
・「サーバーPCは、Windows XP/Vista/2003 Server を使用」とありますがこの3種類のOSにSQL Server2005がインストール
されている、ということでしょうか。
・上記の「ユーザー」とはサーバーの管理者ですか?もし管理者以外のユーザーだとしたらそのサーバーにログインする目的
は何ですか?そのユーザーに「シャットダウン」の権限が必要なのでしょうか。
私はSQL Server 2005を熟知しているわけではないのですがSQL Server側で上記のようなシャットダウンを中止させる方法、というのはないように思います。
(ご存知の方がいらっしゃいましたら教えてください。)
たとえばその重要な処理の進捗を可視化してユーザーにWindowsの終了を思い止まるようにさせる、というのも案かと思います。
-
こんにちは、naginoです。
SQL Server は、OS上で動作するサービスに過ぎませんので、OSの管理者権限を持つアカウントでOSのシャットダウンをされると、SQL Server はサービスの停止処理に入ります。
SQL Server の標準機能で対応できる範囲ではありませんので、やっちん様がご提案されているような別の手段を検討されることをお勧めします。
しかし、詳細がわかりませんので難しいところですが、SQL Server を実行しているサーバにログオンさせるようなシステム構成や運用自体が、そもそもの問題のような気がします。
セキュリティ上も好ましくないように思われます。
ただ、DBサーバを安易にシャットダウンされないようにしたいという方向性自体は、2007年9月22日に起きた神戸新聞社の組版システムの障害事例(Oracleですが)もありますので、間違ってはいないと思います。
ご参考になれば幸いです。
-
やっちんさん、はじめまして。
返信が遅くなって申し訳ありません。
されている、ということでしょうか。
はい。Windows XP/Vistaでは、Expressエディションですが、SQL Server 2005をインストールしています。
は何ですか?そのユーザーに「シャットダウン」の権限が必要なのでしょうか。
「ユーザー」は、サーバーの管理担当者(またはその上長)を指しています。
>たとえばその重要な処理の進捗を可視化してユーザーにWindowsの終了を思い止まるようにさせる、というのも案かと思います。
そうですね。私もシャットダウンをしないように画面を表示することも検討したのですが、運用上の制限などもあって実現できていません(※)。このため、シャットダウン自体を防ぐ方法がないかを調べている状態です。
※クライアント側の操作(システムの使用を終了するなど)をトリガーにしてサーバーのデータ更新処理を行います。
SQLサーバーからは画面が表示できません(Windowsサービスから画面が表示できません)ので、「進捗の可視化」が実現できませんでした。
-
naginoさん、はじめまして。
>SQL Server の標準機能で対応できる範囲ではありませんので、やっちん様がご提案されているような別の手段を検討されることをお勧めします。
やはりそうですか。
>SQL Server を実行しているサーバにログオンさせるようなシステム構成や運用自体が、そもそもの問題のような気がします。
>セキュリティ上も好ましくないように思われます。
仰るとおりです。
ただ、SQL Server Expressを使用する、規模が小さい会社で運用する場合、サーバーPCとクライアントPCの役割を1台で行うことになり、管理者権限のあるユーザー1人で運用しています。特にこのような会社で問題が発生する可能性が高いので、対策を検討している状態です。
また、セキュリティ上の問題はありますが、費用の問題でこのような運用になっているため、この点の改善は困難な状況です。
最終的には、運用上のルールなどで対応するしかないのでしょうね。
ご意見ありがとうございました。参考にさせて頂きます。
-
久野 さんからの引用 別のアプリケーションをサーバーPCに常駐してWM_QUERYENDSESSIONを監視した場合も、SQL Server が終了しない保証がないため、SQL Server自体でシャットダウンを中止させる方法はないでしょうか。 サーバーPCは、Windows XP/Vista/2003 Server を使用しています。
WM_QUERYENDSESSION 絡みで参考までにですが,以下のような状況にあることは知っておくと役立つかもしれません.
-
ノート PC でなかなかサスペンドに移行しないという苦情を調査していた Microsoft は,クライアント OS (Windows XP/Vista) で WM_QUERYENDSESSION を利用して長時間の引き延ばしを行うアプリケーションが増加していたことをつきとめた.
-
Microsoft は,アプリケーションによる WM_QUERYENDSESSION の濫用を,User Experience を著しく損なうものとみなし,Windows Vista で WM_QUERYENDSESSION の動作を変更した.
-
今後は,「(クライアント向け Windows で) ユーザがシャットダウンを希望するならシャットダウンは完了すべきである」という方向にシフトしていく可能性が高い.
-
詳しくは 『Application Shutdown Changes in Windows Vista』 参照のこと
もちろん,重要な処理を行っている時にシャットダウンされたくないというシナリオも存在するとは思いますが,クライアント向け OS はどうしても大多数の利用者や利用形態の変化 (例えばノート PC での利用の増加) に合わせて仕様が変わっていくところがあります.
今後,Windows XP/Vista のようなクライアント向け OS を利用したソリューションを提供する場合,この点に注意が必要かもしれません.
-
-
運用で回避ということで、こんな運用はどうでしょうか?
その運用ですが、コンピュータの電源を自動的に管理してみるのを提案してはどうでしょうか?
WindowsにはSHUTDOWN.EXEというコマンドがあり、(権限があれば)ローカルコンピュータ/リモートのコンピュータの
ログオフやシャットダウンができます。ある重要な処理が終わった後で、SHUTDOWNコマンドを実行すれば、電源は自動的に切れるので人間は電源を切らなくても
良いという事を通知すれば、運用的にはなんとかなりそうな気がします。SHUTDOWNコマンドはシャットダウンだけですが、UPSを繋いでUPS付属のユーティリティを使えば、電源OFFだけでなく電源ONも行ってくれます。
以上、参考になれば幸いです。
※なお、SHUTDOWNコマンドについてですが、注意点が一つあります。
パスワードロック付でスクリーンセーバーが起動していると、SHUTDOWNされないという仕様(バグ?)があります。
(これで何回はまった事か)