SQL Serverのシャットダウンプロセスについて

このQ&Aのポイント
  • SQL Serverのシャットダウンプロセスについてのご質問です。C#で作成されたアプリケーションからExitWindowsEx関数を使用してSQL Serverを強制的にシャットダウンしているようですが、このシャットダウンプロセスについて詳細を教えていただけませんか?
  • 強制的にSQL Serverをシャットダウンした場合のプロセスについて教えてください。お使いのアプリケーションではExitWindowsEx関数を使用しているようですが、どのような手順でシャットダウンが行われているのか詳細が知りたいです。
  • SQL Serverのシャットダウンプロセスに関する疑問です。お使いのアプリケーションではExitWindowsEx関数を使用して強制的にシャットダウンしているようですが、このプロセスについて詳しく教えていただけませんか?
回答を見る
  • ベストアンサー

SQL Server のシャットダウンのプロセスについて

いつもお世話になっております。 SQL Server 2005 Expressを使用しておりまして、C#で作成されているアプリケーションからシャットダウンしております。 またそのアプリケーションには、 『ExitWindowsEx(ExitWindowExFlags.EWX_REBOOT | ExitWindowExFlags.EWX_FORCE, 0);』 とありまして、 強制的にシャットダウンしてします。 そこで、大変お手数ですが、『強制的にSQLServerをシャットダウンした場合』どのようなプロセスで終了しているのか ご教示いただけないでしょうか。 参考になるURLでも大変助かります。よろしくお願いいたします。

  • t-usa
  • お礼率20% (1/5)

質問者が選んだベストアンサー

  • ベストアンサー
  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.4

基本的におっしゃったような手順がGoodかと思います。 ただ、気になるのは、 「もしなんらかの事象でSQLServerのインスタンスが停止しない場合は、強制終了等の保険の手段をもって終了する」 のところですね。 この場合、TerminateProcessというAPIを使って、SQL Serverのサービス(インスタンス)を強制終了するようにすべきですね。 C#で書くと、 [DllImport("Coredll.DLL")] public static extern int TerminateProcess(IntPtr hProcess, int uExitCode); を定義して、TerminateProcessを呼び出す必要があります。 hProcessは、OpenProcessというAPIで、SQL Serverのサービス用 プロセスを取得したもの、uExitCodeは、 確かSERVICE_CONTROL_SHUTDOWN?(忘れてしまいましたが)を 設定し、TerminateProcessすれば、問題ありません。 # OpenProcessもTerminateProcessも.NET Frameworkの   マネージコードではなく、アンマネージ(Win32)用の   Functionになりますので、DllImportして、呼び出してください。 # OpenProcess、TerminateProcessのサンプルがVC++のものは   たくさんありますが、C#用のものが少ないみたいなので   少しネットでお探しになってみることをお勧めします。   (私も半分忘れてます) こうすれば、(2)は、より安全できると思います。 参考になれば幸いです。

t-usa
質問者

補足

kero_mio 様 ご教示ありがとうございました。 これで、ちょっと検討してみます。 本当に、参考になるアドバイスを頂きありがとうございました。

その他の回答 (3)

  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.3

なるほど。 インスタンスの停止手順がどういう手順かということですね。 納得しました。 まず、OracleとSQL Serverでは、インスタンスの起動・停止方法は まったく異なります。 というのも、SQL Serverは先日も申し上げた通り、SCM(Service Control Manager) の管理下にありますので、 インスタンスの停止も開始もすべて、SCMを使ってやる必要があります。 なので、停止手順は、「SQL Serverのサービスを停止する」これだけです。 もし、C#から、停止するコードを書くのであれば、先日ご紹介しました、 using System.ServiceProcess; ServiceController controller = new ServiceController(); controller.MachineName = "."; controller.ServiceName = "MSSQL$SQLEXPRESS"; string status = controller.Status.ToString(); controller.Stop(); で十分できますし、また、DOSコマンドで確実にやりたいので あれば、 net stop "MSSQL$SQLEXPRESS" だけでOKで、それ以外の手順は何も要りません。 #Expressなので、Agentサービスはないと思いますが、  他のバージョンであれば、Agentサービスも停止してあげる  必要があります。 詳しくは、 http://technet.microsoft.com/ja-jp/library/ms190236.aspx にございますので、ご確認頂けたらと思います。

参考URL:
http://technet.microsoft.com/ja-jp/library/ms190236.aspx
t-usa
質問者

補足

kero_mio 様 ご教示ありがとうございます。 あと、ご返信が送れて大変申し訳ありませんでした。 SCMですが、自分は、『service contorol manager』が、わからない状態だったので、詳しく教えて頂き大変たすかりました。 ということは、アプリケーションにある 『ExitWindowsEx(ExitWindowExFlags.EWX_REBOOT | ExitWindowExFlags.EWX_FORCE, 0);』 と、強制的にシャットダウンしているところを、 (1)SQLServerインスタンスを停止する (2)もしなんらかの事象でSQLServerのインスタンスが停止しない場合は、強制終了等の保険の手段をもって終了する (3)OSのシャットダウンを行う みたいにすれば、SQLServerに限っては、今までやっていたように強制終了するよりは、安全にシャットダウンできると考えてよいでしょうか。 大変お手数ですが、もう少しご教示いただけないでしょうか。 service contorol managerで参照したURLです。 ttp://www.atmarkit.co.jp/fwin2k/bookpreview/eventlog02/eventlog02_02.html

  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.2

すいません。質問の趣旨を勘違いしておりました。 いずれにしても、SQL Serverプロセスの停止は、下記のサンプルのような「サービス停止」で行われていると思います。(割り込みで強制終了したとしても) 『強制的にSQLServerをシャットダウンした場合』を 知って、何をしようとしているのか記載がないので、回答はできませんが、 使用しているプロセスはSCM(Service Control Manager)と sqlservr.exe、sqlagent.exeが持っていますので、 SQL Serverだけのプロセスを知ったところで何もできないような気がします。 もし、具体的にProccess名を知る必要があれば、ProccessExploreと いうツールがありますので、それでお調べになってみては如何でしょうか? http://www.forest.impress.co.jp/lib/sys/wincust/taskservice/prcsxplorer.html

参考URL:
http://www.forest.impress.co.jp/lib/sys/wincust/taskservice/prcsxplorer.html
t-usa
質問者

補足

kero_mio 様 ご教示ありがとうございます。 kero_mio様、すいません。 自分が調べたいのは、強制的にSQLServerをシャットダウンした場合のシークエンスというか、 どのような順序でSQLServerが停止するのを調べたかったのです。 オラクルDBには、SQL*Plusで4つのモードがあるみたいなのですが、SQLServerにそのような資料がなく困って質問いたしました。 誤解を招くような質問で大変申し訳ありませんでした。 参考にしたURLです。 ttp://www.atmarkit.co.jp/fdb/ref/ref_oracle/shutdown.html

  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.1

未確認ですがExitWindowsExだと、SQL Serverのプロセスは落とせないので、SQL Serverのサービスを停止するのが確実かと思います。 ExitWindowsExでプロセス名を意識せずにサービス名を意識する ことで、下記のコードのようにプロセスは止められます。 using System.ServiceProcess; ServiceController controller = new ServiceController(); controller.MachineName = "."; controller.ServiceName = "MSSQL$SQLEXPRESS"; string status = controller.Status.ToString(); controller.Stop(); # C#は、2.0, VS.NET2005 で確認しております。 ご参考になれば幸いです。

参考URL:
http://www.dotnetspider.com/kb/Article1254.aspx

関連するQ&A

  • SQLサーバーのテーブルでサーバー名の規定値

    SQL2000サーバーから、SQL2005expressへ SQL Server Management Studio Express を使って移行しています その中で、テーブルレイアウトの初期設定について 日付やPC名は、SQL2000と同じ getdate() や host_name()で 設定できたのですが、サーバー名が @@servername では 「文字列データまたはバイナリデータが切り捨てられます  ステートメントは終了されました」 とメッセージが出てきて処理できません。 SQLserver2005expressで、サーバー名の規定値についてアドバイスをお願いします

  • SQL Server2008 SP1について

    Visual C# 2010 Expressをインストールして、 ついでにMicrosoft SQL Server 2008 Express Service Pack 1(x86)をダウンロードしたのですが、 こちらでいわゆるSQL Serverは使えないものなのでしょうか? 自宅用のパソコンにVisual StudioとSQL Serverを使って、いわゆるWebアプリケーションを作りたいと思っております。 宜しくお願いいたします。

  • SQL Server 2005 Express

    [OS]:Windows XP SP2 [DB]:SQL Server2005 Express はじめまして。 SQL Server2005 Expressを使用したシステムを開発しました。 (SQL Server2005 Expressのサービスは自動起動、データベースのインスタンスは1つだけ) OS起動後、タスクマネージャを見ると、sqlserver.exeが2つ起動しているそうで、OSを再起動 しても同じ状態です。 手元にそのPCがないので確認はできないのですが、そういう事ってあるのでしょうか。 また、何が原因でそうなるのか、それによって何か問題が発生するのかが分かりません。 どなたかご存知の方がいらっしゃいましたらご教授いただければ幸いです。 宜しくお願い致します。

  • SQL ServerにExcelをリンクさせたい

    AccessからSQL Server 2008 Expressへの移行を考えているの者です。 現在、Accessにいろいろな文字データ以外にExcelデータをリンクさせて使用しております。 (データ型はOLEオブジェクトのリンクを使っています) SQLServerでもAsseccのように他のアプリケーションやファイルをリンクさせることはできるのでしょうか? 可能であれば、どの様にすればよいのでしょうか? よろしくお願いします。

  • SQL Server2005のパフォーマンス

    SQL Server2005を使用しています。 CPUの負荷が高くなり、データベースにロック中になっている状態で、 リブートしました。 しばらく時間が経過すると、極端にパフォーマンスが下がる現象が起きてしまっています。 再度、リブートをすれば落ち着きます。 このような事象が発生している原因は何が考えられるのでしょうか? 他の文献等を探しましたが、検討がつきませんでした。 お手数をお掛けしますが、何かご存知の方、ご教授お願いします。

  • SQL Server のバックアップと リストア

    質SQL Server 2008 ExpressのDBのバックアップをSQL Server 2019 Express にリストアする事は可能でしょうか? SQL Server のバージョンが違うので互換性の問題が何かあるのではないかと懸念しています。実はレンタルサーバーをこのほどWindows Server 2008のVMが来月マイクロソフトのサポート終了になる事から、Windows Server 2019のVMに移行する必要性がでてきており、その際に活用していたデータベースであるSQL Server 2008 ExpressのDBも同時に移行する必要性がでてきたのですが、まだほとんどWindows Server 2019もSQL Server 2019 Expressも触った事がありませんので、万が一トラブルになるとかなり困った事になるため、充分な予備知識を知っておきたいと思い質問させて頂きました。

  • SQL SERVER IPアドレス接続

    SQLSERVER2014 EXPRESSですが、 名前付きインスタンスでSQL2014でインストールしました。 IPアドレスで接続するときは、サーバー名にどう入力したら良いのですか? XXX.XXX.XXX.XXX\SQL2014ではだめでした。 TCP/IPは有効にしています。 宜しくお願いします

  • SQLサーバー2005とVisual Studio 2008 Expr

    SQLサーバー2005とVisual Studio 2008 Express Edition を使用して、データベースにアクセスしたいのですが、Visual Studioで新しい項目の追加→「サービス ベースのデータ アクセス用の空の SQL Server データベース」→追加として、Database1.mdfを新規作成しようとすると、以下のエラーが出てしまいます。 エラー:ファイルまたはアセンブリ 'Microsoft.SqlServer.Management.Sdk.Sfc, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91'、またはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりません。 解決方法が分からなくて困っております。ご存知の方、お手数ですがご指導いただけないでしょうか。 よろしくお願い致します。 <環境> Os: Win Xp SQLサーバー2005 Visual Studio 2008 Express Edition

  • windows2000serverでシャットダウンの方法

    windows2000serverでOSのシャットダウンの方法 一般ユーザー(アドミニ権限なし)で  [スタート]→[シャットダウン] の方法以外でシャットダウンする 方法をご教示ください  ログイン状態で[ctrl]+[Alt][Del]一回clickで  windowsのセキュリティ画面にて[シャットダウン]clickしてもシャットダウンできません  それ以外にシャットダウンする手段  例えば、タスクマネージャ等 は御座いませんでしょうか?  ない場合は強制終了させようと考えています

  • アクセス2003からSQL Server 2005へ移行

    アクセス2003のデータが日に日に多くなっていくため Microsoft SQL Server 2005へ移行したいのですがどうすればいいのでしょうか? とりあえず「SQL Server Management Studio Express」をインストールしました。 そしてこれを起動すると画像のようなダイアログが出てくるのですが サーバー名には何と入れればいいのでしょうか? それすらわからない初心者なのですが参考になるURLがあれば教えてください。 よろしくお願いします。