¿Cómo puedo recuperar datos del archivo LDF?

9

Estamos utilizando SQL 2005 Express Edition. Queremos leer los datos del archivo LDF para restaurar algunos registros eliminados.

Intentamos usar una versión de prueba de ApexSQL que nos ayudó mucho. En lugar de optar por software de terceros, estamos tratando de descubrir cómo leer el archivo de registro nosotros mismos.

¿Cómo podemos leer y recuperar datos del archivo LDF?

goofyui
fuente
¿La base de datos utiliza el modelo de recuperación completa o simplemente?
MartinC
Sí, utilizamos el modelo de recuperación completa
goofyui
Podemos recuperar datos utilizando la versión de prueba de ApexSQL. La versión de prueba solo permite ver los datos. Nosotros no tenemos presupuesto para comprar una versión completa y así tratar de averiguarlo por nosotros mismos para recuperar los datos del archivo de .ldf
goofyui

Respuestas:

11

Necesitará una copia de seguridad completa anterior y cualquier copia de seguridad de registro tomada desde la última copia de seguridad completa

1) Tome una cola de la copia de seguridad del registro

BACKUP LOG OldDB TO DISK='C:\OldDB_Tail.trn' WITH NO_TRUNCATE

2) Buscar transacción para registros eliminados (la operación será LOP_DELETE_ROWS para DELETEs y LOP_SET_BITS y LOP_MODIFY_ROW para una TABLA TRUNCATE)

SELECT * FROM fn_dblog(NULL,NULL) WHERE AllocUnitName = 'dbo.YourTableName'

3) Restaurar copias de respaldo completas anteriores y de registro más la cola a una nueva base de datos CON NORECOVERY y STOPAT = 'Justo antes de la hora de inicio de la transacción'

RESTORE DATABASE NewDB
FROM DISK='C:\Previous_Full_Backup_Of_OldDB.bak'
WITH NORECOVERY,
STOPAT='2012/01/11 11:35AM',
MOVE 'OldDB' TO 'C:\DATABASES\NewDB.mdf',
MOVE 'OldDB_Log' TO 'C:\DATABASES\NewDB.ldf'

RESTORE LOG NewDB
FROM DISK='C:\Previous_TranLog_Backup_Of_OldDB.trn'
WITH NORECOVERY,
STOPAT='2012/01/11 11:35AM'

RESTORE LOG NewDB
FROM DISK='C:\OldDB_Tail.trn'
WITH NORECOVERY,
STOPAT='2012/01/11 11:35AM'

-- This recovers the restored database and allows access
RESTORE DATABASE NewDB WITH RECOVERY

Esta publicación de blog cubre con más detalle la búsqueda del tiempo para PARAR usando fn_dblog. Esta publicación de blog intenta recuperar datos directamente del registro, pero esto puede llevar mucho tiempo en comparación con un punto en el tiempo de recuperación.

También esta publicación de blog de Robert L Davis tiene un ejemplo sobre la combinación de STOP y STANDBY para permitirle consultar el estado de las bases de datos en diferentes momentos.

MartinC
fuente
¿Qué pasa con Truncate Records? Supongo que algunos de ellos también están truncados ... !!
goofyui
1) Cómo tomar .trn de mi antigua base de datos. Tengo .ldf, .mdf !! No tengo el archivo de registro de transacciones.
goofyui
La idea aquí es recuperar la base de datos hasta el punto antes de que se perdieran los datos y luego podrá hacer una copia de los datos perdidos. El comando BACKUP LOG es lo que crea el archivo trn desde la parte activa del registro de transacciones (ldf)
MartinC
Me resulta difícil entender tu punto por completo. ¿Puede por favor compartir la sintaxis de procedimiento .. como su mantenimiento como OldDB donde ocurrió accidente y NewDB a la que va a ser restaurado el archivo de registro OldDB ..
goofyui
1
He agregado más detalles y enlaces a blogs para encontrar el punto en el tiempo para recuperar y otro blog sobre el uso de la salida de fn_dblog para regenerar filas eliminadas.
MartinC