入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

PL/SQL developer里面查dblink会要commit

创建时间:2016-06-24 投稿人: 浏览次数:2987

    在使用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,你会发现本地查询是没有事务的。

声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。