Oracle-BulkCopy 导致索引失效

2020年03月05日 17:31 · 阅读(857) ·

开发环境

名称 版本
操作系统 Windows 10 X64
Oracle win64_11gR2_database
PLSQL Developer 11.0.4.1788(64 bit)01.179332 - Unlimited user license

问题描述

系统里有一个功能,导入 Excel,替换原有数据表的数据。

由于一条条的 insert 效率很低,所以使用了 BulkCopy 来添加数据。

但是在添加数据时,报下面的错误

  1. '30' 行第 '1' 列中存在错误
  2. ORA-26026: 唯一的索引 TPSDATA.UK_VERSION_REGISTRATION_NO 最初处于无法使用的状态

BulkCopy 相关代码

BulkCopy 方法

相关表结构

导致异常的数据

问题分析

1.唯一索引失效了;
2.表中已有重复记录;
3.因为 2 的原因, 唯一索引重建不了。

其实有重复的记录原因在于可能进行了频繁操作,导致 DataTable 中数据重复,而 BulkCopy 操作把数据加进去,下次再加数据进去的时候,就报错了。

问题解决

目前没有办法解决 BulkCopy 破坏索引的办法,所以解决办法在于再 BulkCopy 数据前,检查数据是否重复,如果重复,就不让 BulkCopy

测试结果

暂无