Mi chiedo se mi perderò qualche dato se sostituisco un trigger mentre il mio database Oracle è in uso. Ho creato un esempio di giocattolo e sembra che non lo farò, ma uno dei miei colleghi afferma il contrario.Mi mancheranno le modifiche se sostituisco un trigger di Oracle mentre la mia applicazione è in esecuzione?
create table test_trigger (id number);
create table test_trigger_h (id number);
create sequence test_trigger_seq;
--/
create or replace trigger test_trigger_t after insert on test_trigger for each row
begin
insert into test_trigger_h (id) values (:new.id);
end;
/
--/
begin
for i in 1..100000 loop
insert into test_trigger (id) values (test_trigger_seq.nextval);
end loop;
end;
/
--/
begin
for i in 1..10000 loop
execute immediate 'create or replace trigger test_trigger_t after insert on test_trigger for each row begin insert into test_trigger_h (id) values (:new.id); end;';
end loop;
end;
/
ran the two loops at the same time
select count(1) from test_trigger;
COUNT(1)
100000
select count(1) from test_trigger_h;
COUNT(1)
100000
Interessante. Mi aspetterei che gli eventi manchino se si separano le istruzioni 'drop' e' create'; ma non se usi 'crea o sostituisci 'come sei qui. Ma non penso di aver visto quel comportamento documentato. –
Supponendo che qualsiasi istruzione DDL sia un commit implicito rispetto alla proprietà sequenziale dell'elaborazione della transazione dovrebbe contenere ... è necessario non perdere eventi. Tuttavia, sarebbe interessante se questo è specificato. – Claude