2012-04-04 59 views
1

私のJavaアプリケーション・ログにこのエラーがあります。 Oracleの一時表を使用する前に誰でもこれを経験しましたか?あなたの解決策は何ですか?どんな助けも大歓迎です。ORA-14450:すでに使用中のトランザクション・テンポラリ・テーブルにアクセスしようとしました

+0

解決策は、一時テーブルを使用する方法と作成方法によって異なる場合があります。 'ON COMMIT PRESERVE ROWS'で作成しましたか?もしそうなら、セッション全体のデータを本当に保存する必要がありますか?おそらく、トランザクションのデータだけを保持する 'ON COMMIT DELETE ROWS'を使って作業することができますか?詳細を教えてください... –

+0

一時テーブルが 'ON COMMIT DELETE ROWS'で作成され、javaアプリケーションによって呼び出されたpl/sqlがコミットを発行してトランザクションを終了します。 – tpeng

答えて

2

接続を終了して再度開始してください。 プロセスが実行されているかどうかを調べるには、以下のコードを使用して実行中のプロセスを見つけてください。
エラー原因: 同じセッションの同時トランザクションによってすでに移入されたトランザクション一時表にアクセスしようとしました。

アクション: 同時トランザクションがコミットまたはアボートするまで一時テーブルにアクセスしようとしないでください。

SELECT 
    o.object_name 
, s.sid, s.serial# 
, s.username 
, s.osuser, s.machine 
, 'alter system kill session '''||to_char(s.sid)||','||to_char(s.serial#)||''';' ks 
FROM 
    user_objects o 
, v$lock a 
, v$session s 
WHERE 
o.object_name = 'table_name_here'  
AND a.id1 = o.object_id  
AND a.type = 'TO'  
AND a.sid = s.sid 
; 
関連する問題