ber*_*d_k 8 oracle-11g bulkcopy
我的 Oracle 数据库中有一个表,其中
select pkcol, count(*) from myTable group by pkcol having count(*) > 1;
Run Code Online (Sandbox Code Playgroud)
产量
PKCOL COUNT(*)
------- ----------
1 2
2 2
Run Code Online (Sandbox Code Playgroud)
试图删除重复的行
delete myTable where pkcol = 1;
Run Code Online (Sandbox Code Playgroud)
产量:
ORA-01502: 索引“MYTABLE.PK_MT”或此类索引的分区处于可用状态。
我正在使用 Oracle.DataAccess.Client.OracleBulkCopy 来填充表格。
据我了解,必须检查Oracle PRIMARY KEY 约束的文档。
显然它们没有被检查,正如我通过连续两次执行相同的批量复制而发现的,这些批量复制以所有行中的重复结束。
现在我只在删除所有行后才使用它,并且我正在使用一个具有类似主键的表作为源。因此,我预计不会有任何问题。
但是深深嵌入到我的 MS Build 脚本中,我最终在 2210 行中只有 2 个重复。
我想首先忽略主键是一个明显的错误。不允许批量复制忽略主键约束。
编辑:
同时我发现,在调用bulkcopy之前,通常由某个脚本插入的2个冲突行。问题归结为我的已知问题,bulkcopy 不会在这里检查主键。
Fro*_*y Z 10
遇到了类似的问题。
如果您只需要摆脱错误,请执行以下操作:
SELECT 'ALTER INDEX '||OWNER||'.'||INDEX_NAME||' REBUILD;'
FROM DBA_INDEXES
WHERE STATUS = 'UNUSABLE';
Run Code Online (Sandbox Code Playgroud)
这将输出ALTER INDEX ... REBUILD;
所有“不可用”索引的语句。运行它们,以便索引可以再次“可用”。