sql serverSeguro que alguna vez nos ha pasado que por diversas razones solo tenemos fichero MDF de una base de datos y se ha perdido el fichero LOG (fichero de transacciones). Aunque parezca una tarea simple, no siempre es fácil hacer que la base de datos se ponga operativa. Buscando por Internet encontré diferentes consejos y pautas, pero sin resultados positivos, así que haciendo una combinación de lo que encontré, más la propia experiencia e intuición finalmente lo he logrado y quiero compartirlo aquí por si alguna vez os pasa.

De todas formas sugiero leer y probar este ejemplo de Paul S. Randal TechEd Demo: Creating, detaching, re-attaching, and fixing a suspect database.

El proceso que realicé fue el siguiente:

  1. Crear una base de datos nueva con el mismo nombre del fichero MDF que tienes.
  2. Parar el Servicio SQL Server y reemplaza el fichero MDF (asegúrate de tener una copia antes)
  3. Iniciar el Servicio SQL Server. La base de datos se mostrará en estado “sospechoso” porque el fichero LOG no es correcto.
  4. Ejecutar el siguiente script:
USE [master] 
GO 
ALTER DATABASE [BASEDEDATOS] SET EMERGENCY 
GO 
ALTER DATABASE [BASEDEDATOS] SET SINGLE_USER 
GO 
DBCC CHECKDB ([BASEDEDATOS], REPAIR_ALLOW_DATA_LOSS) 
GO 
ALTER DATABASE [BASEDEDATOS] SET MULTI_USER 
GO 
ALTER DATABASE [BASEDEDATOS] SET ONLINE 
GO

Después de ejecutar este script se muestra un mensaje de error algo así como

Msg 5173, Level 16, State 1, Line 1
One or more files do not match the primary file of the database. If you are attempting to attach a database, retry the operation with the correct files.  If this is an existing database, the file may be corrupted and should be restored from a backup.
Log file ‘c:Program FilesMicrosoft SQL ServerMSSQL10.SQLEXPRESS2008MSSQLDATABASEDATOS_log.ldf’ does not match the primary file.  It may be from a different database or the log may have been rebuilt previously.
Warning: The log for database ‘MyDatabase’ has been rebuilt. Transactional consistency has been lost. The RESTORE chain was broken, and the server no longer has context on the previous log files, so you will need to know what they were. You should run DBCC CHECKDB to validate physical consistency. The database has been put in dbo-only mode. When you are ready to make the database available for use, you will need to reset database options and delete any extra log files.
DBCC results for ‘MyDatabase’.
Service Broker Msg 9675, State 1: Message Types analyzed: 14.
Service Broker Msg 9676, State 1: Service Contracts analyzed: 6.
Service Broker Msg 9667, State 1: Services analyzed: 3.
Service Broker Msg 9668, State 1: Service Queues analyzed: 3.
Service Broker Msg 9669, State 1: Conversation Endpoints analyzed: 0.
Service Broker Msg 9674, State 1: Conversation Groups analyzed: 0.
Service Broker Msg 9670, State 1: Remote Service Bindings analyzed: 0.
Service Broker Msg 9605, State 1: Conversation Priorities analyzed: 0.
… Long list of GBCC messages …
CHECKDB found 0 allocation errors and 0 consistency errors in database ‘BASEDATOS’.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Lo único que hacemos es ignorar el mensaje porque realmente no se trata de un problema. Luego ya tendremos la base de datos operativa como queríamos.  Espero que os sea de utilidad.

Si quieres más trucos de este tipo te invito a echarle un vistazo a este libro de SQL Server 2014 en Español

Comprar en AmazonSQL Server 2014 | Amazon Kindle Comprar en Google PlaySQL Server 2014 | Google Play Books