ORA-14450“尝试访问已使用的事务临时表”,没有自治事务

时间:2014-11-24 18:12:57

标签: oracle transactions

我无法提供具体代码,因为解决方案已经过分类。我想问一下,在某些情况下,是否可能有错误ORA-14450“尝试访问已经在使用的事务临时表”而没有任何自治事务或DDL代码。

这只会偶尔发生一次。该应用程序使用数据库过程和oracle表单。

提前致谢

3 个答案:

答案 0 :(得分:10)

ORA-14450表示您在临时表上有阻塞会话。找到阻止会话并在需要时将其终止。

SELECT * FROM v$lock
  WHERE id1 = (SELECT object_id FROM all_objects WHERE owner =<schema_name> AND object_name =<glb temp table>)

SELECT * FROM v$session WHERE sid =<above query result>

ALTER SYSTEM KILL SESSION '<sid>,<serial#';

Credit

答案 1 :(得分:4)

如果你的GTT是使用COMMIT PRESERVE ROWS子句创建的,那么如果没有锁定它仍然没有帮助。一旦用户在此表上执行DML并完成事务,该表仍在使用中。如果提交了事务,它将不会显示在v $ lock中。

答案 2 :(得分:0)

对(gtt_table)的更改表实际上已经停滞了几个小时...我已经完全放弃了-然后我使用了上面给出的上面的查询-使用了下面的查询-杀死了所涉及的会话(注意所涉及的-不必然会阻止会话),解决了这个问题。

SELECT'更改系统终止会话'''|| s.sid ||','|| s.serial#||',@'|| s.inst_id || ''';' 从gv $ lock l,gv $ session s WHERE l.id1 =(从all_objects中选择object_id WHERE owner ='&ownernam' AND object_name ='&tmptblname') 和l.sid = s.sid和l.inst_id = s.inst_id