2011-05-09 14 views

答えて

9

コミットまたはロールバックせずにOracleデータベースからログアウトすることはできません。クライアントアプリケーションがクラッシュしたり強制終了されたりして、ロックを保持しているサーバーにセッションを残してログアウトする機会がなかった可能性があります。その場合、DBAはそのセッションを終了する必要があります。

あなたはDBAであり、あなたが殺される必要があるものをセッションわからない場合、あなたは他のセッションに

SELECT ses.sid, ses.serial#, ses.username, ses.program, ses.osuser, ses.machine 
    FROM v$session ses, 
     dba_blockers blk 
WHERE blk.holding_session = ses.sid 
をブロックしているロックを保持している様々なセッションに関する情報を取得するには、次のクエリを実行することができます

データベース・サーバは、もはやその活性が自動的にロールバックされますクライアントに到達することはできませんし、それがする場合、セッションは、明示的にロールバックしなかった場合は

ALTER SYSTEM KILL SESSION '<<sid>>, <<serial#>>' 
+0

答えに@JustinCaveありがとうございます。明確にするために、セッションが明示的に終了しない場合、自動的に終了することはありませんか? –

+1

@RussellSilva - それはあなたが "自動"という意味に依存します。クライアントアプリケーションがクラッシュした場合、データベースサーバーでDCD(デッドコネクション検出)を有効にすることができます。これにより、データベースはクライアントに定期的にpingを送信して、クライアントがまだ停止しているかどうかを判断し、クライアントがクラッシュした場合にセッションを終了させます。しかし、それは比較的早く起こるので、元の質問には関係しませんでした。待機時間が長すぎる場合、セッションを強制終了するようにOracleを構成できます。いずれの場合も、セッションは明示的に 'rollback'で終了します。これはデータベースによって終了されたばかりです。 –

3

を殺すためにどのセッション(複数可)を同定したらセッションを終了します。

クライアントは、クライアントが何時間もそれを要求しなければ、しばしばかなり満足しています。 SQLNET.EXPIRE_TIMEをサーバー上の何かに設定しているかどうかを確認してください。 0以外の値であれば、クライアント接続が切断されたかどうかを確認するまでに何分待つかが分かります。ゼロの場合はチェックされず、クライアント要求に応答するときにクライアントが死んでいることがわかった場合にのみ認識されます。

また、ロールバックには時間がかかることがあります。多くの作業が完了している場合、時間がかかることがあります。そのセッションで待機しているものは、そのロールバックが完了するまで待機し続けます。

関連する問題