2011-01-14 26 views
15

En SQL Server Management Studio, hice la consulta a continuación.
Lamentablemente, olvidé descomentar la cláusula WHERE.
Se actualizaron 1647 filas en lugar de 4.¿Cómo deshacer una consulta SQLDATE UPDATE?

¿Cómo puedo deshacer la última instrucción?

Lamentablemente, acabo de terminar de traducir esas 1647 filas y estaba haciendo las correcciones finales , y por lo tanto no tengo una copia de seguridad.

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' 

Hay un protocolo de transacción, al menos eso espero.

+0

¿Alguna vez ha hecho una copia de seguridad? ¿Cuál es tu modelo de recuperación establecido? –

+0

Modelo de recuperación? ;-) –

+1

Oh gracias a Dios, tengo una copia de seguridad automática de hoy por la tarde. –

Respuesta

9

, una operación no comprometido puede ser revertida mediante la emisión de la orden ROLLBACK

Pero si se está ejecutando en modo no hay nada que pueda hacer ....

+3

No es cierto: la recuperación de un punto en el tiempo podría estar disponible a través de los registros de transacciones dependientes del modelo de recuperación del OP y si ellos alguna vez tomaron una copia de seguridad. –

+0

OK, pero no con SQL "simple", ¿verdad? –

+0

De acuerdo, mirando los comentarios parece que OP tuvo suerte de todos modos! –

0

auto-commit Puesto que usted tiene un COMPLETO copia de seguridad, puede restaurar la copia de seguridad en un servidor diferente como una base de datos del mismo nombre o en el mismo servidor con un nombre diferente.

Luego puede simplemente revisar los contenidos antes de la actualización y escribir un script SQL para realizar la actualización.

+0

No será necesario, me di cuenta, hice un script de actualización hace aproximadamente 2 horas (sin embargo, no lo había guardado y quería descartarlo, afortunadamente aún no lo había hecho). Actualicé todos los valores y solo hice 4 cambios desde entonces (que recuerdo), así que no perdí más de 5 minutos de trabajo. Wow, soy un tipo afortunado ... –

4

Considerando que ya tiene una copia de seguridad completa, simplemente restauro esa copia de seguridad en una base de datos separada y migro los datos desde allí.

Si sus datos han cambiado después de la última copia de seguridad, entonces recuperará todos los datos de esa manera, pero puede intentar recuperarlos leyendo el registro de transacciones.

Si su base de datos estaba en modo de recuperación completa, el registro de transacciones tiene suficientes detalles para recuperar las actualizaciones de sus datos después de la última copia de seguridad.

Es posible que desee probar con DBCC LOG, funciones fn_log o con lector de registros de terceros, como ApexSQL Log

Desafortunadamente no hay una manera fácil de leer registro de transacciones porque MS no proporciona documentación para esta y las tiendas datos en su formato propietario.

4

Si ya tiene una copia de seguridad completa de su base de datos, afortunadamente, tiene una opción en SQL Management Studio. En este caso, puede usar los siguientes pasos:

  1. Haga clic derecho en la base de datos -> Tareas -> Restaurar -> Base de datos.

  2. En la ficha General, haga clic en Línea de tiempo -> seleccione la opción Fecha y hora específicas.

  3. Mueva el control deslizante de la línea de tiempo a antes de actualizar la hora del comando -> haga clic en Aceptar.

  4. En el nombre de la base de datos de destino, escriba un nuevo nombre.

  5. En la pestaña Archivos, marque Reasignar todos los archivos a la carpeta y luego seleccione una nueva ruta para guardar su base de datos recuperada.

  6. En la pestaña de opciones, marque Sobrescribir ... y elimine la opción Tomar registro de cola ....

  7. Finalmente, haga clic en Aceptar y espere hasta que el proceso de recuperación haya terminado.

He utilizado este método yo mismo en una base de datos operativa y fue muy útil.