
いつもお世話になっております。
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で質問しましょう!
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
E-RモデリングとUML
-
SIDってなんですか?
-
デッドバイデイライトで遊びた...
-
CloverをインストールしたUSBメ...
-
倒産した18禁ゲーム会社のパ...
-
シムシティ4 DX をCDなしで遊び...
-
事務コンのデータ移行
-
QOH'99SecondEditionのパッチ
-
AnyDVDとレジストリKey
-
リスナーを使用しないでOracle...
-
倒産した会社のゲーム(18禁...
-
SIDとSERVICE_NAMEの違いとは?
-
PCゲーム Hard☆Love☆Life
-
SAIを違うPCで使いたい
-
Windowsインストーラーmsiファ...
-
アダルトゲームのモザイクについて
-
iniファイル読み込み失敗という...
-
5名間でのスケジュール共有ツー...
-
ホットスタンバイ構成の際のラ...
-
Windows Server CAL(Client Ac...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DB2で SQL1032N start databas...
-
oracleのメモリ使用量が97%ほど...
-
SQLServer2005上の別DBからテ...
-
E-RモデリングとUML
-
クラスタリングとレプリケーシ...
-
OracleDBConsoleorclのサービス...
-
SIDってなんですか?
-
SQLServer2005 リンクサーバー...
-
インスタンス、ノード、ターゲ...
-
MS SQL2005での接続エラー
-
SQL Server 2005(2008)とVB.net...
-
Windows2000でのOSシャットダウ...
-
Oracle 8i のアンストール方法
-
SQLSERVER データインポート
-
db2_installコマンドについて
-
SQLServer2000と7.0の共存
-
SQL Server のシャットダウンの...
-
SQLサーバーへの接続について
-
Sql Server 2005 でlocalにサー...
-
SQLサーバーの停止。
おすすめ情報