功能都做完了,单元测试时我试着2次同时通过使用bulkcopy来插入2组同样的数据,按理是会有PK violation,但是让我心惊肉跳的是,没有我去看表,表的index已经处于unused的状态了,由于PK constraints的关系,必须先disable constrain然后重新建index。 回去看了oracle的文档,上面对于constraint一节也解释的很模糊,给我的感觉是他们做的垃圾,所以不好意思说出来, 对于not null constraints 会reject, 也没有讲是整个reject,还是单条记录reject对于unique/primary key的话,只有一句,会做validate,然后在最后使相应的index处于unused状态,请问那位朋友也用过这个东东的,交流下经验,odp.net的bulkcopy这么可怕么,连Pk constrain 都忽略的话,我真怀疑这玩意有什么用。不行我就要用普通的插入了就内个arraybinding, 现在已经做了一半了,不过还是不甘心,所以上来问问,oracle那边我也打算发个Email问问他们看看怎么说PS: 数据插入是多线程的,插入前检测是不可能解决问题的。

解决方案 »

  1.   

    算了,看来oracle的都去英文论坛了,关贴,代码改过了,放弃bulkcopy了。以后再想想
      

  2.   

    这个查了oracle的手册, 上面说,由于BulkCopy是在磁盘级操作的,所以无视各种约束,也许这就是为什么BulkCopy非常快吧,另外我想了想,觉得Oracle这样设计也有他的道理,通常这种函数都是用来大量历史数据备份的或者系统间数据迁移的,所以数据都是整块整块进行。 而我的场景根本不适合用这个操作。 PS:我专门查了表, 表上的约束是开启的。 并且由于有重复的主键记录, 主键上建立的index被破坏了,有兴趣的朋友可以试试这个函数
      

  3.   

    的确存在此问题。
    另外,如果ORACLEBULKCOPY的表存在主键,会令执行速度变慢很多,将主键禁用后速度会明显提高。欢迎交流