Problema

Recientemente actualizando una instancia de SQL Server 2012 a SQL Server 2016 nos hemos encontrado con el siguiente problema. El servidor en cuestión tiene base de datos secundarias en un escenario de Log Shipping. Una de estas base de datos es la ReportServerTempDB que usamos en otro servidor para el servicio Microsoft Reporting Services. El actualizador detecta que hay una base de datos de Reporting Services e intenta actualizarla, sin tener en cuenta que la base de datos está en estado Restoring, por ser una base de datos secundaria y por lo tanto no puede actualizarla. La consecuencia es una instanacia corrupta de SQL Server por tener una instalación a medias.

Solución

Iniciar el servicio del SQL usando los trace flags, que se utilizan para fijar temporalmente las características específicas de servidor o para deshabilitar un comportamiento particular. Por ejemplo, si el indicador de traza 3205 se establece cuando una instancia de SQL Server se inicia, la compresión de hardware para los controladores de cinta está desactivada. Los trace flags son útiles para diagnosticar problemas de rendimiento o para depurar procedimientos almacenados. En nuestro caso concreto, hemos usado el trace flag 902, que en palabras de microsoft,  ignora la ejecución del script de actualización de base de datos al instalar una actualización acumulativa o Service Pack, y por lo tanto, nos será útil si se produce un error durante la actualización.

El proceso es sencillo. Con el servicio apagado (recordemos que no arranca por el upgrade incompleto) podemos ejecutar el siguiente comando desde una consola con provilegios:

C:\Net Start MSSQL$InstanceName /T902

Donde MSSQL$InstanceName es el nombre de la instancia de SQL Server. Si usamos nombres de instancia por defecto, sencillamente ejecutamos el siguiente comando:

C:\Net Start MSSQLSERVER /T902

De esta forma iniciamos el servicio indicando que ignore los scripts de actualización que tiene pendientes de ejecutar.

Una vez el servicio está iniciado, podemos eliminar el log shipping de la base de datos que nos daba errores, reiniciar el servicio en modo normal y ejecutar el upgrade sin problema alguno.

Si queréis más información sobre los trace flags, aquí tenéis un listado completo con cada una de sus funciones.

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