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

Creazione di trigger di controllo in SQL Server

Voglio solo richiamare un paio di punti:

Utilizza generatori di codice Non puoi avere una singola procedura per tenere traccia di tutte le tabelle, dovrai generare trigger simili ma distinti su ciascuna tabella tracciata. Questo tipo di lavoro è più adatto per la generazione automatizzata di codice. Al tuo posto userei una trasformazione XSLT per generare il codice da XML e l'XML può essere generato automaticamente dai metadati. Ciò consente di mantenere facilmente i trigger rigenerandoli ogni volta che si apporta una modifica alla logica/struttura di audit o si aggiunge/modifica una tabella di destinazione.

Prendi in considerazione la pianificazione della capacità per l'audit. Una tabella di controllo che tiene traccia di tutte le modifiche ai valori sarà, di gran lunga, la tabella più grande del database:conterrà tutti i dati correnti e tutta la cronologia dei dati correnti. Tale tabella aumenterà la dimensione del database di 2-3 ordini di grandezza (x10, x100). E la tabella di controllo diventerà rapidamente il collo di bottiglia di tutto:

  • ogni operazione DML richiederà dei blocchi nella tabella di controllo
  • tutte le operazioni amministrative e di manutenzione dovranno adattarsi alle dimensioni del database a causa dell'audit

Tieni in considerazione le modifiche allo schema . Una tabella denominata 'Foo' potrebbe essere eliminata e successivamente potrebbe essere creata una tabella diversa denominata 'Foo'. L'audit trail deve essere in grado di distinguere i due diversi oggetti. Meglio utilizzare un approccio dimensionale che cambia lentamente.

Considera la necessità di eliminare in modo efficiente record di audit. Quando scade il periodo di conservazione dettato dai criteri dell'oggetto della domanda, è necessario essere in grado di eliminare i record di controllo dovuti. Potrebbe non sembrare un grosso problema ora, ma 5 anni dopo, quando sono dovuti i primi record, la tabella di controllo è cresciuta fino a 9,5 TB, potrebbe essere un problema.

Considera la necessità di interrogare l'audit . La struttura della tabella di audit deve essere preparata per rispondere in modo efficiente alle domande sull'audit. Se il tuo audit non può essere interrogato, non ha valore. Le query saranno interamente guidate dalle tue esigenze e solo tu le conosci, ma la maggior parte dei record di audit viene interrogata per intervalli di tempo ("quali cambiamenti si sono verificati tra le 19:00 e le 20:00 di ieri?"), per oggetto ("quali modifiche sono state apportate a questo record in questo tabella?') o per autore ("che modifiche ha fatto Bob nel database?").