Database Support Blog

  • Oracle Database
2017.08.30

【Oracle Database】SHUTDOWN IMMEDIATE実行前に本当は確認すべきこと

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及びNetSuiteは、Oracle、その子会社及び関連会社の米国及びその他の国における登録商標です。
 ・Amazon Web Services、AWS、Powered by AWS ロゴ、[およびかかる資料で使用されるその他の AWS 商標] は、Amazon.com, Inc. またはその関連会社の商標です。
  文中の社名、商品名等は各社の商標または登録商標である場合があります。

関連している記事

  • Oracle Database
2024.04.08

【Oracle Database】FAQで安定運用に貢献!サポートセンターのナレッジ公開の取り組み

アシストオラクルサポートセンターが公開しているFAQは、仕様に関するQAやエラー発生時の対処方法などはもちろん、不具合情報や障害発生時の情報取得方法といった安定運用に役立つ内容も扱っています。そのFAQをどのように作成しているのか、サポートセンターの取り組みをご紹介します。

  • Oracle Cloud
  • Oracle Database
2024.02.02

OCIにおけるOracle Database 11g R2、12g R1、12g R2の新規プロビジョニング終了とその影響

Oracle Databaseのバージョン11g R2、12g.R1、12g.R2は既にすべてのメーカーサポートが終了しています。OCIのBase Database Serviceでも2024年1月中旬ころから11g R2、12g R1、12g R2での新規プロビジョニングができなくなりました。

  • Oracle Database
  • その他
2023.12.21

【Oracle Database】サポートセンターでの生成AI(Glean)活用

アシストでは全社員にAIアシスタントGleanを導入しました。サポートセンターで2ヶ月間使ってみて感じた効果やメリットをお伝えします。

ページの先頭へ戻る