Una situación que nos hemos encontrado en multitud de ocasiones, y que es un tema habitual dentro de los foros de soporte y administración de SQL, es que al conectarnos a una instancia nos encontremos con alguna de nuestras bases de datos en modo “Suspect”(sospechoso). Esta situación, que puede ser crítica, dependiendo del entorno en el que estemos trabajando, se debe habitualmente a:
- La base de datos se ha podido corromper.
- El servidor SQL se cerró incorrectamente y produjo que los archivos de datos o archivos de registro se hayan dañado.
- El sistemas no puede abrir la base de datos por falta de espacio, archivos inaccesibles o memoria insuficiente.
- Los archivos de la base de datos están en uso por el sistemaoperativo, backup, antivirus, etc.
¿Cómo saber si alguna de nuestras bases de datos esta en modo “Suspect”?
SELECT name,DATABASEPROPERTYEX (name, N'STATUS') AS N'Status'
FROM master.sys.databases
GO
También podemos realizar dicha comprobación a través del ErrorLog.
Solución
Tras comprobar las causas y solventar el origen del problema para que no vuelva a ocurrir, estas son algunas de las soluciones para dejar operativa y en estado “online” la base de datos:
OPCIÓN“A” Reinicio de la instancia
Reinicio de la instancia, por ejemplo a través del servicio del SQL Server Configuration Manager.
OPCIÓN“B” Chequeo y recuperación
1. Poner en estado accesible de emergencia y usuario único:
ALTER DATABASE DB_NAME SET EMERGENCY;
ALTER DATABASE DB_NAME SET SINGLE_USER;
2. Intentar reparación SIN pérdida:
DBCC CHECKDB (DB_NAME, REPAIR_REBUILD) WITH NO_INFOMSGS;
3. Si NO hay errores, ir al paso 6º.
Si aún quedan errores, intentar reparación CON pérdida:
DBCC CHECKDB (DB_NAME, REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS;
4. Si no hay errores, última verificación:
DBCC CHECKDB (DB_NAME);
5. Si aun quedan errores, entonces pasar a la «opción C«
6. Si NO quedan errores, poner accesible la BD:
ALTER DATABASE DB_NAME SET MULTI_USER;
GO
EXEC sp_resetstatus
OPCIÓN “C” Detach y Attach
1. Poner en estado accesible de emergencia y usuario único:
ALTER DATABASE DB_NAME SET SINGLE_USE
2. Detachbase de datos
USE [master]
GO
EXEC master.dbo.sp_detach_db @dbname = N'DB_NAME
GO
3. Copiar ficheros mdf, ndf y ldf a otras rutas o renombrarlos
4. Attach base de datos
USE [master]
GO
CREATE DATABASE [DB_NAME] ON
( FILENAME = N''),
( FILENAME = N''),
( FILENAME = N''),
FOR ATTACH
GO
5. Poner base de datos en Multi User
ALTER DATABASE DB_NAME SET MULTI_USER;
GO
EXEC sp_resetstatus
Para cualquier duda o apreciación puedes dejar tu comentario o enviarnos un correo.
This article presents clear idea for the new people of blogging, that truly how to
do running a blog.