Avatar billede diyar Nybegynder
04. juli 2008 - 09:47 Der 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.
Avatar billede pnielsen Nybegynder
04. juli 2008 - 09:51 #1
Jeg er bange for at du meget hurtigt vil få meget store tabeller, hvis du ønsker at gøre det på alt i databasen.

Du kan bruge audit_trail istedet for at lave dine egne triggers.

Her er en god forklaring af dine muligheder:
http://www.securityfocus.com/infocus/1689
Avatar billede diyar Nybegynder
04. juli 2008 - 10:06 #2
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.
Avatar billede pnielsen Nybegynder
04. juli 2008 - 10:13 #3
Læste du artiklen ? Den beskriver de muligheder der er..
Avatar billede pnielsen Nybegynder
04. juli 2008 - 10:15 #4
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.
Avatar billede diyar Nybegynder
04. juli 2008 - 10:33 #5
ja, jeg har faktisk læst det hele, men som sagt, er jeg blevet bedt om at bruge triggers :(. så derfor skal jeg finde ud af hvordan?
Avatar billede pnielsen Nybegynder
04. juli 2008 - 10:44 #6
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;
/
Avatar billede pnielsen Nybegynder
04. juli 2008 - 10:46 #7
Men bemærk at du kun kan logge ins/upd/del via triggers - ikke reads... !!
Der er du nødt til at bruge audit.

Good luck
Avatar billede diyar Nybegynder
04. juli 2008 - 11:16 #8
Jeg har selv fundet ud af det :).

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.

Tak
Avatar billede pnielsen Nybegynder
04. juli 2008 - 11:31 #9
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 :-)
Avatar billede diyar Nybegynder
04. juli 2008 - 11:50 #10
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.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester