Estoy restaurando los registros de transacciones a una base de datos, pero necesito una manera de saber con qué registro de transacciones debo comenzar. Normalmente veré algo como esto:
El registro en este conjunto de copia de seguridad termina en LSN 103000001633300001, que es demasiado pronto para aplicarlo a la base de datos. Se puede restaurar una copia de seguridad de registro más reciente que incluye LSN 103000002524300001.
Entonces, ¿cómo obtengo el LSN 103000002524300001 programáticamente? La base de datos está en modo NORECOVERY, por lo que DBCC LOG no funciona. Tengo registros de los registros de transacciones, así que sé cuáles son sus primeros y últimos LSN. Simplemente no sé dónde se encuentra actualmente la base de datos.
Puede obtener esta información con una consulta como:
fuente
No estoy seguro acerca de cómo obtener el primer / último LSN de un archivo de registro de transacciones mediante programación, pero puede simplemente escribir la recuperación para intentar aplicar cada registro de transacciones que tiene en orden, los que son "demasiado pronto" (ya existen en la base de datos) ) fallará con este error. El resto debe aplicarse limpiamente.
Sin embargo, es de esperar que alguien tenga una mejor idea: me imagino que es bastante doloroso esperar si tiene muchos registros de transacciones, ya que probablemente se deba escanear todo el registro para determinar cuáles son los LSN iniciales y finales.
fuente
El hecho de que tenga una base de datos en norecovery significa que ya ha restaurado una copia de seguridad de algún tipo. Esa copia de seguridad tiene un encabezado. Usa eso.
fuente
RESTORE HEADERONLY
devuelve elFirstLSN
yLastLSN
de la copia de seguridad, así como el queDatabaseBackupLSN
contiene el LSN de la última copia de seguridad completa. A partir de estos, puede recrear el orden necesario de restauración. Nunca necesita mirar el LSN de la base de datos, el orden necesario siempre puede (y debe) recrearse desde el medio de respaldo en sí.fuente