
いつもお世話になっております。
SQL Server 2005 Expressを使用しておりまして、C#で作成されているアプリケーションからシャットダウンしております。
またそのアプリケーションには、
『ExitWindowsEx(ExitWindowExFlags.EWX_REBOOT | ExitWindowExFlags.EWX_FORCE, 0);』
とありまして、 強制的にシャットダウンしてします。
そこで、大変お手数ですが、『強制的にSQLServerをシャットダウンした場合』どのようなプロセスで終了しているのか
ご教示いただけないでしょうか。
参考になるURLでも大変助かります。よろしくお願いいたします。
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)は、より安全できると思います。
参考になれば幸いです。
この回答への補足
kero_mio 様
ご教示ありがとうございました。
これで、ちょっと検討してみます。
本当に、参考になるアドバイスを頂きありがとうございました。
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/ms190 …
にございますので、ご確認頂けたらと思います。
参考URL:http://technet.microsoft.com/ja-jp/library/ms190 …
この回答への補足
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
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/ …
参考URL:http://www.forest.impress.co.jp/lib/sys/wincust/ …
この回答への補足
kero_mio 様
ご教示ありがとうございます。
kero_mio様、すいません。
自分が調べたいのは、強制的にSQLServerをシャットダウンした場合のシークエンスというか、
どのような順序でSQLServerが停止するのを調べたかったのです。
オラクルDBには、SQL*Plusで4つのモードがあるみたいなのですが、SQLServerにそのような資料がなく困って質問いたしました。
誤解を招くような質問で大変申し訳ありませんでした。
参考にしたURLです。
ttp://www.atmarkit.co.jp/fdb/ref/ref_oracle/shutdown.html
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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- デスクトップパソコン パソコンについて質問です。 指定時間に使ってなかったら シャットダウンするように設定したいのですが 1 2023/05/30 13:48
- ドライブ・ストレージ PCのパーフォーマンスが極端に落ちた。 8 2023/01/28 15:22
- デスクトップパソコン デスクトップpcの電源が落ちる 4 2023/03/09 12:45
- ノートパソコン シャットダウンを止めるには 1 2022/09/11 14:36
- Windows 7 Media Playerが開かない。ファイルアイコンを右クリックしても「プロパティ」が表示されない。 2 2023/02/05 14:45
- Windows 10 更新プログラムの適用を止めたい 4 2022/11/04 01:25
- Windows 10 パソコンが正常にシャットダウンしない。 こんばんは。 先日WindowsアップデートをしてWindo 2 2023/02/24 23:11
- ノートパソコン 【緊急】 半年ぶりくらいに家のパソコン(Windows)を使おうとしたのですが、立ち上げてサインイン 5 2022/11/14 03:18
- Outlook(アウトルック) タスクバーにアウトルックのアイコンを置いています。 何度かアウトルックを開いては閉じをくり返していま 1 2022/10/09 12:06
- デスクトップパソコン タスク、プログラム実行後に自動シャットダウンしたい 3 2023/08/25 18:01
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLサーバーの停止。
-
Windows2000でのOSシャットダウ...
-
oracleのメモリ使用量が97%ほど...
-
SQLサーバーへの接続について
-
インスタンスの再作成について
-
Oracleのアクセス権制御につい...
-
クラスタリングとレプリケーシ...
-
ORACLE MASTER Bronze Oracle D...
-
OracleのWindowsプロセス名
-
CloverをインストールしたUSBメ...
-
Oracle 11g ユーザー名およびパ...
-
SQLコマンド
-
スカイリム デイドラクエスト「...
-
Gif's on the Fly GD1.3
-
倒産した18禁ゲーム会社のパ...
-
ぷよぷよクエストをエミュレー...
-
bind()を呼び出さなくてもよい理由
-
Ghostscriptの日本語化パッチに...
-
Oracleがインストールされてい...
-
PCゲーム Hard☆Love☆Life
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DB2で SQL1032N start databas...
-
oracleのメモリ使用量が97%ほど...
-
OracleDBConsoleorclのサービス...
-
クラスタリングとレプリケーシ...
-
インスタンス、ノード、ターゲ...
-
SQLServer2005上の別DBからテ...
-
SQLServer2005 リンクサーバー...
-
SQLSERVER データインポート
-
SQL Server のシャットダウンの...
-
クローンデータベース作成に関して
-
db2_installコマンドについて
-
SQLサーバーへの接続について
-
データベースをオープンできない
-
Windows2000でのOSシャットダウ...
-
SQL Server 2005 の インスタ...
-
AWS初学者です。 AWSの学習を終...
-
Oracle 8i のアンストール方法
-
SQLServer 2008のインスタンス...
-
ネットワーク環境変更によるSQL...
-
Oracleのアクセス権制御につい...
おすすめ情報