AVISO: Este modo de recuperación no evita la pérdida de datos, no debe realizarse en bases de datos de producción.

Puede suceder que debido a la pérdida de alguna unidad o fallo en algún disco nos aparezcan bases de datos en modo suspect. Desde el SQL Server Management Studio nos aparecerán con este símbolo y leyenda.

suspect

En este modo cualquier consulta que intentemos realizar fallará con el siguiente mensaje:

Msg 926, Level 14, State 1, Line 1
Database 'ReportServer_MFerrer' cannot be opened. It has been marked SUSPECT by recovery. 
See the SQL Server errorlog for more information.

Si revisamos los logs del sistema nos encontraremos con el siguiente mensaje.

error

El mensaje es claro, dice lo siguiente.

The log scan number (96425:307:0) passed to log scan in database 'agencias_FACTURACION_10' is not valid. This error may indicate data corruption or that the log file (.ldf) does not match the data file (.mdf). If this error occurred during replication, re-create the publication. Otherwise, restore from backup if the problem results in a failure during startup.

Es decir, no concuerdan el número de LSN que figura en la base de datos con el que figura en el fichero de log. En este caso, como no se trata de una base de datos de producción y nos podemos permitir el lujo de perder datos, la forma más rápida de solucionarlo es la siguiente. Primero pasamos la base de datos a modo EMERGENCY con el siguiente T-SQL.

ALTER DATABASE ReportServer_MFerrer SET EMERGENCY
GO

Si actualizamos el estado en el SQL Server Management Studio veremos que el icono ha cambiado, ahora nos aparece la base de datos en rojo.

emergency

Seguidamente pasamos la base de datos a modo SINGLE_USER.

ALTER DATABASE ReportServer_MFerrer SET SINGLE_USER
GO

Y con el comando DBCC recuperamos la base de datos indicando que permitimos la pérdida de datos (de ahí que no podamos realizarlo en bases de datos de producción a menos que no exista otro forma).

DBCC checkdb('ReportServer_MFerrer',  REPAIR_ALLOW_DATA_LOSS )
GO

Finalmente, podemos volver a poner la base de datos en modo MULTI_USER.

ALTER DATABASE ReportServer_MFerrer SET MULTI_USER
GO

Y ya tendremos la base de datos lista.

ready

Para realizar el mismo procedimiento sin pérdida de datos, lo que hay que hacer es primero igualar los números de los LSN en los dos lados, en el fichero de datos y en el log. Para ello lo que tenemos que hacer es restaurar los backups del log de transacciones, en caso de disponer de ellos (deberíamos disponer de ellos!!!), pero como esto no siempre es posible, y en los casos en los que la pérdida de datos esté permitida o no sea crítica, se puede usar este método.

 

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s