ユーザーがOracleデータベースにログインしました。コミットまたはロールバックせずにログアウトした状態でデータベースを変更できません。コミット/ロールバックせずに切断されたOracleユーザーは、データベースを変更できません
私は
rollback
を試してみましたが、それは動作しませんでした。
どのような考えですか?おかげさまで
ユーザーがOracleデータベースにログインしました。コミットまたはロールバックせずにログアウトした状態でデータベースを変更できません。コミット/ロールバックせずに切断されたOracleユーザーは、データベースを変更できません
私は
rollback
を試してみましたが、それは動作しませんでした。
どのような考えですか?おかげさまで
コミットまたはロールバックせずに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#>>'
を殺すためにどのセッション(複数可)を同定したらセッションを終了します。
クライアントは、クライアントが何時間もそれを要求しなければ、しばしばかなり満足しています。 SQLNET.EXPIRE_TIMEをサーバー上の何かに設定しているかどうかを確認してください。 0以外の値であれば、クライアント接続が切断されたかどうかを確認するまでに何分待つかが分かります。ゼロの場合はチェックされず、クライアント要求に応答するときにクライアントが死んでいることがわかった場合にのみ認識されます。
また、ロールバックには時間がかかることがあります。多くの作業が完了している場合、時間がかかることがあります。そのセッションで待機しているものは、そのロールバックが完了するまで待機し続けます。
答えに@JustinCaveありがとうございます。明確にするために、セッションが明示的に終了しない場合、自動的に終了することはありませんか? –
@RussellSilva - それはあなたが "自動"という意味に依存します。クライアントアプリケーションがクラッシュした場合、データベースサーバーでDCD(デッドコネクション検出)を有効にすることができます。これにより、データベースはクライアントに定期的にpingを送信して、クライアントがまだ停止しているかどうかを判断し、クライアントがクラッシュした場合にセッションを終了させます。しかし、それは比較的早く起こるので、元の質問には関係しませんでした。待機時間が長すぎる場合、セッションを強制終了するようにOracleを構成できます。いずれの場合も、セッションは明示的に 'rollback'で終了します。これはデータベースによって終了されたばかりです。 –