【Oracle Database】SHUTDOWN IMMEDIATE実行前に本当は確認すべきこと
なぜSHUTDOWN IMMEDIATEが終わらないのか?
SHUTDOWN IMMEDIATEコマンドでのデータベースのシャットダウンが、「終わらない」、「データベースが停止しない」、「タイムアウトエラー(ORA-01013等)が発生し失敗する」というお問い合わせをいただくことがあります。
SHUTDOWN IMMEDIATEは、「IMMEDIATE(即時の)」の名の通り、即時に停止されそうに思えますが、処理実行中のアクティブなセッションが存在した場合は、処理の完了を待機するのです。この待機が1時間を超えるとSHUTDOWN IMMEDIATEはタイムアウトしてしまい、「ORA-01013: ユーザーによって現行の操作の取消しがリクエストされました」が記録されます。
そこで、SHUTDOWN IMMEDIATEの実行前には、予めセッション情報を確認することをおすすめしています。今回はその点について詳しくご紹介します。
SHUTDOWN IMMEDIATEについて
管理者ガイド
では、SHUTDOWN IMMEDIATEについて次のように説明されています。
- 新しい接続は許可されず、新しいトランザクションは開始できません。
- すべての未コミットのトランザクションは、ロールバックされます。
- 現在データベースに接続しているユーザーが切断されるのを待機しません。
SHUTDOWN IMMEDIATEは既存の接続を全て切断しますが、SQL実行中やロールバック中などのアクティブなセッションが存在すると、その完了を待機します。
待機時間が1時間を超えると、SHUTDOWN IMMEDIATEはタイムアウトして失敗します。セッションが残っていることが原因でシャットダウンがタイムアウトした場合、プロンプトにはORA-01013が返り、アラートログには以下のようにメッセージが出力されます。
Wed Mar 22 04:19:12 2017
Shutting down instance (immediate)
Stopping background process SMCO
Shutting down instance: further logons disabled
Wed Mar 22 04:19:13 2017
Stopping background process CJQ0
Stopping background process QMNC
Stopping background process MMNL
Stopping background process MMON
License high water mark = 3
Wed Mar 22 04:24:15 2017
Active process 7628 user 'SYSTEM' program 'ORACLE.EXE (SHAD)' ★
SHUTDOWN: waiting for logins to complete.
このログ出力で示されたセッションが実行している処理を確認することは、新規セッションが既に接続できない状態であるため困難です。
そのため、SHUTDOWNコマンドを実行する前に、セッションの残留や処理実行中のセッションが存在しないか、予め確認しておくことをおすすめします。
SHUTDONW IMMEDIATE実行前にセッション情報を確認しよう
シャットダウンを正常に完了させるために、事前にアクティブなセッションが存在しないか確認しましょう。存在していた場合は処理内容を確認した上で、対応を検討します。下記のSQLで、現在データベースに存在しているセッションや実行中のSQLを確認できます。
SQL> SELECT
2 sid,
3 serial#,
4 username,
5 status,
6 machine,
7 program,
8 sql_id
9 FROM v$session
10 WHERE username IS NOT NULL
11 and sid != USERENV('SID');
SID SERIAL# USERNAME STATUS MACHINE PROGRAM SQL_ID
---------- ---------- ----------- -------- -------------------- ------------- -------------
131 15 SCOTT INACTIVE ACE\B1401-02-25-W sqlplus.exe
197 5 SCOTT ACTIVE ACE\B1401-02-25-W sqlplus.exe 44ff5y395s8na
この状態で、SHUTDOWN IMMEDIATEを実行した場合、SID:131は「STATUS = INACTIVE」であり、強制的に切断されるため対処は不要です。しかし、SID:197は「STATUS = ACTIVE」であり、SQL_ID:44ff5y395s8naのSQLを実行しているため、この処理の完了を待つか手動で停止する必要があります。
SQL_ID:44ff5y395s8naの処理内容を確認するには次のSQLを実行します。
SQL> SELECT
2 sql_text
3 FROM v$sqltext
4 WHERE sql_id='44ff5y395s8na';
SQL_TEXT
----------------------------------------------------------------
update test set col = '2' where col='1'
SQL文を確認の上で処理の終了を待つ、または停止しても問題ない処理であれば「ALTER SYSTEM KILL SESSION」で停止し、Activeなセッションが存在しない状態でSHUTDOWN IMMEDIATEを実行しましょう。
※「ALTER SYSTEM KILL SESSION」のIMMEDIATE句はORACLE 10g以降のオプションです。
SQL> ALTER SYSTEM KILL SESSION '&SID,&SERIAL#' IMMEDIATE;
上記SQL実行後も該当のセッションがKILLされない場合は、SPIDを確認してOSコマンドでプロセスをKILLすることも検討しましょう。
SQL> SELECT
2 s.sid,
3 s.serial#,
4 p.spid,
5 s.username,
6 s.status,
7 s.machine,
8 s.program,
9 s.sql_id
10 FROM v$process p, v$session s
11 WHERE p.addr=s.paddr
12 and s.username IS NOT NULL
13 and s.sid != USERENV('SID');
SID SERIAL# SPID USERNAME STATUS MACHINE PROGRAM SQL_ID
---------- ---------- ------- ---------- -------- ----------------- -------------- -------------
197 36743 9352 SCOTT INACTIVE ACE\B1702-53-01 sqlplus.exe 44ff5y395s8na
まとめ
SHUTDOWN IMMEDIATEに時間がかかる、データベースが停止しないというお問い合わせをいただくことは少なくありませんが、タイムアウト後にお問い合わせをいただいても、原因となったセッションや処理内容を特定できない場合があります。
今回ご紹介した方法により、SHUTDOWN IMMEDIATE実行前に予めセッション情報をご確認いただくことで予防ができます。データベース停止の際にはぜひご確認をお願いします。
筆者情報
アシスト北海道
2014年、設立されて間もないアシスト北海道に入社し、以来サポートセンターの立ち上げに従事。現在は夜間休日のOracle製品担当サポートリーダーとして重篤障害と格闘する毎日。アシスト北海道の2017年度従業員代表としても活動中。
■本記事の内容について
本記事に記載されている製品およびサービス、定義及び条件は、特段の記載のない限り本記事執筆時点のものであり、予告なく変更になる可能性があります。あらかじめご了承ください。
■商標に関して
・Oracle®、Java及びMySQLは、Oracle、その子会社及び関連会社の米国及びその他の国における登録商標です。
・Amazon Web Services、AWS、Powered by AWS ロゴ、[およびかかる資料で使用されるその他の AWS 商標] は、Amazon.com, Inc. またはその関連会社の商標です。
文中の社名、商品名等は各社の商標または登録商標である場合があります。
関連している記事
本記事では、従来のON COMMIT MViewが抱えてきたこのようなスループット低下や待機イベントのボトルネックを振り返りつつ、Oracle AI Database 26aiが提供する「同時リフレッシュ(Concurrent Refresh)」によって、OLTP/DWHそれぞれのユースケースでどのような改善が見込めるのかを検証していきます。
- Oracle Cloud
- Oracle Database
2026.03.25
BaseDBの運用でData Pump用の領域が不足した際、外部ストレージの活用が有効です。本記事では3つのストレージについて1TB利用時のコスト目安や性能、運用負荷を徹底比較します。自社環境に最適な外部ストレージ選びのポイントが分かります。
Oracle Trace File Analyzer(TFA)は、障害時のログ収集を効率化するツールです。複数ログの一括取得や時間指定、シングル環境での導入手順まで、現場目線でわかりやすく解説します。