04. juli 2008 - 09:47Der er
9 kommentarer og 1 løsning
Triggers spørgsmål
Hej
Jeg har en kæmpe stor database, jeg vil gerne overvåger alt hvad der sker i tabellerne f.eks. hvem har pillet ved hvilken række?(Ved hjælp af triggers). Hvor skal jeg starte fra og hvordan? PS. det er en oracle database.
tak for dit svar, men jeg er blevet bedt om at gøre det ved hjælp af triggers. Så nu vil jeg spørge på en anden måde, er det muligt at lave en trigger der overvåger alle tabellerne i en database? eller skal man lave en trigger for hver enkelt tabel? Jeg skal nemlig skrive et oplæg om det her projekt til at starte med.
Update, delete, and insert triggers This is the second line of defence in trying to understand users' actions at a more detailed row level. Database triggers need to be written to capture changes at the column and row level. It is possible to write complete rows of data before and after the change being made to a log table in the database. The use of this type of logging is very resource intensive, as many extra records are written and stored. The one failing with this method is that read access cannot be captured with normal database triggers.
Ok - jeg forstod det var et oplæg til de muligheder der er - og det beskriver artiklen jo fremragende.
Men et konkret eksempel:
CREATE OR REPLACE TRIGGER test.logging trigger AFTER INSERT OR UPDATE OR DELETE ON test.testtabel FOR EACH ROW BEGIN IF INSERTING THEN INSERT INTO test.logtabel ( kol, dato etc... ) VALUES ( :new.kol, :new.dato etc... ); ELSIF UPDATING THEN INSERT INTO test.logtabel ( kol, dato etc... ) VALUES ( :new.kol, :new.dato etc... );
ELSIF DELETING THEN INSERT INTO test.logtabel ( kol, dato etc... ) VALUES ( :new.kol, :new.dato etc... ); END IF; END; /
Jeg kan lave en trigger der laver triggers til alle mine tabeller på en gange:
SELECT 'CREATE TRIGGER REVISION'||TABLE_NAME|| 'ON INSERT OR UPDATE OR DELETE FOR EACH ROW BEGIN NULL;END;' FROM USER_CONSTRAINTS WHERE CONSTRAINT_TYPE='P'; Og hvis min logfil bliver alt for store, så må jeg partitionere.
Men du får alligevel point fordi du brugte din tid til at svare.
Puha du er på afveje - eller også er det en yderst special pseudo kode.. se lige koden efter en gang til ;-)
Det statement der er bare en dynamisk sql der laver en masse create trigger statements for dig - desuden under den bruger du kører det under! Desuden gør triggeren slet ingen ting (null). Du mangler både tabel til at indsætte dine værdier i og den kode der vil lave triggers ud fra dine costraints :-)
Den sql der gør da absolut ingenting af det du bad om :-)
hehe, det er kun en pseudo kode, jeg ved godt at jeg mangler rigtig meget at lave, problemet var at jeg ikke vidste hvor jeg skulle starte fra, men nu ved jeg det.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.