lunes, 14 de marzo de 2011

SQL Error: “database 'msdb' cannot be opened due to inaccessible files or insufficient memory or disk space”

¡Y yo que pensaba que el SQL no se corrompía¡.  Esta tarde/noche estaba trabajando con el SQL cuando de repente  Zaaas: database 'msdb' cannot be opened due to inaccesible files or insufficiente memory or disk space”.  Al abrir el Management Studio y desplegar el nodo “Databases” aparecía constantemente este error además del correspondiente en el log de eventos: “The log scan number (309:536:1) passed to log scan in database 'msdb' 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”.

En mi caso y después de algunas pruebas y “vueltas” la solución ha sido:

  1. Copiar los ficheros “MSDBData.mdf” y “MSDBLog.ldf” desde la ruta “C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\Template Data” a la ruta “C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA”. 
  2. Ejecutar desde una nueva consuta del Management Studio el script “instmsdb.sql”  situado en la carpeta “C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\Install”

Es posible comprobar el estado de la base de datos, ejecutando la consulta 

select state_desc databasestatus_sysdtabase from sys.databases where name ='msdb'  

cuyo resultado será “RECOVERY_PENDING”, sin embargo y una vez completados los pasos anteriores el resultado pasará a ser “ONLINE” lo que indicará que todo ha vuelto a la normalidad, ¡ooooooppppppps, que alegría!.

Nota: Aunque no estoy seguro, es posible que partiendo de cualquier fichero “MSDBData.mdf” y “MSDBLog.ldf”, de un compañero, máquina virtual, etc. y siguiendo estos pasos el problema quede resuelto.

Saludos
Juanlu


Comments:
Despues de lo que tu comentas, sin correr el script, yo aplique esto:
Yes it is the common issue for DBA, here’s my troubleshooting steps:
STEP1: identify the db status:
use master
select databaseproperty(‘db_name’,'isShutdown’)
Most of them it would return 1 in this situation

STEP2: Clear up the internal db status:
use master
alter database db_name set offline
it would return with no error in most cases

STEP3: Get detail error message:
use master
alter database db_name set online
 
Gracias !
 
Publicar un comentario



<< Home

This page is powered by Blogger. Isn't yours?