2010-03-01 86 views

Respuesta

78

si no se ha hecho una copia de seguridad, son bastante fudge.

+3

Así que no hay manera de deshacer que .... Oops lo hice mal .. Debería utilizar la consulta de selección para ver lo que debería estar borrando antes de ejecutar la consulta ... Una buena lección es más cautelosa – Vijay

+3

lamentablemente ese es el caso. y sí, siempre es una buena idea verificar con select antes de usar delete o update. –

+5

Este es uno de los defectos de las bases de datos estándar: no tienen historia, solo un gran recuerdo de "ahora". –

22

Si aún no ha confirmado la transacción, intente rollback. Si ya ha confirmado la transacción (por commit o saliendo del cliente de línea de comando), debe restaurar los datos de su última copia de seguridad.

+0

cómo invocar rollback no he salido del cliente de la línea de comandos .. – Vijay

+0

de forma predeterminada el cliente de la línea de comandos usa la confirmación automática después de cada comando. – stmax

+0

@Vijay: simplemente escriba "rollback"; + INTRO –

8

Un "retroceso" solo funciona si usaste transactions. De esta forma, puede agrupar consultas y deshacer todas las consultas si solo una de ellas falla.

Pero si ya ha confirmado la transacción (o ha utilizado una consulta DELETE normal), la única manera de recuperar sus datos es recuperarlos de una copia de seguridad realizada anteriormente.

0

Rollback normalmente no funcionará en estas funciones de eliminación y seguramente solo una copia de seguridad puede salvarlo. Si no hay una copia de seguridad, no hay forma de restaurarlo ya que las consultas de eliminación se ejecutaron en putty, derby usando archivos .sql se confirman automáticamente una vez que se inicia la consulta de eliminación.

3

La respuesta aceptada no siempre es correcta. Si configura el registro binario en mysql, puede retrotraer la base de datos a cualquier punto anterior para el que todavía tenga una instantánea y un binlog. http://dev.mysql.com/doc/refman/5.0/en/point-in-time-recovery.html es un buen punto de partida para aprender sobre esta instalación.

+0

Tengo una duda. si el registro binario está habilitado, creo que tendrá bases de datos de cobertura en un servidor mysql. Entonces, las cosas que tenemos que considerar, 1. si usamos esta opción para recuperar un db, terminamos recuperándonos para todo 2. Y estoy en lo cierto, aunque usemos el registro binario para la recuperación puntual , ayuda cuando tenemos una copia de seguridad del servidor/db para iniciar el proceso de restauración. – Vijay

0

Si desea datos de reversión primero debe ejecutar autocommit = 0 y luego ejecutar la consulta eliminar, insertar o actualizar. Después de ejecutar la consulta, ejecutar rollback ....

2

utilizar el comando BEGIN TRANSACTION antes de iniciar consultas. Para que pueda ROLLBACK cosas en cualquier punto del tiempo.

POR EJEMPLO:

  1. iniciar la transacción
  2. seleccionar * de Student
  3. eliminar del Estudiante donde id = 2
  4. seleccionar * de Student
  5. rollback
  6. seleccionar * de Estudiante
0

también había borrado algunos valores de mi base de datos de desarrollo, pero tenía la misma copia en la base de datos de QA, así que hice un script de generación y seleccioné la opción "tipo de datos para script" a "solo datos" y seleccioné mi tabla y luego Obtuve las declaraciones de inserción con los mismos datos y luego ejecuto el script en mi base de datos de desarrollo.

0

en Oracle esto sería un problema no

SQL> delete from Employee where id = '01'; 

1 row deleted. 

SQL> select id, last_name from Employee where id = '01'; 

no rows selected 

SQL> rollback; 

Rollback complete. 

SQL> select * from Employee where id = '01'; 

ID FIRST_NAME LAST_NAME START_DAT END_DATE  SALARY CITY  DESCRIPTION 
---- ---------- ---------- --------- --------- ---------- ---------- --------------- 
01 Jason  Martin  25-JUL-96 25-JUL-06 1234.56 Toronto Programmer 
+0

Puede hacer lo mismo en cualquier base de datos SQL que admita transacciones. No está claro por la pregunta del OP, pero supongo que ya habían comprometido la transacción, y es demasiado tarde para deshacerla. –

Cuestiones relacionadas