.NET 使用ODP.NET, BULKCOPY.WriteToServer 造成重复数据

hurricane880 2011-07-07 11:05:33
功能都做完了,单元测试时我试着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: 数据插入是多线程的,插入前检测是不可能解决问题的。
...全文
307 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
QYD 2012-05-02
  • 打赏
  • 举报
回复
的确存在此问题。
另外,如果ORACLEBULKCOPY的表存在主键,会令执行速度变慢很多,将主键禁用后速度会明显提高。欢迎交流
hurricane880 2011-09-13
  • 打赏
  • 举报
回复
这个查了oracle的手册, 上面说,由于BulkCopy是在磁盘级操作的,所以无视各种约束,也许这就是为什么BulkCopy非常快吧,另外我想了想,觉得Oracle这样设计也有他的道理,通常这种函数都是用来大量历史数据备份的或者系统间数据迁移的,所以数据都是整块整块进行。 而我的场景根本不适合用这个操作。

PS:我专门查了表, 表上的约束是开启的。 并且由于有重复的主键记录, 主键上建立的index被破坏了,有兴趣的朋友可以试试这个函数

[Quote=引用 3 楼 tangren 的回复:]

如果有主键,你前台无论使用什么技术,数据库都会保证主键的唯一性,
插入重复的主键值报错是肯定的。除非你先禁用了表上的约束。
[/Quote]
tangren 2011-07-15
  • 打赏
  • 举报
回复
如果有主键,你前台无论使用什么技术,数据库都会保证主键的唯一性,
插入重复的主键值报错是肯定的。除非你先禁用了表上的约束。
Kobayashi 2011-07-15
  • 打赏
  • 举报
回复
小哥。。没看懂你的题目 。
可以把结果搞个图片过来不?
Rotel-刘志东 2011-07-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 tangren 的回复:]
如果有主键,你前台无论使用什么技术,数据库都会保证主键的唯一性,
插入重复的主键值报错是肯定的。除非你先禁用了表上的约束。
[/Quote]
同意
hurricane880 2011-07-08
  • 打赏
  • 举报
回复
算了,看来oracle的都去英文论坛了,关贴,代码改过了,放弃bulkcopy了。以后再想想

17,089

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧