Tenemos una base de datos muy grande (~ 6 TB), cuyo archivo de registro de transacciones se eliminó (mientras SQL Server se cerró. Hemos intentado:
- Separar y volver a conectar la base de datos; y
- Recuperar el archivo de registro de transacciones
... pero nada ha funcionado hasta ahora.
Actualmente estamos ejecutando:
ALTER DATABASE <dbname> REBUILD
LOG ON (NAME=<dbname>,FILENAME='<logfilepath>')
... pero dado el tamaño de la base de datos, esto probablemente demorará unos días en completarse.
Preguntas
¿Hay alguna diferencia entre el comando anterior y el siguiente?
DBCC CHECKDB ('<dbname>', REPAIR_ALLOW_DATA_LOSS)
¿Deberíamos estar ejecutando en su
REPAIR_ALLOW_DATA_LOSS
lugar?
Vale la pena señalar que los datos se derivan de otras fuentes para que la base de datos se pueda reconstruir, sin embargo, sospechamos que será mucho más rápido reparar la base de datos que volver a insertar todos los datos nuevamente.
Actualizar
Para aquellos que mantienen puntaje: el ALTER DATABASE/REBUILD LOG
comando se completó después de aproximadamente 36 horas e informó:
Advertencia: El registro para la base de datos 'dbname' ha sido reconstruido. Se ha perdido la coherencia transaccional. La cadena RESTORE se rompió y el servidor ya no tiene contexto en los archivos de registro anteriores, por lo que deberá saber cuáles eran.
Debe ejecutar DBCC CHECKDB para validar la consistencia física. La base de datos se ha puesto en modo solo dbo. Cuando esté listo para que la base de datos esté disponible para su uso, deberá restablecer las opciones de la base de datos y eliminar los archivos de registro adicionales.
Luego DBCC CHECKDB
ejecutamos un (tomó alrededor de 13 horas) que tuvo éxito. Digamos que todos hemos aprendido la importancia de las copias de seguridad de la base de datos (y de otorgar a los administradores de proyectos acceso al servidor ...).