El pasado día me encontré con un problema bastante curioso durante la instalación de SQL Server 2008 y creo que merece la pena compartir aquí lo que descubrí. En este caso mi cliente estaba llevando a cabo una instalación de SQL Server 2008 en un ordendador con Windows XP SP3 para dar soporte a un paquete de ERP instalado localmente.

El proceso de instalación de SQL Server 2008 parecía funcionar bien inicialmente pero fallaba en un determinado punto con el siguiente mensaje de error:

Error en la solicitud de inicio del servicio ‘SQLBrowser’. Haga clic en Reintentar para reintentar la accion o haga clic en Cancelar para cancelar el proceso de instalación.

Pulsando en el botón Reintentar llevaba a cabo un nuevo intento de arrancar el servicio, pero fallaba de nuevo con el mismo error de modo que no había otra opción que no fuese cancelar el proceso de instalación.

El Visor de Eventos de Windows no mostraba ninguna pista acerca del origen del error de manera que decidí comprobar el fichero de registro de instalación de SQL Server 2008 que se encuentra en la carpeta C:\Archivos de Programa\Microsoft SQL Server\100\Setup Bootstrap\Log. Existen diferentes archivos de registro en esta carpeta y cada uno de ellos proporciona información específica para un componente de SQL Server (SSIS, AS, Motor de Base de Datos, Herramientas Cliente, etc.). El fichero Detail.txt incluye información detallada de proceso global de instalación y es normalmente el primer fichero que abro a la hora de investigar un problema de instalación; esto fue lo que encontramos en nuestro caso:

2009-05-14 17:25:13 SQLBrowser: The last attempted operation: Iniciando el servicio SQL Server Browser 'SQLBrowser' y esperando hasta '900' segundos para que se complete el proceso. .
2009-05-14 17:25:13 Slp: Prompting user if they want to retry this action due to the following failure:
2009-05-14 10:25:13 Slp: ----------------------------------------
2009-05-14 17:25:13 Slp: The following is an exception stack listing the exceptions in outermost to innermost order
2009-05-14 17:25:13 Slp: Inner exceptions are being indented
2009-05-14 17:25:13 Slp:
2009-05-14 17:25:13 Slp: Exception type: Microsoft.SqlServer.Configuration.Sco.ScoException
2009-05-14 17:25:13 Slp: Message:
2009-05-14 17:25:13 Slp: Error en la solicitud de inicio del servicio 'SQLBrowser'.
2009-05-14 17
:25:13 Slp: Data:
2009-05-14 17:25:13 Slp: Feature = SQL_Browser_Redist_SqlBrowser_Cpu32

Aquí podíamos ver que efectivamente el servidio SQLBrowser había sido creado pero no podía ser arrancado por alguna razón. A continuación pasé al archivo de registro de instalación Summary.txt que proporciona un resumen de los eventos llevados a cabo durante el proceso; este fichero puede encontrarse también bajo la carpeta \LOG e incluye un lista de qué componentes han sido instalados con éxito y cuáles no. Lo interesante en este caso es que el error en este fichero no apuntaba al servicio de SQL Browser sino al componente MSXML 6.0 (el motor XML de Microsoft):

Detailed results:
  Feature:                       Servicios de Motor de base de datos
  Status:                        Error: consulte los registros para obtener detalles
  MSI status:                    Error: vea los detalles a continuación
  MSI error code:                0x5EBE5729
  MSI log file location:         C:\Archivos de programa\Microsoft SQL Server\100\Setup Bootstrap\Log\20090514_170659\Msxml6_Cpu32_1.log

Buscando dentro del fichero indicado se podía ver los siguiente (Msxml6_Cpu32_1.log):

MSI (s) (30:58) [17:22:37:661]: Note: 1: 1708
MSI (s) (30:58) [17:22:37:661]: Producto: MSXML 6.0 Parser (KB933579) -- Error en la instalación.

MSI (s) (30:58) [17:22:37:661]: Windows Installer instaló el producto. Nombre del producto: MSXML 6.0 Parser (KB933579). Versión del producto: 6.10.1200.0. Idioma del producto: 3082. Resultado de la instalación: 1603.

MSI (s) (30:58) [17:22:37:661]: Cleaning up uninstalled install packages, if any exist
MSI (s) (30:58) [17:22:37:661]: MainEngineThread is returning 1603

Estaba claro por tanto que el servicio SQL Browser no era el único componente que fallaba durante el proceso de instalación, el motor de Microsoft para XML 6.0 estaba también fallando. Observando los tiempos de los ficheros Detail.txt y Msxml6_Cpu32_1.log se podía comprobar además que este último mostraba el error antes; en otras palabras, el error de instalación de MSXML estaba teniendo lugar antes del error de instalación de SQL Browser. Volví de nuevo al fichero Detail.txt para confirmar este punto:

2009-05-14 17:22:36 Slp: ----------------------------------------------------------------------
2009-05-14 17:22:36 Slp: Running Action: Install_Msxml6_Cpu32_Action
2009-05-14 17:22:36 Slp: Target package: "D:\x86\setup\x86\msxml6.msi"
2009-05-14 17:22:37 Slp: InstallPackage: MsiInstallProduct returned the result code 1603.
2009-05-14 17:22:38 Slp: Sco: Attempting to write hklm registry key SOFTWARE\Microsoft\Microsoft SQL Server to file C:\Archivos de programa\Microsoft SQL Server\100\Setup Bootstrap\Log\20090514_170659\Registry_SOFTWARE_Microsoft_Microsoft SQL Server.reg_
2009-05-14 17:22:38 Slp: Sco: Attempting to write hklm registry key SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall to file C:\Archivos de programa\Microsoft SQL Server\100\Setup Bootstrap\Log\20090514_170659\Registry_SOFTWARE_Microsoft_Windows_CurrentVersion_Uninstall.reg_
2009-05-14 17:22:38 Slp: Sco: Attempting to write hklm registry key SOFTWARE\Microsoft\MSSQLServer to file C:\Archivos de programa\Microsoft SQL Server\100\Setup Bootstrap\Log\20090514_170659\Registry_SOFTWARE_Microsoft_MSSQLServer.reg_
2009-05-14 17:22:43 Slp:
2009-05-14 17:22:43 Slp: Watson bucket for Msi based failure has been created
2009-05-14 17:22:43 Slp: No retry-able MSI return code detected.
2009-05-14 17:22:43 Slp: Checkpoint: INSTALL_MSXML6_CPU32_ACTION
2009-05-14 17:22:43 Slp: Completed Action: Install_Msxml6_Cpu32_Action, returned False
2009-05-14 17:22:43 Slp: Error: Action "Install_Msxml6_Cpu32_Action" failed during execution.

Al revisar la información de "Agregar o Quitar Programas" en el Panel de Control de Widnows podía ver que el componente MSXML 6.0 se encontraba de hecho instalado. Este es un componente compartido instalado por SQL Server 2008 pero en mi caso el cliente no estaba seguro de si este estaba ya allí antes de la instalación de SQL Server. Decidí desinstalar este componente usando el propio "Agreagar o Quitar Progamas" y lanzar la instalación de SQL Server 2008 de nuevo. Esta vez la instalación se completó sin errores.

En este caso el error inicial de SQL Server Browser era confuso al ser el primer error que se mostraba en la interfaz gráfica. Solo mirando en los ficheros de registro de instalación de SQL Server pudimos comprobar que existía un problema anterior en la instalación de los componentes MSXML 6.0.

Otra posible forma de descubrir este error es mediante el fichero de registro del Bucket de Watson que se genera al producirse un error durante el proceso de instalación y que se encuentra en el mismo directorio de Log:

28052008

En nuestro caso el contenido de este fichero era:

Watson bucket data:
  Bucket param 1: 10.0.1600.22
  Bucket param 2: 6.10.1200.0
  Bucket param 3: msxml6.msi
  Bucket param 4: 0x2D2816FE
  Bucket param 5: 0x5EBE5729
  Bucket param 6: Install_Msxml6_Cpu32_Action
  Bucket param 7:
  Bucket param 8:
  Bucket param 9:
  Bucket param 10:

He revisado las notas referentes al SP1 para SQL Server 2008 y este problema parece estar resuelto en este Paquete de Servicio de forma que otra opción para evitar este problema sería la de instalar una versión de SQL Server 2008 con el Service Pack ya integrado (esto es lo que se conoce en Inglés como Slipstreaming). Esta funcionalidad es nueva en SQL Server 2008 y permite a los administradores de bases de datos integrar Paquetes de Servicio en los medios de intalación reduciendo los tiempos de despliegue y evitando problemas conocidos.

- Jorge Pérez, Microsoft Customer Support Services