Retroceder   Foros del Web > Programación para sitios web > Bases de Datos > SQL Server

Respuesta
 
Herramientas Desplegado
Antiguo 17-ago-2006, 01:09   #1 (permalink)
-=ArgoN=- está en el buen camino
 
Avatar de -=ArgoN=-
 
Fecha de Ingreso: octubre-2005
Ubicación: Barcelona, España
Mensajes: 832
Exclamación AYUDA!! Hacer ROLLBACK de la ultima consulta ejecutada.

Hola de nuevo...
Ayer por la noche ejecute una query con resultados fatales
Estaba usando el "SQL Query Analyzer" (Analizador de consultas SQL) y ejecute la siguiente consulta:

UPDATE SKILL_T SET sSkillMastery=100 WHERE CharID=1003 AND sSkillID=1 OR sSkillID=2 OR sSkillID=7 OR sSkillID=9 OR sSkillID=10 OR sSkillID=11 OR sSkillID=12 OR sSkillID=13 OR sSkillID=14 OR sSkillID=19 OR sSkillID=23

Con lo cual de la tabla SKILL_T me puso a 100 todos los "sSkillMastery" cuyo sSkillID fuese de 1 o 2 o 7... etc

La consulta que deberia haber hecho seria:

UPDATE SKILL_T SET sSkillMastery=100 WHERE CharID=1003 AND (sSkillID=1 OR sSkillID=2 OR sSkillID=7 OR sSkillID=9 OR sSkillID=10 OR sSkillID=11 OR sSkillID=12 OR sSkillID=13 OR sSkillID=14 OR sSkillID=19 OR sSkillID=23)

De forma que en todos los casos CharID deberia haber sido igual a 1003. (me olvide el parentesis!!! )

Mi pregunta es, si no he usado el comando COMMIT ni he cerrado el Analizador de consultas, puedo llegar a hacer un ROLLBACK del ULTIMO UPDATE realizado en el mismo analizador de consultas?

Es URGENTISIMO... nunca me habia pasado nada igual, y todo por no hacer un select antes de hacer el update

Si se puediera hacer el rollback de este ultimo UPDATE les estaria toda una vida agradecido!!!

ArgoN
__________________
www.decabid.com - Anuncie su sitio web y potencie el número de visitas.
-=ArgoN=- está desconectado   Responder Citando
Antiguo 17-ago-2006, 07:27   #2 (permalink)
Colaborador
Andres95 tiene algunos puntos positivos de karma
 
Avatar de Andres95
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.149
supongo que no se puede.... hiciste un begin transaction antes?
se hacen respaldos periodicos de la bd?? tal vez eso te podria ayudar...
Andres95 está desconectado   Responder Citando
Antiguo 17-ago-2006, 13:12   #3 (permalink)
GatoNegro ha deshabilitado el karma
 
Fecha de Ingreso: agosto-2006
Mensajes: 7
Si es SQL server son inmediato las actualizaciones ha diferencia del ORACLE

para SQL Server necesitas indicarle antes de realizar una transaccion debes haber ejecutado el comando
BEGIN TRANSACTION
luego la transaccion
y despues
(ROLLBACK ó COMMIT) TRANSACTION


Sorry, trata de buscar un respaldo
GatoNegro está desconectado   Responder Citando
Antiguo 17-ago-2006, 14:55   #4 (permalink)
Moderador
Mithrandir llegará a ser famoso muy prontoMithrandir llegará a ser famoso muy pronto
 
Avatar de Mithrandir
 
Fecha de Ingreso: abril-2003
Mensajes: 12.108
Como te han dicho, si no comenzaste con un BEGIN TRANSACTION dejaste que SQL Server asumiera que cada sentencia es una transacción (transaction implicit).

En resumen.... estás frito.

Restaura la DB de tu respaldo más reciente o busca la manera de mediante querys regresar todo a su estatus correcto.

Existen programas (como los de Apex) para escarbar en el LOG y que puedieras utilizar para regresar hasta justo antes de esa sentencia. Pero dependes de tener la licencia del programa y en muchos de ellos tenerlo instalado desde antes del problema.

Obviamente para todo esto dependes de que en realidad exista un LOG donde escarbar, esto es, tener el Recovery Model en Full. Si lo tienes en Simple date por perdido.
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
Mithrandir está desconectado   Responder Citando
Respuesta

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 06:48.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93