昨天忘了记这个东东,另一部门的同事想在一个逻辑standby上自己的schema中做一个trigger,用以记录另一个schema下的一张表的增删改的信息。虽然这个事情最后取消了,但是有一个问题有待解决,还有一个结论有待去验证。
这个trigger的内容如下:
create or replace trigger CDC.T$COUPONITEM
after insert or update or delete on SEASHELL.COUPONITEM
for each row
declare
V_FLAG VARCHAR(1);
V_ID NUMBER(12);
begin
if inserting then
V_ID := :new.ID;
V_FLAG := 'I';
end if;
if updating then
V_ID := :new.ID;
V_FLAG := 'I';
end if;
if deleting then
V_ID := :old.ID;
V_FLAG := 'D';
end if;
insert into CDC.J$COUPONITEM
(JRN_SUBSCRIBER, JRN_CONSUMED, JRN_FLAG, JRN_DATE, ID)
select JRN_SUBSCRIBER, '0', V_FLAG, sysdate, V_ID
from CDC.SNP_SUBSCRIBERS
where JRN_TNAME = 'SEASHELL.COUPONITEM'
/* The following line can be uncommented for symetric replication */
/* and upper(USER) <> upper('cdc') */
;
问题:在create trigger时多次出现“没有权限”的问题,再依次赋予了create trigger和insert、update、delete on SEASHELL.COUPONITEM之后,问题依然指向SEASHELL.COUPONITEM,所以要弄清楚,到底要赋什么样的权限才可以?
结论:在逻辑standby上像trigger,job这样的定时或者触发任务是会被skip掉的,不会执行,目的很明确,是为了避免主库和备库会有重复,但原理是什么呢?但是如果只是逻辑standby上自己独有的schema下的trigger是可以执行的,为什么?
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/11258275/viewspace-630430/ ,如需转载,请注明出处,否则将追究法律责任。