Oracle
 sql >> Database >  >> RDS >> Oracle

Audit in Oracle

Se disponi di un'edizione aziendale da 10 g, dovresti dare un'occhiata al controllo a grana fine di Oracle. È decisamente meglio che arrotolare il tuo.

Ma se hai una versione minore o per qualche motivo FGA non è di tuo gusto, ecco come farlo. La cosa fondamentale è:creare una tabella di controllo separata per ogni tabella dell'applicazione .

So che questo non è ciò che vuoi sentire perché non corrisponde alla struttura della tabella che hai descritto sopra. Ma memorizzare una riga con i valori VECCHIO e NUOVO per ogni colonna interessata da un aggiornamento è davvero una pessima idea:

  1. Non si ridimensiona (un singolo aggiornamento che tocca dieci colonne genera dieci inserti)
  2. E quando inserisci un record?
  3. È una seccatura assemblare lo stato di un record in qualsiasi momento

Quindi, avere una tabella di controllo per ogni tabella dell'applicazione, con una struttura identica. Ciò significa includere CHANGED_TIMESTAMP e CHANGED_USER nella tabella dell'applicazione, ma non è una brutta cosa.

Infine, e sai dove sta portando questo, avere un trigger su ogni tabella che inserisce un intero record con solo i valori :NEW nella tabella di controllo. Il trigger dovrebbe attivarsi su INSERT e UPDATE. Questo fornisce la cronologia completa, è abbastanza facile distinguere due versioni del record. Per un DELETE inserirai un record di controllo con solo la chiave primaria compilata e tutte le altre colonne vuote.

La tua obiezione sarà che hai troppe tabelle e troppe colonne per implementare tutti questi oggetti. Ma è abbastanza semplice generare la tabella e attivare le istruzioni DDL dal dizionario dei dati (user_tables, user_tab_columns).