【问题标题】:Select * from table@dblink in PL/SQL Developer在 PL/SQL Developer 中从 table@dblink 中选择 *
【发布时间】:2019-11-04 11:47:10
【问题描述】:
【问题讨论】:
标签:
oracle
plsqldeveloper
【解决方案1】:
通过 db_link 查询会翻转数据字典中的“我们有事务”开关
在大多数工具中,每当您查询 DB_LINK 时,您都会收到 COMMIT 提示或打开事务的指示符。
那是因为您在不同的数据库中执行了我们不清楚的“某事”。您的“选择”可能会产生需要提交/回滚的副作用,或Tom would say
'如果你是分布式的,你会想要完成在远程站点上隐式启动的任何事情。'
【解决方案2】:
我认为 PL/SQL 正在尝试删除无用的事务以帮助避免会话错误。似乎每当您按下“获取最后一页”按钮时,PL/SQL Developer 都会运行 commit write batch,如果该语句包含数据库链接,如果会话中当前没有打开的事务,并且如果该语句不包含 @987654322 @。
这些是很多奇怪的条件,但它们似乎确保程序不会在不应该提交的时候提交。我假设 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。通过提交(毫无价值的)交易,您可以避免其中一些错误。