SQL Server no responde tras instalar actualización


SQL no responde

Es posible que durante la actualización de una instancia de SQL Server recibamos un mensaje de error que no nos permita volver a levantar el servicio. En esta entrada veremos cómo localizar la causa de este fallo y cómo llevar a cabo los pasos necesarios para solventar esta situación.


Introducción, error durante la actualización

Durante la actualización de SQL Server, es posible que la instalación falle y que en algunos casos el instalador nos muestre un mensaje de error similar al siguiente:

Error update SQL Server

Tras recibir este mensaje de error, probablemente si tratamos de levantar el servicio SQL Server, este no responda, mostrando tras unos segundos de intentona el siguiente mensaje de error:

Error start SQL Server

En este momento es cuando comenzaremos a sentir una sensación de pánico, sobre todo si se trata de una instancia en producción. Nuestras primeras reacciones, casi por acto reflejo podrían ser, o bien intentar recuperar la instancia mediante la herramienta Repair que ofrece el instalador de SQL Server, o bien intentar reconstruir la base de datos master. Ya os adelanto que tirareis vuestro tiempo por la borda, yo mismo he de reconocer que comprobé la sensación de frustración al intentarlo. ¿Qué hacer entonces? veamos cómo podemos llegar a una solución.

Localizar la causa del error

Antes de proceder a solucionar el problema, debemos aislar el problema en sí para reconocer la causa del fallo.

Si optamos por revisar el fichero Summary.txt, no encontraremos información para nada relevante, o al menos nada que ya no sepamos, allí encontraremos algo similar al siguiente mensaje:

"Final result: The patch installer has failed to update the following instance: MSSQLSERVER. To determine the reason for failure, review the log files."

Recordemos que el archivo Summary.txt se encuentra normalmente en la ruta:

SQL Server 2016 - C:\Program Files\Microsoft SQL Server\130\Setup Bootstrap\Log\Summary.txt
SQL Server 2014 - C:\Program Files\Microsoft SQL Server\120\Setup Bootstrap\Log\Summary.txt
SQL Server 2012 - C:\Program Files\Microsoft SQL Server\110\Setup Bootstrap\Log\Summary.txt
SQL Server 2008\R2 - C:\Program Files\Microsoft SQL Server\100\Setup Bootstrap\Log\Summary.txt

Pues bien, para obtener información verdaderamente relevante, tenenos dos opciones:

1.- Verificar los errores de aplicación en el Visor de Eventos de Windows
2.- Abrir el fichero ERRORLOG de la instancia de SQL Server que no responde. Yo me enfocaré en esta opción

El fichero ERRORLOG suele estar por defecto alojado en el siguiente directorio:

Program Files\Microsoft SQL Server\MSSQL.n\MSSQL\LOG\ERRORLOG

(siendo n el nivel de compatibilidad de la versión de SQL Server que tenemos instalada)

Normalmente al final del archivo Errorlog encontrareis el error que ha provocado el fallo durante la instalación. Muy posiblemente vuestro mensaje de error sea algo diferente al aquí mostrado, pero si entre la información que arroja el fichero aparece el siguiente mensaje: "..Script level upgrade for database 'master' failed because upgrade step...", en este Post encontraréis la solución a vuestro problema.
Básicamente, el mensaje nos está diciendo que ocurrió un error durante la actualización de la base de datos master. ¿Por qué? Los motivos pueden ser diferentes según cada caso. Yo te enseñaré a descubrir la causa del problema e iniciar el servicio SQL Server, tu misión será solventar el fallo una vez levantado SQL Server.

Pues bien, en mi caso el archivo ERRORLOG arroja la siguiente información:

Error: 15173, Severity: 16, State: 1.
2017-05-16 13:00:17.75 spid8s Server principal '##MS_PolicyEventProcessingLogin##'' has granted one or more permission(s). Revoke the permission(s) before dropping the server principal.
2017-05-16 13:00:17.75 spid8s Error: 912, Severity: 21, State: 2.
2017-05-16 13:00:17.75 spid8s Script level upgrade for database 'master' failed because upgrade step 'msdb110_upgrade.sql' encountered error 15173, state 1, severity 16. This is a serious error condition which might interfere with regular operation and the database will be taken offline. If the error happened during upgrade of the 'master' database, it will prevent the entire SQL Server instance from starting. Examine the previous errorlog entries for errors, take the appropriate corrective actions and re-start the database so that the script upgrade steps run to completion.
2017-05-16 13:00:17.75 spid8s Error: 3417, Severity: 21, State: 3.
2017-05-16 13:00:17.75 spid8s Cannot recover the master database. SQL Server is unable to run. Restore master from a full backup, repair it, or rebuild it. For more information about how to rebuild the master database, see SQL Server Books Online.
2017-05-16 13:00:17.75 spid8s SQL Server shutdown has been initiated
2017-05-16 13:00:17.75 spid8s SQL Trace was stopped due to server shutdown. Trace ID = '1'. This is an informational message only; no user action is required.

De estos mensajes de error podemos extraer varias cosas importantes:

1.- Las siguientes líneas nos dicen, qué error provocó que SQL Server no responda:

Script level upgrade for database 'master' failed because upgrade step 'msdb110_upgrade.sql' encountered error 15173, state 1, severity 16. This is a serious error condition which might interfere with regular operation and the database will be taken offline. If the error happened during upgrade of the 'master' database, it will prevent the entire SQL Server instance from starting. Examine the previous errorlog entries for errors, take the appropriate corrective actions and re-start the database so that the script upgrade steps run to completion.

El texto marcado en negrita, indica que ocurrió algún tipo de error durante la actualización de la base de datos master que impide que el servicio SQL Server pueda ser iniciado.
Además el mensaje de error apunta específicamente al script msdb110_upgrade.sql. Yo encontré este archivo bajo la siguiente ruta:

C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Install

2.- Las siguientes líneas me están diciendo por qué ocurrió un error durante la actualización de la base de datos master:

Server principal '##MS_PolicyEventProcessingLogin##' has granted one or more permission(s). Revoke the permission(s) before dropping the server principal.

De aquí es fácil deducir, que en mi caso SQL Server no pudo ser actualizado debidamente debido a ciertos permisos que tiene asociados el login ##MS_PolicyEventProcessingLogin##.

Una vez aislado el problema, es hora de plantearse la siguiente pregunta: ¿si ni siquiera podemos levantar la instancia, ¿cómo vamos a revocar permisos a un usuario? Pues bien, por suerte Microsoft pone a nuestra disposición el FLAG 902, que ignorará los scripts que se llevan a ejecución durante el arranque del servicio, dándonos la oportunidad de reparar el problema.

Activar FLAG 902

Podemos activar el flag 902 de varias formas:

1.- Desde la consola de Windows, lanzando el siguiente comando si se trata de la instancia por defecto, en otro caso sustituye MSSQLSERVER por el nombre de la instancia afectada:

NET START MSSQLSERVER /T902
Execute NET START command

2.- Desde SQL Server Configuration Manager, siguiendo los siguientes pasos:

2.1.- Seleccionamos en Sql Server Services la instancia de SQL Server afectada
2.2.- Botón derecho sobre la instancia y clicamos sobre Propiedades
2.3.- Click sobre la pestaña Startup parameter
2.4.- Añadimos el flag -T902, aceptamos y levantamos la instancia

SQL Flag 902

Una vez hemos conseguido iniciar la instancia deberemos enfocarnos en solucionar nuestro problema concreto, que a estas alturas ya deberíamos haber localizado con ayuda del ERRORLOG o del Visor de Eventos de Windows.

Solución al problema de permisos de MS_PolicyEventProcessingLogin

El login MS_PolicyEventProcessingLogin es un login SQL basado en certificados para uso interno del Sistema, que se crea automáticamente al instalar SQL Server. El problema en este caso parece ser que SQL Server no puede eliminarlo para poder volver a crearlo tras la actualización porque al parecer tiene algún tipo de dependencia asociada.
Para descubrir cuál es esa dependencia vamos a ejecutar la siguiente consulta:

SELECT * FROM sys.server_permissions
WHERE grantor_principal_id =
(SELECT principal_id FROM sys.server_principals
WHERE NAME = N'##MS_PolicyEventProcessingLogin##')

Una vez ejecutada la consulta, descubrí que MS_PolicyEventProcessingLogin tenía asignado un Rol, como podemos ver en la siguiente imágen.

SQL Login Properties MS_PolicyEventProcessingLogin

El siguiente paso a tomar será revocar esa dependencia para que el servicio de SQL Server pueda volver a ser iniciado con total normalidad.

Y eso es todo, si añadiste la traza -T902 como parámetro de inicio usando SQL Server Configuration Manager, elimínala, guarda los cambios y reinicia SQL Server. Ahora deberá levantarse el servicio sin problema.

Espero que esto os sirva de ayuda, mucha suerte. Espero vuestros comentarios!




comments powered by Disqus
www.000webhost.com