Ik wil alleen een paar punten noemen:
Gebruik codegenerators U kunt geen enkele procedure hebben om alle tabellen bij te houden, u moet vergelijkbare maar verschillende triggers genereren voor elke getraceerde tabel. Dit soort werk is het meest geschikt voor geautomatiseerde codegeneratie. In uw plaats zou ik een XSLT-transformatie gebruiken om de code uit XML te genereren, en de XML kan automatisch worden gegenereerd uit metadata. Hierdoor kunt u de triggers eenvoudig onderhouden door ze elke keer dat u een wijziging aanbrengt in de auditlogica/-structuur of een doeltabel wordt toegevoegd/gewijzigd, opnieuw te genereren.
Overweeg capaciteitsplanning voor de controle. Een controletabel die alle waardeveranderingen bijhoudt, zal verreweg de grootste tabel in de database zijn:deze zal alle huidige gegevens en de geschiedenis van de huidige gegevens bevatten. Een dergelijke tabel vergroot de databasegrootte met 2-3 ordes van grootte (x10, x100). En de controletafel wordt al snel het knelpunt van alles:
- elke DML-bewerking vereist vergrendelingen in de controletabel
- alle administratieve en onderhoudswerkzaamheden zullen vanwege de audit aan de grootte van de database moeten voldoen
Houd rekening met de schemawijzigingen . Een tabel met de naam 'Foo' kan worden verwijderd en later kan een andere tabel met de naam 'Foo' worden gemaakt. De audit trail moet de twee verschillende objecten kunnen onderscheiden. Gebruik liever een langzaam veranderende dimensiebenadering.
Overweeg de noodzaak om efficiënt te verwijderen auditverslagen. Wanneer de bewaarperiode die wordt bepaald door het onderwerpbeleid van uw toepassing, moet worden voldaan, moet u de verschuldigde auditrecords kunnen verwijderen. Het lijkt nu misschien niet zo'n groot probleem, maar 5 jaar later, wanneer de eerste records moeten worden betaald, is de controletafel gegroeid tot 9,5 TB en kan het een probleem zijn.
Overweeg de noodzaak om de controle op te vragen . De structuur van de controletabel moet worden voorbereid om efficiënt te kunnen reageren op de vragen over controle. Als uw audit niet kan worden opgevraagd, heeft deze geen waarde. De zoekopdrachten worden volledig bepaald door uw vereisten en alleen u kent die, maar de meeste auditrecords worden opgevraagd op tijdsintervallen ('welke wijzigingen zijn er gisteren tussen 19.00 uur en 20.00 uur opgetreden?'), per object ('welke wijzigingen zijn er in deze tabel?') of op auteur ('welke wijzigingen heeft Bob in de database aangebracht?').