2013-07-09 11 views
32

Non so se questi requisiti sono standard o no, ma io sono meraviglia c'è una soluzione là fuori che può effettuare le seguenti operazioni:il modo migliore per implementare un audit trail in sql-server?

  • Per una serie di tabelle specificato tenere una copia di un record prima per modificarlo in una versione di controllo della tabella pertinente.

Preferisco non codificarlo per ogni tabella. Mi chiedo se c'è una soluzione che puoi installare su ms-sql che farà questo per te?

+0

Questo è stato chiesto e ha risposto qui: http://stackoverflow.com/questions/8873335/how-to-create-generic-sql-server-stored-procedure-to-perform-inserts-into-audit – Alicia

+0

Uso Opzione trigger per il tuo requisito ... – bgs

risposta

34

Ci sono molti modi per farlo, dipende quale versione di SQL Server che si sta utilizzando.

Qui ci sono pochi percorso

spero che aiuta.

+1

È anche possibile utilizzare i trigger CLR, che possono essere o meno adatti al proprio scopo su quelli TSQL. – BJury

+0

Mi piacerebbe invece attribuire il secondo link a questo post (poiché è stato scritto 4 anni prima e sembrano quasi uguali): https://www.simple-talk.com/sql/database-administration/pop-rivetts-sql -server-faq-no.5-pop-on-the-audit-trail/ In ogni caso, è uno script piuttosto vecchio che dovrebbe essere rivisto e aggiornato per supportare schemi e tipi di dati unicode (nvarchar, nchar ...) – Jaime

+1

Si prega di visitare il seguente link per il numero di approcci, nonché i loro pro e contro: http://stackoverflow.com/questions/10060408/sql-server-2008-change-data-capture-vs-triggers-in-audit-trail/ 35455760 # 35455760 – emkays

1

Dai un'occhiata alla trigger. Questi possono essere utilizzati per implementare qualcosa che si adatti alle tue esigenze.

+0

Grazie Chris! Preferirei evitare i trigger - almeno per il fatto che il mio team implementasse i trigger - poiché questo finisce praticamente come codice. Suppongo che non ci sia un "plug-in" di terze parti che farebbe questo. – robotwasp

0

Date un'occhiata a questo articolo - Auditing in SQL Server 2008 che prende ben sfruttare le funzionalità di controllo già presenti in SQL Server 2008.

Devo anche sottolineare che @Microtechie risponde punti a qualche grande articolo. Leggili e decidi quale è più facile da adattare.

5

creo innesco che lo fa per XML in questo modo siamo in grado di registrare tutte le tabelle a stesso tavolo, il che rende più flessibile

CREATE TABLE [dbo].[AuditAll] (
    AuditId int   NOT NULL IDENTITY(1,1), 
    [DateTime] datetime  NOT NULL, 
    TableName nvarchar(255) NOT NULL, 
    AuditEntry xml   NULL, 

    CONSTRAINT [PK_AuditAll] PRIMARY KEY CLUSTERED (AuditId ASC) 
) 

Ho solo bisogno di valori 'vecchi', così ho Store cancellato tavolo solo, inserito il tavolo può essere visto in ogni caso nella tabella.

CREATE TRIGGER AuditSimple 
    ON Simple 
    AFTER INSERT,DELETE,UPDATE 
AS 
BEGIN 
-- SET NOCOUNT ON added to prevent extra result sets from 
-- interfering with SELECT statements. 
SET NOCOUNT ON; 

IF (SELECT COUNT(*) FROM deleted) > 0 
begin 
    Declare @AuditMessage XML 
    --set valut to all xml from deleted table 
    set @AuditMessage = (select * from deleted for xml auto) 

    insert into AuditAll(DateTime, TableName, AuditEntry) 
     values (GetDate(), 'Simple', @AuditMessage) 
end 

END 
GO 

Credo che questo potrebbe facilmente essere chiamato in sp_foreach per crearlo per ogni tabella in datatabase ma non abbiamo bisogno che in questo momento, basta ricordarsi di cambiare i vostri nomi di tabella

applausi

5

È possibile provare una soluzione 3rd party point-and-click grilletto based come ApexSQL Audit - uno strumento di controllo per i database di SQL Server, che cattura le modifiche dei dati che si sono verificati su un database contenente le informazioni sul chi ha fatto la modifica, che gli oggetti sono stati colpiti , quando è stato creato, così come le informazioni sul login SQL, app licenza e host utilizzati per apportare il cambiamento. Memorizza tutte le informazioni catturate in un repository centrale e li esporta in stampa formati amichevoli

Disclaimer: io lavoro come tecnico di supporto del prodotto in ApexSQL

+0

Ho usato ApexSQL in una delle mie app. Fa un buon lavoro di auditing ma è un lavoro scarso se devi capire cosa è andato storto usando la sua tabella di controllo/Querying App. Non lo userò più. – Viv

0

con le istantanee di database, è possibile mantenere una copia di sola lettura dei dati in quell'istanteInoltre, con i backup dei registri è possibile ripristinare le informazioni in un determinato periodo di tempo, se necessario.

È anche possibile leggere le informazioni dal registro per recuperare le informazioni modificate.

L'altra soluzione che non è di vostra preferenza è tracciare le modifiche utilizzando i trigger, ma potrebbe richiedere il funzionamento su ogni tabella. Puoi anche abilitare la funzione Cambia acquisizione dati per rilevare le modifiche, inoltre questa funzione deve essere abilitata per ogni tabella, ma richiede meno codice rispetto ai trigger.

Infine, ci sono strumenti di terze parti come Apex SQL Trigger che fanno questo lavoro automaticamente con pochi clic e configurazioni.

Problemi correlati