Dezactivarea declanșatoarelor în Oracle

Dezactivarea declanșatorilor în Oracle

Oamenii au încercat să facă asta.
Există o bază de date pe serverul 1 (C1). Declanșatoarele sunt scrise care apelează proceduri / funcții prin dblink sau fac tabele de inserare / actualizare pe serverul de la distanță 2 (C2). Dacă aceste obiecte sunt actualizate la C2, declanșatoarele pentru C1 dobândesc starea INVALID, dar nu imediat, dar după orice acces la obiectele modificate din C2. Firește, în acest caz, introducerea / actualizarea datelor despre C1 devine imposibilă. Cred că este inutil să spunem că acest lucru este inacceptabil pentru lucrătorii din bazele de date responsabile cu un număr mare de utilizatori. Deci, am conceput, în cazul unei erori similare, să dezactivez automat aceste declanșatoare. Am vrut să scriu acest lucru în declanșator după ce serverul a fost creat pe schemă. Eroarea este în mod normal prinsă, dar pe






executați imediat "modificați declanșarea TRIGGER_NAME dezactivați";
Primesc o eroare "ORA-30511: funcționarea invalidă DDL în declanșatoarele de sistem". Cred că acum scriu pe fiecare masă pentru care sunt scrise declanșatoarele pe fiecare rând, nivelul de declanșare al operatorului și în ele după ce ați verificat steagul pentru o eroare similară, apelați procedura prin dezactivarea tuturor acestor declanșatoare pe fiecare rând. Dar, de asemenea, acest lucru nu este deosebit de convenabil. Pentru a actualiza ulterior această procedură, trebuie mai întâi să dezactivați declanșarea declanșatorului, să actualizați, să recompilați declanșatorul și apoi să-l activați.






Poate cineva să sugereze o modalitate mai elegantă de a rezolva această problemă?

Care este motivul dezactivării lor, dacă sunt încă dezactivate și nu fac nimic?
Aruncați-le.

Organizați insertul prin SQL dinamic cu tratarea excepțiilor.
Declanșatorul nu va depinde de obiectele celui de-al doilea server.


> Care este punctul de dezactivare a acestora, dacă acestea sunt încă dezactivate?
> Și nu faceți nimic?

Ei nu fac nimic, dar datele nu sunt introduse / actualizate. Clientul se blochează imediat "ORA-04098: declanșator trigger_name este nevalid și nu a reușit validarea"
Și nu le puteți scăpa, pentru că trebuie doar să le recompilați și să continuați să lucrați.

> Organizați insertul prin SQL dinamic cu tratarea excepțiilor.

E un fel de gând. Acum mă voi gândi la asta, o să încerc. Mulțumesc.

Și nu le puteți scăpa, pentru că trebuie doar să le recompilați și să continuați să lucrați.

Dacă doar recompilați, atunci nu există nici o problemă.
Dar trebuie mai întâi să fie corectate.


> Dacă pur și simplu să recompilați, problemele nu sunt prezente.
> Dar trebuie mai întâi să fie corectate.

Uneori, pentru a edita, uneori doar o recompilare este suficientă. Acum voi încerca cu SQL dinamic.

Cu SQL dinamic, totul a funcționat perfect. Vă mulțumim din nou pentru idee.







Articole similare

Trimiteți-le prietenilor: