暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 并行提示和DML错误日志记录

ASKTOM 2020-09-12
361

问题描述

嗨,

CREATE TABLE TEMP_TEST
(
  ID  NUMBER(10)
)

ALTER TABLE TEMP_TEST ADD (
  CONSTRAINT temp_test_pk
  UNIQUE (ID)
  );



场景: 1:
truncate table TEMP_TEST;
ALTER SESSION ENABLE PARALLEL DML;


INSERT INTO  /*+ NOAPPEND PARALLEL(5) */ TEMP_TEST
SELECT /*+ PARALLEL */DISTINCT BUCKET FROM source
LOG ERRORS INTO ERR$_TEMP_TEST ('insert failed') REJECT LIMIT UNLIMITED;


场景: 2:
truncate table TEMP_TEST;
ALTER SESSION ENABLE PARALLEL DML;


INSERT INTO  /*+ NOAPPEND PARALLEL(5) */ TEMP_TEST
SELECT DISTINCT BUCKET FROM source
LOG ERRORS INTO ERR$_TEMP_TEST ('insert failed') REJECT LIMIT UNLIMITED;



场景: 1失败,唯一约束错误,而不是错误记录插入错误表,
但是场景: 2个错误记录正在插入到ER R$ _ TEMP_TEST中?

这两者之间的唯一区别是select语句中的并行提示。




专家解答

根据文档:

“引发唯一约束或索引违规的任何直接路径插入或合并操作。”

每当您执行 * parallel * DML时,它都是隐式的直接加载操作。

这是那些不幸的限制之一
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论