PL/SQL developer里面查dblink会要commit

    在使用PL/SQL developer里面查dblink,commit和rollback会亮。原因是什么呢?

     做一些测试可以发现一些规律:

     select count(1) from test@dblink; --不会产生要commit提示
     select * from test@dblink; --会产生要commit提示
     select * from test@dblink where rownum<5; --不会产生要commit提示

     当需要的数据都返回了,就不会产生要commit提示,否则就会产生commit提示。


     为什么会这样呢?数据库把这个远程查询当做一个分布式事务了,实验:

session1:
SQL> select sid from v$mystat where rownum =1;
       SID
----------
       132
SQL>  select * from test@dblink;--执行之后,commit按钮要提交

session2:       
SQL> select s.sid,
          s.serial#,
          s.sql_hash_value,
          r.segment_name,
          t.xidusn,
          t.xidslot,
          t.xidsqn
     from v$session s, v$transaction t, dba_rollback_segs r
    where s.taddr = t.addr
      and t.xidusn = r.segment_id(+);
 SID  SERIAL#   SQL_HASH_VALUE        SEGMENT_NAME             XIDUSN    XIDSLOT     XIDSQN
---- ---------- -------------- ------------------------------ ---------- ---------- --------
       132      44205              0 _SYSSMU7_4222772309$          7         22      14521


可以再做一个实验,建一张本地的test表,查询没有显示完数据,与上述实验的区别就是少了@dblink,你会发现本地查询是没有事务的。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值