it-swarm.it

Come posso recuperare alcuni record eliminati?

Ho erroneamente eliminato circa 2.000.000 di record da una tabella remota di SQL Server 2008. Il server non mi sta concedendo l'accesso ai file di backup sul lato server.

C'è un modo per recuperare questi record?

49
user755

Il tuo database è in modalità di recupero completo?

  • In caso affermativo, esegui backup del registro delle transazioni?

    • Se sì, hai un'utilità di backup come Quest LiteSpeed, Red Gate SQL Backup o Idera SQLSafe?
      • In caso affermativo, tali utilità possono ripristinare gli oggetti dai file di backup (compresi i registri completi e delle transazioni), ma spiegare come utilizzarli non rientra nell'ambito di ciò che posso fare qui. Contattare il fornitore per istruzioni.
      • In caso contrario, ripristinare il backup completo e i registri delle transazioni come database con un nome diverso. (Non sovrascrivere il database esistente.) Sarai in grado di ottenere una copia aggiornata al secondo dell'oggetto prima che si verifichi l'eliminazione, ma dovrai specificare la parte stopat del comando restore quando interrompere il ripristino dei comandi. È necessario interrompere prima dell'eliminazione.
    • In caso contrario, prendi una copia di un'utilità di lettura dei registri come Quest LiteSpeed ​​o Apex SQL Log. Queste utility possono connettersi al server di database, esaminare il file di registro e aiutarti a annullare le transazioni. Non sono sicuro che le versioni demo funzioneranno, ma quelle a pagamento lo faranno sicuramente.
  • In caso negativo (non in modalità di recupero completo), ripristinare l'ultimo backup completo come database con un nome diverso. (Non sovrascrivere il database che hai già.) Da lì, sarai in grado di ripristinare qualsiasi record online al momento del backup, ma da allora perderai tutte le modifiche.

118
Brent Ozar

SQL Server mantiene i registri per ogni record eliminato. Puoi eseguire query su questi registri tramite fn_dblog Funzione SQL Server.

SELECT [RowLog Contents 0] 
FROM   sys.fn_dblog(NULL, NULL) 
WHERE  
       AllocUnitName = 'dbo.TableName'        
   AND Context IN ( 'LCX_MARK_AS_GHOST', 'LCX_HEAP' )        
   AND Operation in ( 'LOP_DELETE_ROWS' )   
;

Ma questo registro è in formato esadecimale ed è necessario convertire questo formato esadecimale nei dati effettivi.

L'articolo seguente ti aiuterà a recuperare i record eliminati nel modo sopra definito:

http://raresql.com/2011/10/22/how-to-recover-deleted-data-from-sql-sever/

30
user1059637

Sfortunatamente, non saremo in grado di aiutarti senza molte più informazioni. Ma dalla tua domanda, vedo che hai eliminato quelli che sembrano essere 2 milioni di record dal tuo database. Molto probabilmente non puoi recuperare queste informazioni, a meno che tu non abbia una registrazione completa sul tuo database e acquisti alcuni strumenti molto specifici.

Se riesci a descrivere più dettagliatamente cosa pensi di aver fatto e perché ritieni di non poter recuperare i record e di descrivere l'organizzazione del tuo database, allora potremmo aiutarti un po 'di più.

Alcuni consigli generali: se pensi di aver eliminato 2 milioni di record, probabilmente sei un po 'fuori di testa in questo momento. Quindi dovresti fare una pausa di cinque minuti, calmarti e rivisitare il problema. Inoltre, dovresti dire subito al tuo capo se è ragionevole (non svegliare qualcuno alle 2 del mattino per dirglielo) e che stai lavorando a una soluzione. Meglio ammettere cosa è successo che cercare freneticamente di recuperare e potenzialmente peggiorare le cose e nascondere i dettagli. Sapere che il tuo capo può aiutarti in qualche modo, ti aiuta a risolvere il problema. Come ho detto, solo alcuni consigli generali.

22
jcolebrand