sql >> Database teknologi >  >> RDS >> Sqlserver

Oprettelse af revisionstriggere i SQL Server

Jeg vil blot fremhæve et par punkter:

Brug kodegeneratorer Du kan ikke have en enkelt procedure til at spore alle tabeller, du bliver nødt til at generere lignende, men forskellige udløsere på hver sporet tabel. Denne slags job er bedst egnet til automatisk kodegenerering. I dit sted ville jeg bruge en XSLT-transformation til at generere koden fra XML, og XML kan genereres automatisk fra metadata. Dette giver dig mulighed for nemt at vedligeholde triggerne ved at genskabe dem, hver gang du foretager en ændring af revisionslogikken/strukturen, eller en måltabel tilføjes/ændres.

Overvej kapacitetsplanlægning til revisionen. En revisionstabel, der sporer alle værdiændringer, vil være langt den største tabel i databasen:den vil indeholde alle de aktuelle data og alle de aktuelle datas historie. En sådan tabel vil øge databasestørrelsen med 2-3 størrelsesordener (x10, x100). Og revisionsbordet bliver hurtigt flaskehalsen for alting:

  • hver DML-handling vil kræve låse i revisionstabellen
  • alle administrative og vedligeholdelsesoperationer skal tilpasses størrelsen af ​​databasen på grund af revision

Tag hensyn til skemaændringerne . En tabel med navnet 'Foo' kan blive slettet, og senere kan der oprettes en anden tabel med navnet 'Foo'. Revisionssporet skal kunne skelne mellem de to forskellige objekter. Brug hellere en tilgang med langsomt skiftende dimensioner.

Overvej behovet for effektivt at slette revisionsoptegnelser. Når den opbevaringsperiode, der er dikteret af dine ansøgningsemnepolitikker, udløber, skal du være i stand til at slette de forfaldne revisionsposter. Det virker måske ikke så stor en sag nu, men 5 år senere, når de første poster skal ud, er revisionstabellen vokset til 9,5 TB, kan det være et problem.

Overvej behovet for at forespørge revisionen . Revisionstabelstrukturen skal være forberedt til at svare effektivt på forespørgslerne om revision. Hvis din revision ikke kan stilles spørgsmålstegn ved, har den ingen værdi. Forespørgslerne vil udelukkende være drevet af dine krav, og det er kun dig, der kender dem, men de fleste revisionsposter forespørges for tidsintervaller ("hvilke ændringer skete mellem kl. 19.00 og 20.00 i går?"), efter objekt ("hvilke ændringer skete der i denne post i denne tabel?') eller af forfatter ('hvad ændrede Bob i databasen?').



  1. PostgreSQL breddegrad længdegrad forespørgsel

  2. Udfør produktanalyse ved hjælp af SQL Server Full-Text Search. Del 1

  3. MariaDB CURRENT_DATE() Forklaret

  4. Hvordan opretter man funktion i PL/SQL?