トップ回答者
SQL Server の終了オプションについて

質問
-
はじめて、質問させて頂きます。
OS:WindowsServer2003にて SQL Server 2005を使用しています。
基本的にOSのシャットダウン時に、他のアプリからの接続が全てログアウトするまで
SQL Server 2005の終了は待つものなのでしょうか?
それとも、oracleで言う、shutdown immediate や shutdown abort のような状態に
なるのでしょうか?
これらのような終了オプションがあるのでしょうか。
また、このようなshutdownを記述する、shutdownスクリプトも存在するのでしょうか。
以上
回答
-
こんにちは、naginoです。
SQL Server はサービスの1つですので、OS のシャットダウンが行われると、他のサービスと同様にサービスの停止処理が行われます。
他のアプリからの接続がある場合、サービス側から切断します。
ただし、実行中のトランザクションがある場合、完了するまで待つようです。
http://msdn.microsoft.com/ja-jp/library/ms189095(SQL.90).aspx
終了オプションについては私は聞いたことがありませんので、ご存知の方がいらっしゃいましたらフォローをお願いします。
ご参考になれば幸いです。
-
Oracleにあまり詳しくないので外していたらごめんなさい。
> OS:WindowsServer2003にて SQL Server 2005を使用しています。
> 基本的にOSのシャットダウン時に、他のアプリからの接続が全てログアウトするまで
> SQL Server 2005の終了は待つものなのでしょうか?基本的には待ちません。MSDNには
「現在実行中のすべての Transact-SQL ステートメントまたはストアド プロシージャが終了するまで待ちます。」
と書かれていますが、トランザクションが完了するまで待つ訳ではないようです。試しにトランザクションをかけたまままの状態でSQL Serverを停止したところ、SQL Serverへの接続が切断され
ROLLBACKされた状態になってしまいました。
※OracleでいうところのSHUTDOWN IMMEDIATEに相当すると思われます。
また、SQL Serverでは「一時停止」という状態に出来ます。これはログイン中のユーザーはそのまま継続して使用でき、新規にログインはできない状態となります。
※Oracleで言うところのSHUTDOWN NORMALに相当すると思われます。
ただし、全てのユーザーがログアウトしてもSQL Serverは停止せず、一時停止の状態のままとなります。
シャットダウンする前にSQL Server一時停止に移行し、その間に接続しているユーザーにメッセージを
送り、全てのユーザーがログアウトした時点でSQL Serverを停止するような運用を想定しているようです。
SHUTDOWN ABORTですが、強いて言えば(osqlユーティリティ等で)SHUTDOWN WITH NOWAITコマンドが相当します。
ただし、手動で復旧作業を行う必要は無く、次回SQL Server起動時に自動的に修復が行われます。
また、不意の電源が切断されること等によりデータベースの整合性が取れなくなった場合にも、SQL Server起動時に復旧処理が行われますが、この場合、運が悪いと復旧に失敗する事があります。その場合は手動でデータベースを復旧したり、最悪の場合はバックアップからリストアを行い、運がよければトランザクションログから最新の状態まで復旧できます。
> また、このようなshutdownを記述する、shutdownスクリプトも存在するのでしょうか。SQL ServerはWindowsのサービスで動いているので、サービスを一時停止/停止する事で実現できます。
コマンドプロンプトで以下のコマンドを実行することで、それぞれの状態に移行することが出来ます。(既定のインスタンスの場合)
サービスの一時停止NET PAUSE MSSQLSERVER
サービスの停止NET STOP MSSQLSERVER
サービスの開始NET START MSSQLSERVER
また、Transact-SQLにもSHUTDOWNというコマンドがあるので、こちらでSQL Serverを停止する事も出来ます。
コマンドプロンプトでosql.exeやisqlw.exeを起動して以下のコマンドを実行してください。
通常のシャットダウン(停止に相当)SHUTDOWN
GOまた、即時に停止する場合は以下のコマンドを実行してください。
即時シャットダウンSHUTDOWN WITH NOWAIT
GO以上、参考になりましたでしょうか?
すべての返信
-
こんにちは、naginoです。
SQL Server はサービスの1つですので、OS のシャットダウンが行われると、他のサービスと同様にサービスの停止処理が行われます。
他のアプリからの接続がある場合、サービス側から切断します。
ただし、実行中のトランザクションがある場合、完了するまで待つようです。
http://msdn.microsoft.com/ja-jp/library/ms189095(SQL.90).aspx
終了オプションについては私は聞いたことがありませんので、ご存知の方がいらっしゃいましたらフォローをお願いします。
ご参考になれば幸いです。
-
Oracleにあまり詳しくないので外していたらごめんなさい。
> OS:WindowsServer2003にて SQL Server 2005を使用しています。
> 基本的にOSのシャットダウン時に、他のアプリからの接続が全てログアウトするまで
> SQL Server 2005の終了は待つものなのでしょうか?基本的には待ちません。MSDNには
「現在実行中のすべての Transact-SQL ステートメントまたはストアド プロシージャが終了するまで待ちます。」
と書かれていますが、トランザクションが完了するまで待つ訳ではないようです。試しにトランザクションをかけたまままの状態でSQL Serverを停止したところ、SQL Serverへの接続が切断され
ROLLBACKされた状態になってしまいました。
※OracleでいうところのSHUTDOWN IMMEDIATEに相当すると思われます。
また、SQL Serverでは「一時停止」という状態に出来ます。これはログイン中のユーザーはそのまま継続して使用でき、新規にログインはできない状態となります。
※Oracleで言うところのSHUTDOWN NORMALに相当すると思われます。
ただし、全てのユーザーがログアウトしてもSQL Serverは停止せず、一時停止の状態のままとなります。
シャットダウンする前にSQL Server一時停止に移行し、その間に接続しているユーザーにメッセージを
送り、全てのユーザーがログアウトした時点でSQL Serverを停止するような運用を想定しているようです。
SHUTDOWN ABORTですが、強いて言えば(osqlユーティリティ等で)SHUTDOWN WITH NOWAITコマンドが相当します。
ただし、手動で復旧作業を行う必要は無く、次回SQL Server起動時に自動的に修復が行われます。
また、不意の電源が切断されること等によりデータベースの整合性が取れなくなった場合にも、SQL Server起動時に復旧処理が行われますが、この場合、運が悪いと復旧に失敗する事があります。その場合は手動でデータベースを復旧したり、最悪の場合はバックアップからリストアを行い、運がよければトランザクションログから最新の状態まで復旧できます。
> また、このようなshutdownを記述する、shutdownスクリプトも存在するのでしょうか。SQL ServerはWindowsのサービスで動いているので、サービスを一時停止/停止する事で実現できます。
コマンドプロンプトで以下のコマンドを実行することで、それぞれの状態に移行することが出来ます。(既定のインスタンスの場合)
サービスの一時停止NET PAUSE MSSQLSERVER
サービスの停止NET STOP MSSQLSERVER
サービスの開始NET START MSSQLSERVER
また、Transact-SQLにもSHUTDOWNというコマンドがあるので、こちらでSQL Serverを停止する事も出来ます。
コマンドプロンプトでosql.exeやisqlw.exeを起動して以下のコマンドを実行してください。
通常のシャットダウン(停止に相当)SHUTDOWN
GOまた、即時に停止する場合は以下のコマンドを実行してください。
即時シャットダウンSHUTDOWN WITH NOWAIT
GO以上、参考になりましたでしょうか?
-
broken_kids さん、
こんにちは!
フォーラム オペレーターの服部 清次です。
今回、nagino さんと CatTail さんの回答が参考になったようですので、こちらの情報を他の方々に活用していただくためにも、私の方で回答チェックを付けさせていただきました。
また何か疑問がありましたら、ぜひ TechNet Forum に投稿してください。
これからも、よろしくお願いします。
それでは、また!
_____________________________________________
マイクロソフト株式会社 フォーラム オペレータ 服部 清次