Si la base de datos ha podido ser montada se puede utilizar el comando DBCC CHECKDB tal como se describe en:
http://www.cryer.co.uk/brian/sqlserver/howto_repair_a_database.htm escrito por Brian Cryer
He aqui una traducción:
Para determinar si una base de datos necesita ser reparada ejecutar:
dbcc checkdb('DB-NAME') with no_infomsgs
reemplazando ’DB-NAME’ con el nombre de la base de datos.
Si el comando se completa sin desplegar errores la base de datos no necesita ser reparada.
Si los errores que aparecen contienen lineas con la leyenda:
... Run DBCC UPDATEUSAGE
entonces la base de datos NO necesita ser reparada, simplemente ejecute el siguiente comando:
dbcc updateusage('DB-NAME') with no_infomsgs
Si una base de datos no necesita ser reparada entonces:
- Si es posible, identifique porque la base de datos necesita ser reparada. Revisar el visor de eventos de sistema y de aplicaciones de windows para ver si hay registros de eventos que pudieran estar relacionados con el problema. Por ejemplo Por ejemplo ¿El problema es provocado por una falla de disco duro? Con frecuencia no será posible identificar la causa, pero en caso de ser posible recuerde corregir el problema detectado.
- Se sugiere que, en vez de reparar la base de datos, esta sea restaurada a partir del último respaldo confiable.
Para reparar la base de datos, primero debemos ponerla en modo monousuario (usuario único):
alter database DB-NAME set SINGLE_USER
en caso de que la base de datos sea MASTER o MSDB consulte ”How to set a single database into single user mode“.
Una vez que la base de datos ha sido puesta en modo monousuario ya puede ser reparada. Existen varias opciones de reparación pero las dos que típicamente se utilizan son “REPAIR_REBUILD” y “REPAIR_ALLOW_DATA_LOSS”. Sugiero, en primera instancia, usar:
dbcc checkdb('DB-NAME',REPAIR_REBUILD)
esto realizara cualquier reparación que SQL Server pueda realizar sin perder datos.
Si (y sólo si) SQL Server no puede reparar la base de datos sin pérdida de datos, entonces usar:
dbcc checkdb('DB-NAME',REPAIR_ALLOW_DATA_LOSS)
una vez que la base de datos ha sido reparada debe ser devuelta a modo multiusuario:
set database DB-NAME set MULTI_USER (Estos comandos han sido probados en SQL Server 2005)