solas segundo restaurar quitar que puedo plano permisos permiso para necesario mis hacer habilitar forzar ejecutar detencion dar contactos como cierre aplicaciones actualicen activar oracle triggers

oracle - segundo - no puedo dar permisos a aplicaciones



¿Me perderé los cambios si reemplazo un activador de Oracle mientras mi aplicación se está ejecutando? (3)

Me pregunto si perderé algún dato si reemplazo un disparador mientras mi base de datos Oracle está en uso. Creé un ejemplo de juguete y parece que no lo haré, pero uno de mis compañeros de trabajo afirma lo contrario.

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


Creo que podrías estar probando esto de la manera incorrecta. Sus instrucciones de inserción no tardarán en absoluto y, por lo tanto, la sustitución del activador puede caber a través de los espacios entre las inserciones. Al menos esto es lo que infiero debido a lo siguiente.

Si cambia su prueba para asegurarse de tener una declaración SQL de larga ejecución, por ejemplo

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; / insert into test_trigger select level from dual connect by level <= 1000000;

Si luego intenta reemplazar el activador en una sesión separada , esto no ocurrirá hasta que la inserción se haya completado.

Lamentablemente, no puedo encontrar nada en la documentación que me respalde; esto es solo un comportamiento del cual soy consciente.


create or replace está bloqueando la mesa. Entonces todas las inserciones esperarán hasta que se complete. No te preocupes por las inserciones perdidas.


Las siguientes respuestas de URL que activan pueden modificarse mientras se ejecuta la aplicación . será un bloqueo de "caché de biblioteca" y NO un bloqueo de "datos". Oracle lo maneja internamente sin que te preocupes por eso.

Mira la pregunta planteada por Ben- ¿Se puede bloquear un disparador? ¿cómo uno determinaría que es?

- Ejecuta esto desde la sesión 2: selecciona * desde v $ acceso donde object = upper (''test_trigger_t'');