jueves, 29 de abril de 2010

recuperar una base desde MDF

http://smart-generator.com/cursos/post/2009/08/Como-rescatar-de-las-llamas-del-infierno-un-MDF-sin-el-LDF.aspx

Qué hacer si ya valió?

Cabe mencionar que la siguiente alternativa solo funciona para SQL Server y no es una opción muy “elegante” al problema, yo sigo la siguiente filosofía: “A problemas piñatas, soluciones piñatas”, no por algo tengo un diploma a las “marranadas” (hablando de soluciones tecnológicas).

La solución propuesta sería:

1. Crear las bases de datos afectadas en blanco, detener el servicio de SQL Server y cambiar el MDF por el que rescataron del server caído (Q.E.P.D).

2. Eliminar el LDF que se generó en blanco y reiniciar el servicio de SQL. Dado esto debería marcar la base de datos como suspect.

3. Posicionarse en la base de datos MASTER (USE MASTER)

4. Cambiar las opciones de configuración global del servidor actual para que permita hacer cambios al mismo.

EXEC sp_Configure 'ALLOW UPDATES', 1
RECONFIGURE WITH OVERRIDE

5. Cambiar el estado de la base de datos a MODO DE EMERGENCIA.

UPDATE SYSDATABASES SET STATUS = 32768 WHERE NAME = 'NombreBaseDeDatos'

6. Cambiar las opciones de configuración global del servidor actual para que ya no permita hacer cambios al mismo

EXEC sp_Configure 'ALLOW UPDATES', 0
RECONFIGURE WITH OVERRIDE

7. Cambiar la base de datos afectada a opción de usuario simple.

EXEC sp_DBOption 'ArchivoIntegracion', 'SINGLE USER', 'TRUE'

8. Reconstruir el LOG de transacciones (LDF) de la base de datos (MDF).

DBCC REBUILD_LOG ('NombreBaseDeDatos', 'C:\Program Files\Microsoft SQL Server\MSSQL\Data\NombreBaseDeDatos_Log.ldf')

9. Cambiar las opciones de configuración global del servidor actual para que permita hacer cambios al mismo.

EXEC sp_Configure 'ALLOW UPDATES', 1
RECONFIGURE WITH OVERRIDE

10. Cambiar el estado de la base de datos a MODO NORMAL.

UPDATE SYSDATABASES SET STATUS = 0 WHERE NAME = 'NombreBaseDeDatos'

11. Cambiar las opciones de configuración global del servidor actual para que ya no permita hacer cambios al mismo

EXEC sp_Configure 'ALLOW UPDATES', 0
RECONFIGURE WITH OVERRIDE

12. Cambiar la base de datos afectada a opción de usuarios múltiples.

EXEC sp_dboption 'ArchivoIntegracion', 'SINGLE USER', 'FALSE'




Y voila, ya quedó milagrosamente rescatado nuestro MDF sin necesidad de contar con el LDF respectivo. Josué ya puede estar más tranquilo al respecto y tener más cuidado para la próxima vez que ocurra esto en su organización (que esperemos y jamás vuelva a suceder).