Возможно странное название, я постараюсь объяснить.У меня есть два сервера Oracle serverA и serverB.
- На сервере A у меня есть таблица tabA, в которую каждую минуту вставляется строка.
- На сервере B я создаю таблицу tabB, которая имеет ту же структуру, что и tabA.
- На сервере A я создаю ссылку на сервер B.На сервере A я создаю триггер вставки, например
На A
create trigger tabA_trig
after insert on tabA
begin
insert into tabB@serverB(...) values(:new....,:new... etc);
exception
when others then null;
end tabA_trig;
После создания этого триггера новая строка вставляется в tabB каждый раз, когда новая строка вставляется в tabA, как и ожидалось.
ОДНАКО: когда связь между сервером A и сервером B прерывается, я не получаю никаких ошибок (исключение выше позаботится об этом), НО данные также не вставляются в tabA!Очень странно, и что еще более странно, примерно через 15 минут новые данные снова вставляются в tabA.Через некоторое время пропущенные данные начинают заполнять отверстие, а через некоторое время данные отсутствуют, и вставка работает как положено.
Пример (tabA и tabB, время в первом столбце, минуты и часы, значение второго столбца):
Network OK:
tabA 1000 22;1001 22;1002 22
tabB 1000 22;1001 22;1002 22
Network ERROR:
About 15 minutes of no new data.
After 15 minutes:
tabA 1000 22;1001 22;1002 22;1017 22;1018 22;....
tabB 1000 22;1001 22;1002 22
After 30 minutes:
tabA 1000 22;1001 22;1002 22;1003 22;1004 22;1005 22;1006 22;1017 22;1018 22;....
tabB 1000 22;1001 22;1002 22
After 1 hour:
tabA 1000 22;1001 22;1002 22;1003 22;1004 22;1005 22;1006 22;1006 22;...;1017 22;1018 22;....
tabB 1000 22;1001 22;1002 22
Если я отключу триггер, вставка в tabA сработает немедленно.
Причина, по которой я использую триггеры, а не материализованные представления, заключается в том, что я хочу сохранить все данные, которые имеютбыл реплицирован на tabB, даже если данные удалены из tabA.
Кто-нибудь знает, что с этим делать?