Pokud máte 10g podnikovou edici, měli byste se podívat na Fine-Grained Auditing společnosti Oracle. Je to rozhodně lepší než válet vlastní.
Ale pokud máte menší verzi nebo z nějakého důvodu FGA není podle vašeho vkusu, zde je návod, jak to udělat. Klíčová věc je:vytvořit samostatnou tabulku auditu pro každou tabulku aplikace .
Vím, že to není to, co chcete slyšet, protože to neodpovídá struktuře tabulky, kterou jste nastínili výše. Ale uložení řádku se STARÝMI a NOVÝMI hodnotami pro každý sloupec ovlivněný aktualizací je opravdu špatný nápad:
- Nezmění měřítko (jedna aktualizace, která se dotkne deseti sloupců, vytvoří deset vložení)
- A co když vložíte záznam?
- Shromáždit stav záznamu v kteroukoli dobu je naprostá bolest
Mějte tedy tabulku auditu pro každou tabulku aplikace s identickou strukturou. To znamená zahrnutí CHANGED_TIMESTAMP a CHANGED_USER do tabulky aplikací, ale to není špatné.
Konečně, a víte, kam to vede, mějte na každé tabulce spouštěč, který vloží celý záznam pouze s hodnotami :NEW do tabulky auditu. Spouštěč by se měl spustit při INSERT a UPDATE. To dává kompletní historii, je snadné porovnat dvě verze záznamu. Pro DELETE vložíte auditní záznam s vyplněným pouze primárním klíčem a všechny ostatní sloupce prázdné.
Vaše námitka bude, že na implementaci všech těchto objektů máte příliš mnoho tabulek a příliš mnoho sloupců. Je však dostatečně jednoduché generovat tabulku a spouštět příkazy DDL z datového slovníku (user_tables, user_tab_columns).