ORA-14450 "attempt to access a transactional temporary table alreadyin use",无自主事务



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

这只会偶尔发生一次。该应用程序同时使用数据库过程和预言机表单。

提前致谢

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

SELECT * FROM v$lock
  WHERE id1 = (SELECT object_id FROM all_objects WHERE owner = <schema_name> 
               AND object_name =<glb temp table>) --find which sessions lock the temp table
SELECT * FROM v$session WHERE sid =<above query result> --find their's sid and serial
ALTER SYSTEM KILL SESSION '<sid>,<serial>';

信用

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

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

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

关闭与该特定架构的实时连接对我有用。当我访问全局临时表并尝试更新其定义时,这种情况已经发生了多次。

最新更新