问题是这样的:在2台机器上各有1个数据库实例A和B,我要将保存到A上面的数据推到B上面去,目前采用的方式是建A到B的dblink,当有保存到A上面的数据时就利用触发器同时将数据通过Dblink推到B实例上去。但是连接B实例所在的机器比较特殊,要经过一步认证才能从A机器连接到B机器,这个认证的过程比较费时,大概1分钟左右,不过连接建立之后数据库操作就很快了,就想问问这个A到B的dblink连接能否保持住,保持住的话这样保存的速度就会比较快了?
哪位大侠或者有其他的推数据的方法,也可以指点小弟一下?

解决方案 »

  1.   

    貌似没有保持住的办法,不过你可以变通一下在A数据库上 建立一个临时表, 触发器先网这个临时表中插入数据,当积累到一定量的时候 再一次写入到B库上去
    保证一次连接 写多条,能提高些速度或者
    在认证的机器上对 A数据库服务器做特殊处理,给A机器一个高级授权来。
      

  2.   


    oracle本身貌似没有这个功能,不过应该可以变通解决。忘记dblink丢失时的错误码了。不过LZ你自己可以模拟出来。
    (1)建立dblink联接后
    (2)断开网线
    (3)尝试向dblink查点东东,这时oracle将报告一个错误代码 假定为A
      貌似这个:ORA-01012: not logged on
    (4)在应用中判断为该错误代码,则自动重新联接。如果LZ的程序存在一个统一错误处理的入口点,则可以把错误代码检测以及重新联接放在那里处理。
      

  3.   

    貌似是错误代码 2068
    02068, 00000, "following severe error from %s%s"
    // *Cause: A severe error (disconnect, fatal Oracle error) received from
    //         the indicated database link.  See following error text.
    // *Action: Contact the remote system administrator.
      

  4.   

    你的问题是卡在认证这里,为什么认证会让DBLINK断开?
    DBLINK只是个链路,一旦这个链路建立了,就不需要再次认证了环境如何的?
    DBLINK建立的时候是否有使用密码建立连接?
      

  5.   

    当本地的SESSION关闭时,其打开的DBLINK也会关闭,因此你需要保持本地连接不断开。
      

  6.   

    设置数据库连接池的最小数和最大数相同,可以减少重新连接的机会。
    建议先将要同步的数据存放在本地表,再由一个后台进程长连数据库,定期将数据通过DBLINK同步。
      

  7.   

    不知道 MATERIALIZED VIEW 能不能实现。
      

  8.   

    查询时不是通过  @db_line 这样吗?倒是 对那个 认证  挺感兴趣。需要大概1分钟左右,到底是怎么个认证法?
      

  9.   

    要想不断开的话。是不是 一直通过 dblink 来查询,就不会断开?
      

  10.   

    要想不断开的话。是不是 一直通过 dblink 来查询,就不会断开?
      

  11.   

    我用job 5秒查一次,发现还是断开的