两个Oracle数据库实例jcpttest和test中的两张表(单主键)之间作数据同步,分别采用单条single和批batch方式做大量数据(超过10000条)连续插入时,另一个表无法全部同步插入,记录丢失现象严重,删除也无法全部同时删除,请问这是Oracle数据库本身原因,还是我在插入时应该注意些问题(包括触发器)?谢谢!

解决方案 »

  1.   

    1、Oracle本事单条插入和批量插入效率差别很大,建议用批量插入。
    2、不知你是怎么处理的,不好给你瞧病。理论上你这种问题在Oracle中不会出现。
      

  2.   

    数据库同步不是通过代码实现的,而是通过在CB-ESB环境配置流程来做的,只能够看到服务器抛出的异常,然后再配置流程,无法捕获。少量的数据同步可以实现,但记录一多就丢失记录,大家只管说说出现这种情况的通常原因,下面我重新配置就行了!谢谢!
      

  3.   

    我想还是需要了解工具的工作原理。同步过程中,如何提交和回滚?如何抛出异常?当有错误的时候,之间的操作是回滚还是中断?你说数据有丢失,难道“CB-ESB环境”是一条条提交,有错误也continue?楼主的信息太少了,因为不知道你采用的方式,也不知道你的目标。例如,对我而言,我的目标和策略可以为: 
    1。批量插入
    2。事物完整性(当有任何错误,记录错误信息,并全部回滚)
    3。记录开始和结束时间
    4。 等等现在的情况是,工具如何工作不清楚。 如何保证事物完整性不清楚。个人观点,仅供参考
      

  4.   

    没有报错误信息,就是同步记录丢失!整个过程全在流程配置里面,上面说的情况可以配置,但是各种处理信息反馈不回来,只有结果。另外一次插入记录超过298条时,不管单条single,还是批batch方式,都抛出异常:java.sql.SQLException: ORA-01000: 超出打开游标的最大数。愁死了!
      

  5.   

    试着使用游标方式: 游标是用来处理使用SELECT语句从数据库中检索到的多行记录的工具。借助于游标的功能,数据库应用程序可以对一组记录逐个进行处理,每次处理一行。打开游标  
    open <游标名>      例 open color_cur; 游标属性 
    %notfound 
    %found 
    %rowcount 
    %isopen 例 
    fetch my_cur into my_var; 
       while my_cur %found loop 
        (处理数据) 
       fetch my_cur into my_var; 
       exit when my_cur %rowcount=10; 
    end loop; %notfound属性 
    取值情况如下: 
    fetch操作没有返回记录,则取值为true 
    fetch操作返回一条记录,则取值为false 
    对游标无fetch操作时,取值为null 
    <游标名> %notfound 例 
    if color_cur %notfound then... 
    注:如果没有fetch操作,则<游标名> %notfound将导致出错, 
    因为%notfound的初始值为NULL。 关闭游标 
    close <游标名>      例  close color_cur;