Base de datos contiene transacciones diferidas
Te ha sucedió que estas realizando algún proceso sobre una base de datos y por circunstancias casuales el servidor termina reiniciándose. Todo está normal hasta que te das cuenta que tu base de datos sigue por un buen tiempo en el estado «en recuperación», y cuando intentas realizar cualquier operación ocurren bloqueos o bien te arroja el siguiente error:
Check statement aborted. Database contains deferred transactions.
¿Qué podemos hacer para solucionar este problema?
- Lo primero es tratar de evitar que los usuarios finales comiencen a generar transacciones sobre la base de datos afectada.
- Luego verificamos que el espacio en disco sea lo suficiente para que crezca la base de datos dbtemp.
- Después hay que poner el servidor o bien la base de datos en modo «usuario único». En este ejemplo vamos a cambiar la base de datos en modo «usuario único», entonces podemos usar:
ALTER DATABASE [DIRTEPOL] SET SINGLE_USER WITH NO_WAIT
o
EXEC sp_dboption 'Dirtepol', 'single user', 'true'
- Ahora que ya podemos trabajar sobre la base de datos, es necesario verificarla para solucionar el problema de las transacciones que no terminaron de procesarse con rollback, y utilizamos el siguiente script:
USE DIRTEPOL GO DBCC CHECKDB
- Por último restablecemos el modo a «multi usuario», y ejecutamos el siguiente script:
ALTER DATABASE [DIRTEPOL] SET MULTI_USER WITH NO_WAIT
o
EXEC sp_dboption 'Diterpol', 'single user', 'false'
Este es un procedimiento básico pero efectivo para Sql Server 2008. Espero les sea de utilidad.
Entradas relacionadas