我在服务器S1中有表A1,在服务器S2中有表A2。
这些表具有相同的结构,我想通过INSERT
将db_link
从A1应用于A2。
问题是,我想防止由于唯一约束或唯一索引异常而导致整个语句失败。
我尝试使用DML-ERROR-LOGGING
,但它不能与db_link(该语句引发的异常)一起使用。
我还检查了ignore_row_on_dupkey_index
提示的选项,
但是在远程数据库上也有同样的问题。
该问题有解决方案吗?
我正在使用oracle 11g版本。
答案 0 :(得分:0)
这也可能比较慢,但是由于您不希望逐行...
INSERT INTO T1 (c1, c2, ...)
SELECT c1, c2, ...
FROM T2
WHERE NOT EXISTS
(SELECT *
FROM T1
WHERE T1.c1 = T2.c1 AND . . . );
除此之外,另一种方法是:删除约束,执行脏插入,删除重复项,恢复约束
答案 1 :(得分:0)
最后,
我发现当远程表成为目标时,将应用插入
本地是源不起作用。
但是,当远程表是源表而本地表是目标表时,请执行命令-错误记录正常工作。
(我们需要交换db_links的方向并从另一台服务器运行命令)。
示例:
--- use that:
-- connect to S2
-- run
insert into A2 select * from A1@S1.. log errors...;
--- instead of that:
-- connect to S1
-- run
insert into A2@S2 select * from A1.. log errors...;