【问题标题】:Select * from table@dblink in PL/SQL Developer在 PL/SQL Developer 中从 table@dblink 中选择 *
【发布时间】:2019-11-04 11:47:10
【问题描述】:

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

【问题讨论】:

  • 您使用哪个工具来运行此查询?
  • 我用PL SQL Developer 8.0

标签: 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。通过提交(毫无价值的)交易,您可以避免其中一些错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-19
      • 1970-01-01
      • 2021-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多