Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Recuperar borrados

Estas en el tema de Recuperar borrados en el foro de SQL Server en Foros del Web. Hola que tal, alguien sabe si existe la manera de recuperar registros borrados como lo podía hacer en los .dbf de DOS que me permitían ...
  #1 (permalink)  
Antiguo 11/04/2013, 13:16
Avatar de Huasi  
Fecha de Ingreso: mayo-2007
Mensajes: 83
Antigüedad: 17 años
Puntos: 2
Recuperar borrados

Hola que tal, alguien sabe si existe la manera de recuperar registros borrados como lo podía hacer en los .dbf de DOS que me permitían restaurar registros eliminados o borrarlos definitivamente (algo así como la papelera de reciclaje). Resulta que no me convence dejar marcas que señalen un borrado ni tampoco una query sofisticada para regenerar un borrado accidental, por lo que de existir esta opción en SQL 2008 estaría bueno saber como usarla, saludos...
  #2 (permalink)  
Antiguo 11/04/2013, 13:54
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Recuperar borrados

podrias usar transacciones, por ejemplo un

Código SQL:
Ver original
  1. BEGIN tran
  2. DELETE FROM tabla
verificas los datos borrados

Código SQL:
Ver original
  1. SELECT * FROM tabla

si te convencen los borrados ejecutas
Código SQL:
Ver original
  1. commit tran

si no te convences con un

rollback tran :)


puedes configurar sql server para que cada transaccion necesite un commit :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Última edición por gnzsoloyo; 24/04/2013 a las 22:06
  #3 (permalink)  
Antiguo 11/04/2013, 14:09
Avatar de Huasi  
Fecha de Ingreso: mayo-2007
Mensajes: 83
Antigüedad: 17 años
Puntos: 2
Respuesta: Recuperar borrados

Hey Libras como va, vos sabes que utilizo transacciones para todo lo q sea ABM pero la pregunta no va por ese lado, me explico mejor. Resulta que tengo un sistema web con una base de datos para multiples clientes. Si alguno de mis clientes borra un registro de una tabla importante se puede desencadenar un proceso en cascada que puede borrar cientos de otros registros. Si la base de datos únicamente le perteneciera a este cliente la restauro y listo, pero al ser utilizada por varios clientes mas mis opciones son:

1. En lugar de borrar el archivo dejo una bandera en algún campo que se utilice para esto y reformulo todos los where en los select que llamen a esa tabla o,

2. Armo una Query para ejecutarla sobre la base restaurada para que lea e reinserte todo lo que mi cliente borro accidentalmente

Yo no se si SQL borra definitivamente o no los registros cuando ejecuto una query Delete, en el caso que no lo haga me interesaría saber donde esta esa información y como recuperarla. Con los .dbf en la época de DOS se podía hacer, por eso me parece raro que esto no se pueda realizar ahora.
  #4 (permalink)  
Antiguo 11/04/2013, 14:27
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Recuperar borrados

se guarda en los archivos del log de transacciones como recuperarla, llevando un bkp de los registros de transacciones, lo mas conveniente en este caso es que lo lleves con un campo Active/Inactive, es mas seguro que eliminar registros y mas facil de analizar que de regresar un query "gigantezco"
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 11/04/2013, 14:38
Avatar de Huasi  
Fecha de Ingreso: mayo-2007
Mensajes: 83
Antigüedad: 17 años
Puntos: 2
Respuesta: Recuperar borrados

Recuperar a traves del log de transacciones acarrea el problema de que me trae de vuelta toda la base de datos cuando yo solo necesito recuperar una porción. Por otro lado, lo malo que tiene el campo Active/Inactive (yo le llamo bandera :P) es que no borra nada y de esa manera se me dispara el crecimiento de la base, pero bueno supongo que con una política de mantenimiento para el borrado de los inactive luego de un determinado tiempo eso no seria problema. Gracias por la ayuda, saludos
  #6 (permalink)  
Antiguo 12/04/2013, 05:58
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: Recuperar borrados

Cita:
Iniciado por Huasi Ver Mensaje
Recuperar a traves del log de transacciones acarrea el problema de que me trae de vuelta toda la base de datos cuando yo solo necesito recuperar una porción. Por otro lado, lo malo que tiene el campo Active/Inactive (yo le llamo bandera :P) es que no borra nada y de esa manera se me dispara el crecimiento de la base, pero bueno supongo que con una política de mantenimiento para el borrado de los inactive luego de un determinado tiempo eso no seria problema. Gracias por la ayuda, saludos
Te comento mi experiencia. Yo ofrezco a los clientes campañas de marketing donde pueden subir sus agendas, gestionarlas, crear campañas, etc. Entre las operaciones con las agendas y las campañas también está la de "borrar".

Lo que yo hago no es borrar los datos porque luego es imposible saber que ha pasado (sí, se puede tirar del log de transacciones pero es muy pesado). En lugar de hacer un "Delete" prefiero usar un campo "bandera" para indicar si el registro esta borrado/inactivo. En mi caso, lo que hago es poner un campo que puede ser NULL y que llamo "fechaBaja". El hacerlo que sea un campo de tipo DateTime tiene el proposito adicional de saber en que fecha se realizó la baja.

Con esto tenemos un sistema en el que las bajas (o borrados) pueden ser reversibles por el administrador. Para solventar el tamaño del crecimiento lo que usamos es una segunda tabla de historicos. Con un job que se ejecuta cada día una vez, se pasan los registros cuya fecha de baja sea superior a 1 mes (por ejemplo). En mi caso tengo la obligación de tener que guardar todos los registros históricos pero en tu caso al cabo de "x meses" o "x dias" puedes hacerles el delete definitivo si no los necesitas.
__________________
Aviso: No se resuelven dudas por MP!
  #7 (permalink)  
Antiguo 12/04/2013, 12:59
Avatar de Huasi  
Fecha de Ingreso: mayo-2007
Mensajes: 83
Antigüedad: 17 años
Puntos: 2
Respuesta: Recuperar borrados

Gracias por contestar, ahora tengo las cosas un poco mas claras. Seguramente voy a optar por tu recomendación, en mi caso si la información que borra el usuario, si lo hace intencionalmente puedo generar problema si no le respeto su decisión y le hago una marca, por lo que lo de la segunda tabla me parece una buena opción, saludos...

Huasi

Etiquetas: registro, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:25.