Почему журнал ошибок dml игнорируется в удаленной базе данных - PullRequest
0 голосов
/ 18 апреля 2019

У меня есть эта таблица - DIM_BP в 2 базах данных с одинаковой структурой и данными.

Эти таблицы имеют PK в некоторых столбцах.

Существует оператор вставки с регистрацией ошибок dml дляперехватывать ошибки во время вставки.

Когда я запускаю команду вставки из DB1 в DB2 с помощью dblink - я получил ошибку ограничения уникальности PK и инструкция завершилась неудачно (регистрация ошибок dml игнорируется).

Но когда я запускаю его из DB1 в DB1 (локальный) - ошибки нет .. и таблица ошибок заполняется ошибками ..

пример:

-- truncate table error table
truncate table DWH.ERR$_DWH_CONV;
table DWH.ERR$_DWH_CONV truncated.

-- truncate table in local DB
truncate table DWH.DIM_BP;
table DWH.DIM_BP truncated.

-- (log in to the remote server and) truncate the table
truncate table DWH.DIM_BP;
table DWH.DIM_BP truncated.

-- log to the local DB again

-- first insert into the remote
-- finisehd OK and commited
INSERT /*+ monitor */ INTO DWH.DIM_BP@DWH_DEV
SELECT * FROM ...
LOG ERRORS INTO DWH.ERR$_DWH_CONV ('DWH.DIM_BP@DWH_DEV.2019-04-16 16:05:58') REJECT LIMIT UNLIMITED;

130,091 rows inserted.

commit;

-- first insert into the local
-- finisehd OK and commited
INSERT /*+ monitor */ INTO DWH.DIM_BP
SELECT * FROM ...
LOG ERRORS INTO DWH.ERR$_DWH_CONV ('DWH.DIM_BP@DWH_DEV.2019-04-16 16:05:58') REJECT LIMIT UNLIMITED;

130,091 rows inserted.

commit;

-- run the same insert again into the local table(130091)
INSERT /*+ monitor */ INTO DWH.DIM_BP
SELECT * FROM ...
LOG ERRORS INTO DWH.ERR$_DWH_CONV ('DWH.DIM_BP@DWH_DEV.2019-04-16 16:05:58') REJECT LIMIT UNLIMITED;

0 rows inserted.

COMMIT;

select count(*) from dwh.ERR$_DWH_CONV;
result: 130091

-- run the same insert again into the REMOTE table(130091)
-- RAISED AN ERROR
INSERT /*+ monitor */ INTO DWH.DIM_BP@DWH_DEV
SELECT * FROM ...
LOG ERRORS INTO DWH.ERR$_DWH_CONV ('DWH.DIM_BP@DWH_DEV.2019-04-16 16:05:58') REJECT LIMIT UNLIMITED;

SQL Error: ORA-00001: unique constraint - DWH.DIM_BP_PK

-- check again the error table
select count(*) from dwh.ERR$_DWH_CONV;
result: 130091 (no change)

this is the constraint:
CONSTRAINT "DIM_BP_PK" PRIMARY KEY... ENABLED;
...