首先说一下我现在要做的事情:
我想从服务器B按照某个条件读取多个数据表到服务器A。数据表先导入B.T1,其余B.T2,B.T3通过B.T1的OBJID进行关联选择读取。我现在的解法方案:
在A上创建一个可以访问B的DBLINK DL1。
创建一个游标cur0,一条条读取B.T1的记录(select * from B.T1@DL1 where XXXX),并根据OBJID再查询B.T2,B.T3的数据(select * from B.T2@DL1 where OBJID='XXX')我现在遇到这样的问题: 游标循环几次后,出现以下错误:
ORA-02046: 分布式事务处理已经开始
ORA-02063: 紧接着 line (起自 DL1)
ORA-22275: 指定的 LOB 定位符无效在网络上查了,说是DBLINK用完没有显示关闭。但是游标循环的过程中,DBLINK是无法关闭的。而B.T1一开始不能马上和B.T2,B.T3关联,因为B.T2,B.T3有数据量很大的字段(CLOB字段或BLOB字段)。

解决方案 »

  1.   

    给个建议,B库T1,T2,T3关联后得到结果再把数据插入到A库
    你试试PS:好像见过帖子说DBLINK取LOB数据比较麻烦,没有用过,因此没有什么发言权
      

  2.   

    在dblink中不能直接查询LOB字段
    如: select lob_text from remote_table@dblink会报ora-22992错误
    可以先在本地建立一个临时表,使用
    insert into temp_table select lob_text from remote_table@dblink
    来插入,然后再从本地查询
      

  3.   

    一定要先把数据弄到A服务器后或者是先关联三表后 再操作吗  主要是怕效率差呀。=。=那不用dblink的话还有没其他链接方式,好的方法呢?
      

  4.   

    用ORACLE其他同步方法到本地临时表,然后再本地操作
      

  5.   

    似乎可用EXP导出B库这几个表
    然后再A库IMP进去
      

  6.   

    建议不要使用游标,游标循环会导致DBLINK失败(传说中的BUG?)。对于数据量较大的数据库,游标读取速度也慢。
    个人建议创建一个临时表,先将select OBJID from B.T1@DL1 where XXXX 导入一张OBJID的临时表,再根据临时表查询B.T2,B.T3的数据。估计LZ用DBLINK是为了实时采集数据,要不谁用DBLINK呀,直接导入就好了-,-