2011-01-14 22 views
15

In SQL Server Management Studio, ho eseguito la query di seguito.
Purtroppo, ho dimenticato di decommentare la clausola WHERE.
1647 righe sono state aggiornate anziché 4.Come annullare una query UPDATE di SQL Server?

Come posso annullare l'ultima istruzione?

Purtroppo, ho appena finito di tradurre quelle 1647 righe e stavo facendo correzioni finali , e quindi non ho un backup.

UPDATE [dbo].[T_Language] 
    SET 
     [LANG_DE] = 'Mietvertrag' --<LANG_DE, varchar(255),> 
     ,[LANG_FR] = 'Contrat de bail' -- <LANG_FR, varchar(255),> 
     ,[LANG_IT] = 'Contratto di locazione' -- <LANG_IT, varchar(255),>  
     ,[LANG_EN] = 'Tenancy agreement' -- <LANG_EN, varchar(255),> 
     --WHERE [LANG_DE] like 'Mietvertrag' 

C'è un protocollo di transazione, almeno lo spero.

+0

Hai mai preso una copia di backup? A cosa è impostato il modello di recupero? –

+0

Modello di recupero? ;-) –

+1

Oh grazie a dio, ho un backup automatico da oggi pomeriggio. –

risposta

9

Una transazione non impegnato può essere annullata con il comando ROLLBACK

Ma se si esegue in modalità non c'è niente che puoi fare ....

+3

Non vero - Il recupero del punto nel tempo potrebbe essere disponibile tramite i registri delle transazioni a seconda del modello di recupero dell'OP e se hanno mai fatto un backup. –

+0

OK, ma non con SQL "semplice", giusto? –

+0

D'accordo, guardando i commenti sembra che l'OP sia stata comunque fortunata! –

0

auto-commit Dal momento che si dispone di un completo backup, è possibile ripristinare il backup su un server diverso come un database con lo stesso nome o sullo stesso server con un nome diverso.

Quindi è possibile rivedere il contenuto pre-aggiornamento e scrivere uno script SQL per fare l'aggiornamento.

+0

Non è necessario, ho capito, ho fatto un aggiornamento-script circa 2 ore fa (non l'avevo comunque salvato, e volevo scartarlo - per fortuna non lo avevo ancora fatto.). Ho aggiornato tutti i valori e ho apportato solo 4 modifiche da (che ricordo), quindi non ho perso più di 5 minuti di lavoro. Wow, sono un inferno di un ragazzo fortunato ... –

4

Considerando che si dispone già di un backup completo, ripristinerò il backup in un database separato e migrerò i dati da lì.

Se i dati sono stati modificati dopo l'ultimo backup, allora si ripristinano tutti i dati in quel modo, ma è possibile provare a recuperarli leggendo il registro delle transazioni.

Se il database era in modalità di ripristino completo rispetto al registro delle transazioni, dispone di dettagli sufficienti per ripristinare gli aggiornamenti dei dati dopo l'ultimo backup.

Si potrebbe desiderare di provare con DBCC LOG, funzioni fn_log o con lettore di log di terze parti come ApexSQL Log

Purtroppo non esiste un modo di facile lettura log delle transazioni perché MS non fornisce la documentazione per questo e memorizza le dati nel suo formato proprietario.

4

Se si dispone già di un backup completo dal database, per fortuna è disponibile un'opzione in SQL Management Studio. In questo caso, è possibile utilizzare i seguenti passi:

  1. Fare clic con il pulsante destro del mouse sul database -> Attività -> Ripristina -> Database.

  2. Nella scheda Generale, fare clic su Linea temporale -> selezionare l'opzione Data e ora specifiche.

  3. Spostare il cursore della timeline su prima di aggiornare il tempo di comando -> fare clic su OK.

  4. Nel nome del database di destinazione, digitare un nuovo nome.

  5. Nella scheda File, selezionare Riassegna tutti i file nella cartella e quindi selezionare un nuovo percorso per salvare il database ripristinato.

  6. Nella scheda delle opzioni, selezionare Sovrascrivi ... e rimuovere l'opzione di controllo Take tail-log ....

  7. Infine, fare clic su OK e attendere fino al termine del processo di ripristino.

Ho utilizzato questo metodo personalmente in un database operativo ed è stato molto utile.

Problemi correlati