Ho un database SQL Server 2005 che è stato eliminato e devo scoprire chi lo ha eliminato. C'è un modo per ottenere questo nome utente?Determinare quale utente ha cancellato un database SQL Server?
Grazie, MagicAndi.
Ho un database SQL Server 2005 che è stato eliminato e devo scoprire chi lo ha eliminato. C'è un modo per ottenere questo nome utente?Determinare quale utente ha cancellato un database SQL Server?
Grazie, MagicAndi.
Se c'è stata poca o nessuna attività dall'eliminazione, la traccia pronta all'uso potrebbe essere di aiuto. Provare a eseguire:
DECLARE @path varchar(256)
SELECT @path = path
FROM sys.traces
where id = 1
SELECT *
FROM fn_trace_gettable(@path, 1)
[Oltre alla traccia out-of-the-box, c'è anche il meno noto traccia 'scatola nera', che è utile per la diagnosi di crash del server intermittenti. Questo post, SQL Server’s Built-in Traces, mostra come configurarlo.]
Il modo migliore per recuperare le informazioni è ripristinare l'ultimo backup.
Ora per discutere su come evitare tali problemi in futuro.
Prima di tutto assicurarsi che il processo di backup funzioni correttamente e frequentemente. Effettua il resoconto del log delle transazioni ogni 15 minuti o mezz'ora se si tratta di un database altamente transazionale. Quindi il massimo che perdi è una mezz'ora di lavoro. Esercitati a ripristinare il database fino a quando non riesci a farlo facilmente sotto stress.
In SQL Server 2008 è possibile aggiungere trigger DDL (non sicuro se è possibile farlo nel 2005) che consentono di registrare chi ha apportato modifiche alla struttura. Potrebbe valere il tuo tempo per esaminare questo.
NON consentire a più di due persone l'accesso di amministratore al database di produzione - un dba e una persona di backup per quando il dba è fuori. Queste persone dovrebbero caricare tutte le modifiche alla struttura e al codice del database e tutte le modifiche dovrebbero essere sottoposte a script, esaminate dal codice e testate per prime sul QA. Il codice "run by your seat pants" non dovrebbe mai essere eseguito su prod.
HLGEM - Buona risposta, peccato che non fosse per la domanda che ho posto. -1 – MagicAndi
+1, questa è la risposta alla domanda che è necessario porre prima di questa domanda corrente: "come impedire e/o trattare qualcuno che cancella il mio database" ... –
+1: una risposta eccellente a causa di pensare lateralmente al fine di identificare la causa alla base del problema IE un fallimento dovuto alla mancanza di processi di controllo e gestione della piattaforma di database. –
Vorrei prima chiedere a tutti coloro che hanno accesso come amministratore al server Sql se lo hanno eliminato.
E se dovessi chiedere a più di tre persone, chiederei anche al DBA perché ce ne sono così tanti ... – stephan
Ecco po 'più precisi TSQL
SELECT DatabaseID,NTUserName,HostName,LoginName,StartTime
FROM
sys.fn_trace_gettable(CONVERT(VARCHAR(150),
(SELECT TOP 1
f.[value]
FROM sys.fn_trace_getinfo(NULL) f
WHERE f.property = 2
)), DEFAULT) T
JOIN sys.trace_events TE ON T.EventClass = TE.trace_event_id
WHERE TE.trace_event_id =47 AND T.DatabaseName = 'delete'
-- 47 Represents event for deleting objects.
Questo può essere utilizzato nelle due eventi di conoscere o non conoscere il nome del database/oggetto. I risultati appaiono così:
+1 - Grazie, che è molto utile. Ho appena eseguito questo e mi dà circa 2 giorni di backup. C'è un modo per ottenere di più? Quali opzioni si prendono cura di controllare quelle impostazioni di traccia? –
@mitch: questo è un consiglio fantastico. è una traccia molto piccola, però. c'è un modo in cui posso impostare questo per essere una traccia più grande? –
@Tapori: ho eseguito il blogger sulle tracce incorporate di SQL Server qui: http://mitch-wheat.blogspot.com/2009/01/sql-servers-built-in-traces.html: è possibile modificare le dimensioni di la traccia Black Box ... –