暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 事务级别gtt的行为发生了变化?

ASKTOM 2020-01-07
408

问题描述

大家好,

首先,非常感谢您的所有帮助,并祝您新年2020愉快 :)

我想提请您注意以下行为,我在LiveSQL中进行了测试
(19.5.0.0.0 ):


create global temporary table gtt ( x int ) on commit delete rows
/

Table created.


insert into gtt values (1)
/

1 row(s) inserted.


select * from gtt
/

X
---
1


declare
   pragma autonomous_transaction;
begin
   insert into gtt values ( 2 );
   commit;
end;
/

Statement processed.


select * from gtt
/

no data found



备注:
在以前的版本中,从8i到11g,上面的自治事务引发了以下错误:

ORA-14450: 尝试访问已在使用中的事务临时表

此行为也在下面的线程中进行了描述:

https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1086033238621

以及汤姆·基特 (Tom Kyte) 的著作《专家一对一甲骨文》。


在版本19c (也可能在18c和12c中),行为发生了变化。

现在自治事务不再引发错误,但是结束自治事务的提交 (或回滚) 也结束了主事务,这是非常不寻常的,
结果,主事务插入的未提交行也被删除。

与旧版本相同,该错误ORA-14450仍记录在版本19c中。


我想问一下这种行为改变是故意的,还是可能碰巧是值得检查的bug?


这里是一个测试脚本来重现这种情况:

https://livesql.oracle.com/apex/livesql/s/jgc0expagu7afd36vhmmdwt6i



提前非常感谢 & 致以最良好的问候,
尤迪思·门策尔

专家解答

从12.2开始,我肯定会看到您报告的行为。

我在内部询问,但我觉得这可能是一个错误。

我将添加更多信息。

更新1月14日:

错误30759170已被记录为此
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论