在PL / SQL Developer中从table @ dblink选择*

当我在PL / SQL Developer中运行查询select * from table@dblink时,transaction commit/rollback图标被激活,但是如果我使用Fetch last page,则这些图标被禁用。为什么会这样?

langku 回答:在PL / SQL Developer中从table @ dblink选择*

通过db_link查询会翻转数据字典中的“我们有交易”开关

在大多数工具中,每当查询DB_LINK时,系统都会提示您输入COMMIT或打开交易记录。

那是因为您在做“某事”,这在另一个数据库中对我们来说并不明确。您的“ SELECT”可能具有需要COMMIT / ROLLBACK的副作用,或者为Tom would say

'如果您是分布式用户,则希望完成所有在远程站点上隐式启动的操作。'

,

我认为PL / SQL正在尝试删除无用的事务以帮助避免会话错误。似乎只要您按下“获取最后一页”按钮,如果语句包含数据库链接,会话中当前没有打开的事务并且语句不包含PL / SQL Developer,则PL / SQL Developer会运行commit write batch FOR UPDATE

这些有很多奇怪的条件,但是它们似乎可以确保程序在不应该提交时不会提交。我假设PL / SQL Developer使用commit write batch来使用的资源少于普通commit。该猜测是基于当我按下按钮时该查询返回的数字增加的。 (user commits还有另一个统计信息,并且这个数字不会增加。)

select value
from v$mystat
join v$statname on v$mystat.statistic# = v$statname.statistic#
where lower(display_name) = 'commit batch performed';

这种行为有点奇怪,但是可以帮助防止会话中的某些错误。例如,如果您以后尝试运行alter session enable parallel dml,则该会话将引发错误ORA-12841: Cannot alter the session parallel DML state within a transaction。通过提交(毫无价值的)交易,可以避免其中的一些错误。

本文链接:https://www.f2er.com/3167025.html

大家都在问