2008-08-06 32 views
27

Un metodo semplice che ho usato in passato è fondamentalmente solo la creazione di una seconda tabella la cui struttura rispecchia quella che voglio controllare, e quindi creare un trigger di aggiornamento/eliminazione sulla tabella principale. Prima che un record venga aggiornato/cancellato, lo stato corrente viene salvato nella tabella di controllo tramite il trigger.Suggerimenti per l'implementazione di tabelle di controllo in SQL Server?

Mentre efficace, i dati nella tabella di controllo non sono più utili o semplici da segnalare. Mi chiedo se qualcuno ha un metodo migliore per il controllo delle modifiche dei dati?

Non ci dovrebbero essere troppi aggiornamenti di questi record, ma sono informazioni altamente sensibili, quindi è importante per il cliente che tutte le modifiche siano controllate e facilmente riportate.

+2

SQL Server 2008 ha un supporto integrato con la nuova funzionalità Change Data Capture andyp

+1

Devo sottolineare che questa funzione è solo disponibile nell'edizione Enterprise. – user17060

+0

Anche la funzionalità Modifica acquisizione dati sembra essere più utile per garantire che gli oggetti delle applicazioni siano tenuti in linea con il database anziché con una soluzione di controllo. Ad esempio, memorizza solo 2 giorni di modifiche. Dovresti comunque eseguire il polling delle modifiche e scriverle in una tabella, quindi potresti anche creare e utilizzare i trigger per scrivere su una tabella di controllo centrale come di seguito. Oh, e l'URL sopra è rotto, usa questo [collegamento] (http://msdn.microsoft.com/en-us/library/bb933874.aspx). – BJury

risposta

17

Quante scritture o letture di questa/e tabella/i ti aspetti?

ho usato una sola tabella di controllo, con le colonne per la tavola, Colonna, OldValue, NewValue, utente e ChangeDateTime - sufficientemente generico per lavorare con tutte le altre modifiche nel DB, e mentre un sacco di dati ottenuto scritto a quella tabella, i rapporti su quei dati erano abbastanza rari da poter essere eseguiti in periodi di uso basso della giornata.

Aggiunto: Se la quantità di dati rispetto segnalazione è un problema, la tabella di controllo potrebbe essere replicata a un server di database di sola lettura, che consente di eseguire report in ogni momento senza impantanarsi il server master da fare il loro lavoro.

1

Esistono pacchetti di controllo incorporati? Oracle ha un bel pacchetto, che invierà anche le modifiche di audit a un server separato al di fuori dell'accesso di qualsiasi cattivo ragazzo che sta modificando l'SQL.

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

1

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

1

Io uso l'approccio descritto da Greg nel suo answer e popolare la tabella di controllo con una procedura memorizzata chiamata dai trigger di tabella.

6

Per questo motivo stiamo utilizzando due modelli di tavolo.

Una tabella contiene dati sulla transazione (database, nome 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 un altro paio).

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

Un'altra opzione consiste nell'utilizzare uno strumento di terze parti per questo come ApexSQL Audit o la funzionalità Cambia acquisizione dati in SQL Server.