¿Cómo recupero algunos registros eliminados?


49

Eliminé por error alrededor de 2,000,000 de registros de una tabla remota de SQL Server 2008. El servidor no me concede acceso a los archivos de respaldo en el lado del servidor.

¿Hay alguna forma de recuperar estos registros?


18
¿Cuándo fue la última vez que probó sus copias de seguridad?
Joe

20
¿Cuándo fue la última vez que probó un RESTAURACIÓN de sus copias de seguridad?
datagod el

Respuestas:


116

¿Está su base de datos en modo de recuperación completa?

  • En caso afirmativo, ¿está haciendo copias de seguridad del registro de transacciones?

    • En caso afirmativo, ¿tiene una utilidad de copia de seguridad como Quest LiteSpeed, Red Gate SQL Backup o Idera SQLSafe?
      • En caso afirmativo, esas utilidades pueden recuperar objetos de los archivos de copia de seguridad (incluidos los registros completos y los registros de transacciones), pero explicar cómo usarlos está más allá del alcance de lo que puedo hacer aquí. Póngase en contacto con el vendedor para obtener instrucciones.
      • Si no, restaure los registros completos de copias de seguridad y transacciones como una base de datos con un nombre diferente. (No sobrescriba la base de datos existente). Podrá obtener una copia del objeto hasta el segundo antes de que ocurra la eliminación, pero deberá usar la parte stopat del comando de restauración para especificar cuándo dejar de restaurar los comandos. Debe detenerse antes de que ocurra la eliminación.
    • Si no, vaya a tomar una copia de una utilidad de lector de registros como Quest LiteSpeed ​​o Apex SQL Log. Estas utilidades pueden conectarse al servidor de la base de datos, examinar el archivo de registro y ayudarlo a deshacer las transacciones. No estoy seguro de si las versiones de demostración funcionarán, pero las pagas definitivamente lo harán.
  • Si no (no en modo de recuperación completa), restaure la última copia de seguridad completa como una base de datos con un nombre diferente. (No sobrescriba la base de datos que ya tiene). Desde allí, podrá restaurar los registros que estaban en línea en el momento de la copia de seguridad, pero perderá todos los cambios desde entonces.


44
Gran respuesta, agregaré que si tiene auditoría o seguimiento de cambios, generalmente es más fácil recuperar los datos de esas tablas cuando solo una tabla se ha visto afectada. Y, por supuesto, si su respuesta fue negativa a algunas o todas las anteriores, después de restaurar los registros tanto como sea posible, entonces corrija su proceso de copia de seguridad y, posiblemente, quién tiene acceso a los datos de producción.
HLGEM

Si está en modo simple, las filas podrían estar físicamente presentes en algunas páginas. Tal vez algunos de ellos puedan recuperarse (a un costo muy alto de tiempo y / o dinero).
Usr

FYI. ApexSQL Recover además de la limitación de tiempo, la versión de evaluación recupera solo 1 de cada 10 filas del total de filas disponibles para la recuperación ( apexsql.com/faqs/faqs_recover.aspx )
Sameer

30

SQL Server mantiene registros para cada registro eliminado. Puede consultar estos registros a través de la fn_dblogfunción SQL Server.

SELECT [RowLog Contents 0] 
FROM   sys.fn_dblog(NULL, NULL) 
WHERE  
       AllocUnitName = 'dbo.TableName'        
   AND Context IN ( 'LCX_MARK_AS_GHOST', 'LCX_HEAP' )        
   AND Operation in ( 'LOP_DELETE_ROWS' )   
;

Pero este registro está en formato hexadecimal y debe convertir este formato hexadecimal a sus datos reales.

El siguiente artículo lo ayudará a recuperar los registros eliminados de la manera definida anteriormente:

http://raresql.com/2011/10/22/how-to-recover-deleted-data-from-sql-sever/


3
Esto está muy bien. ¿En qué condiciones funciona este enfoque (o no funciona)?
Nick Chammas el

3
@NickChammas: solo puede recuperar lo que está en el registro activo, por lo que para un modelo de recuperación simple no debe haber ocurrido un punto de control. También parece que actualmente no funciona correctamente en bases de datos con aislamiento de instantáneas, pero eso debería ser una solución fácil. @user1059637- ¿Cuál es su actitud hacia las personas que agregan funcionalidad a su código?
Martin Smith

@MartinSmith, ahora también funciona perfectamente con el aislamiento de instantáneas.
user1059637

22

Desafortunadamente, no podremos ayudarlo sin mucha más información. Pero de su pregunta, veo que ha eliminado lo que parecen ser 2 millones de registros de su base de datos. Lo más probable es que no pueda recuperar esta información, a menos que tenga un registro completo en su base de datos y compre algunas herramientas muy específicas.

Si puede describir con más detalle exactamente lo que cree que ha hecho y por qué siente que no puede recuperar los registros y puede describir la organización de su base de datos, entonces podríamos ayudarlo un poco más.

Algunos consejos generales: si cree que ha eliminado 2 millones de registros, probablemente esté un poco asustado en este momento. Por lo tanto, debe tomar un descanso de cinco minutos, calmarse y volver a tratar el problema. Además, debe decirle a su jefe de inmediato si es razonable (no despierte a alguien a las 2 a.m. para decirle) y que está trabajando en una solución. Es mejor admitir lo que sucedió que tratar desesperadamente de recuperarse y potencialmente empeorar las cosas y ocultar los detalles. Saber que su jefe puede ayudarlo de alguna manera, lo ayuda a solucionar el problema. Como dije, solo algunos consejos generales.


10
buena idea con el descanso de 5 minutos. Siempre funciona Ayuda a concentrarse. :-) He estado allí hecho eso.
John aka hot2use
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.