Domanda

Un metodo semplice che ho utilizzato in passato è fondamentalmente semplicemente creare una seconda tabella la cui struttura rispecchia quella che voglio controllare, quindi creare un trigger di aggiornamento/eliminazione sulla tabella principale.Prima che un record venga aggiornato/eliminato, lo stato corrente viene salvato nella tabella di controllo tramite il trigger.

Sebbene efficaci, i dati nella tabella di controllo non sono i più utili o semplici da cui riferire.Mi chiedo se qualcuno abbia un metodo migliore per controllare le modifiche ai dati?

Non dovrebbero esserci troppi aggiornamenti di questi record, ma si tratta di informazioni altamente riservate, quindi è importante per il cliente che tutte le modifiche vengano controllate e riportate facilmente.

È stato utile?

Soluzione

Quanto scrivere vs.ti aspetti la lettura di questa(e) tabella(i)?

Ho utilizzato un'unica tabella di controllo, con colonne per Tabella, Colonna, OldValue, NewValue, User e ChangeDateTime: abbastanza generica da funzionare con qualsiasi altra modifica nel DB e, sebbene MOLTI dati siano stati scritti in quella tabella, i report su tali dati erano sufficientemente scarsi da poter essere eseguiti nei periodi della giornata di basso utilizzo.

Aggiunto:Se la quantità di dati vs.il reporting è un problema, la tabella di controllo potrebbe essere replicata su un server database di sola lettura, consentendo di eseguire report ogni volta che è necessario senza impedire al server master di svolgere il proprio lavoro.

Altri suggerimenti

Per questo utilizziamo il design a due tabelle.

Una tabella contiene i dati sulla transazione (database, nome della tabella, schema, colonna, applicazione che ha attivato la transazione, nome host per l'accesso che ha avviato la transazione, data, numero di righe interessate e altro ancora).

La seconda tabella viene utilizzata solo per memorizzare le modifiche ai dati in modo da poter annullare le modifiche se necessario e riportare i valori vecchi/nuovi.

Un'altra opzione è utilizzare uno strumento di terze parti per questo, ad esempio Controllo ApexSQL o la funzionalità Modifica acquisizione dati in SQL Server.

Ho trovato utili questi due link:

Utilizzo di CLR e tabella di controllo unica.
Creazione di un trigger di controllo generico con SQL 2005 CLR

Utilizzo di trigger e tabella di controllo separata per ciascuna tabella sottoposta a controllo.
Come posso controllare le modifiche ai dati di SQL Server?

Esistono pacchetti di audit integrati?Oracle ha un bel pacchetto, che invierà anche le modifiche di audit a un server separato fuori dall'accesso di qualsiasi malintenzionato che stia modificando l'SQL.

Il loro esempio è fantastico...mostra come avvisare chiunque modifichi le tabelle di controllo.

OmniAudit potrebbe essere una buona soluzione per le tue esigenze.Non l'ho mai usato prima perché sono abbastanza felice di scrivere le mie routine di audit, ma suona bene.

Utilizzo l'approccio descritto da Greg nel suo risposta e popolare la tabella di controllo con una procedura memorizzata richiamata dai trigger della tabella.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top