Antes de empezar tenemos que aclarar que esta situación no está soportada. Las combinaciones soportadas para los distintos idiomas de Windows/SQL son las siguientes:

- SQL Server Ingles puede instalarse sobre cualquier versión de Windows, sea cual sea su idioma.

- SQL Server localizado para un idioma solo puede instalarse en un Windows del mismo idioma. También es posible instalarlo en un Windows ingles con el paquete “MUI” español instalado y activo para la cuenta que instala SQL.

Para más información: http://technet.microsoft.com/en-us/library/ee210665.aspx

Hace unos días me encontré con un caso en el que se pretendía actualizar una instancia de SQL Server 2008 a SQL Server 2008 R2 la cual finalizaba inesperadamente mientras se instalaban las “Support Files”

image

Error durante el upgrade de SQL Server 2008 a 2008 R2.

Como podemos ver el “Locale ID” del paquete que queremos instalar es el 3082 (Español – Alfabetización Internacional) y la máquina local tiene el “locale” (LCID) en 1033 (Inglés – Estados Unidos)

Como hemos comentado esta situación no está soportada pero nuestro objetivo es actualizar la instancia por tanto nos pusimos a analizar los logs de instalación de SQL Server. (Normalmente están localizados en “C:\Program Files\Microsoft SQL Server\{Version}\Setup Bootstrap\LOG” donde {version} es: 80 para SQL 2000, 90 para SQL 2005, 100 para SQL 2008 y 2008 R2

En el archivo Summary del log nos encontramos:

Exit code (Decimal):           -2068054013 (0x84BC0003)

Exit facility code:            1212 (0x4BC)

Exit error code:               3 (0x0003)

Como podemos ver en: http://msdn.microsoft.com/en-us/library/ms681382(v=vs.85).aspx el error código 3 corresponde con: ERROR_FILE_NOT_FOUND

Si vamos al final del log “Detailed_ComponentUpdate.txt” nos encontramos lo siguiente:

2010-11-16 13:21:56 Slp: Target package: "D:\SQL Server 2008 EE\SQL_Svr_2008_R2\1033_ENU_LP\x64\setup\sqlsupport_msi\SqlSupport.msi"

2010-11-16 13:21:56 Slp: InstallPackage: MsiInstallProduct returned the result code 3.

2010-11-16 13:21:56 Slp: Watson Bucket 1

Como podemos ver el error nos da porque no puede encontrar D:\SQL Server 2008 EE\SQL_Svr_2008_R2\1033_ENU_LP\x64\setup\sqlsupport_msi\SqlSupport.msi. El instalador prueba varias rutas antes de fallar así que ponemos una traza de procmon para ver que rutas intenta. El resultado de procmon es el siguiente.

"12:03:43,4193775","setup100.exe","2680","QueryOpen","D:\SW_SQLSrv2008R2Ent\1033_ENU_LP\x64\setup\sqlsupport_msi\x64\SqlSupport.msi","PATH NOT FOUND",""

"12:03:43,4194404","setup100.exe","2680","QueryOpen","D:\SW_SQLSrv2008R2Ent\1033_ENU_LP\x64\setup\sqlsupport_msi\SqlSupport.msi","PATH NOT FOUND",""

"12:03:43,7781168","setup100.exe","2680","QueryOpen","D:\SW_SQLSrv2008R2Ent\1033_ENU_LP\x64\setup\sql2008support\x64\SqlSupport.msi","PATH NOT FOUND",""

"12:03:43,7781803","setup100.exe","2680","QueryOpen","D:\SW_SQLSrv2008R2Ent\1033_ENU_LP\x64\setup\sql2008support\SqlSupport.msi","PATH NOT FOUND",""

"12:04:09,4823169","setup100.exe","2680","QueryOpen","D:\SW_SQLSrv2008R2Ent\1033_ENU_LP\x64\setup\sqlsupport_msi\x64\SqlSupport.msi","PATH NOT FOUND",""

"12:04:09,4824232","setup100.exe","2680","QueryOpen","D:\SW_SQLSrv2008R2Ent\1033_ENU_LP\x64\setup\sqlsupport_msi\SqlSupport.msi","PATH NOT FOUND",""

"12:04:11,0054432","setup100.exe","2680","QueryOpen","D:\SW_SQLSrv2008R2Ent\1033_ENU_LP\x64\setup\sql2008support\x64\SqlSupport.msi","PATH NOT FOUND",""

"12:04:11,0055509","setup100.exe","2680","QueryOpen","D:\SW_SQLSrv2008R2Ent\1033_ENU_LP\x64\setup\sql2008support\SqlSupport.msi","PATH NOT FOUND",""

"12:04:18,7159743","setup100.exe","2680","QueryOpen","D:\SW_SQLSrv2008R2Ent\1033_ENU_LP\x64\setup\sqlsupport_msi\x64\SqlSupport.msi","PATH NOT FOUND",""

"12:04:22,8443950","setup100.exe","2680","QueryOpen","D:\SW_SQLSrv2008R2Ent\1033_ENU_LP\x64\setup\sqlsupport_msi\x64\SqlSupport.msi","PATH NOT FOUND",""

"12:04:22,8445045","setup100.exe","2680","QueryOpen","D:\SW_SQLSrv2008R2Ent\1033_ENU_LP\x64\setup\sqlsupport_msi\SqlSupport.msi","PATH NOT FOUND",""

"12:04:22,9637093","setup100.exe","2680","CreateFile","D:\SW_SQLSrv2008R2Ent\1033_ENU_LP\x64\setup\sqlsupport_msi\SqlSupport.msi","PATH NOT FOUND","Desired Access: Generic Read, Disposition: Open, Options: Synchronous IO Non-Alert, Non-Directory File, Attributes: N, ShareMode: Read, AllocationSize: n/a"

"12:04:22,9919463","setup100.exe","2680","QueryOpen","D:\SW_SQLSrv2008R2Ent\1033_ENU_LP\x64\setup\sqlsupport_msi\SqlSupport.msi","PATH NOT FOUND",""

"12:04:23,4191552","msiexec.exe","5508","QueryOpen","D:\SW_SQLSrv2008R2Ent\1033_ENU_LP\x64\setup\sqlsupport_msi\SqlSupport.msi","PATH NOT FOUND",""

"12:04:23,4192983","msiexec.exe","5508","CreateFile","D:\SW_SQLSrv2008R2Ent\1033_ENU_LP\x64\setup\sqlsupport_msi\SqlSupport.msi","PATH NOT FOUND","Desired Access:

El instalador busca en varias rutas, pero siempre dentro de la rama 1033_ENU_LP que corresponde al idioma inglés.

La primera impresión es que estábamos actualizando con el paquete equivocado y que la instalación original estaba en inglés. Cuando instalamos con el paquete ingles la instalación de las support files se hace correctamente pero al llegar a la comprobación de requisitos nos encontramos con el siguiente fallo que nos evita seguir la instalación.

BlockCrossLanguageUpgrade – Failed

¡La instalación detecta que el idioma de SQL instalado y el del upgrade que queremos hacer son distintos!

A continuación sacamos un listado de las instancias detectadas por el instalador:

  Sql Server 2008 X Database Engine Services 1033 Enterprise Edition 10.1.2531.0

  Sql Server 2008 X Database Engine Services 3082 Enterprise Edition 10.1.2531.0 

  Sql Server 2008 Full-Text Search 1033 Enterprise Edition 10.0.1600.22      

  Sql Server 2008 X Analysis Services 1033 Enterprise Edition 10.1.2531.0       

  Sql Server 2008 X Analysis Services 3082 Enterprise Edition 10.1.2531.0 

  Sql Server 2008 X Reporting Services 1033 Enterprise Edition 10.1.2531.0  

  Sql Server 2008 X Reporting Services 3082 Enterprise Edition 10.1.2531.0    

  Sql Server 2008 Management Tools - Basic 3082 Enterprise Edition 10.1.2531.0       

  Sql Server 2008 Management Tools – Complete 3082 Enterprise Edition 10.1.2531.0   

  Sql Server 2008 Client Tools Connectivity 3082 Enterprise Edition 10.1.2531.0    

  Sql Server 2008 Integration Services 3082 Enterprise Edition 10.1.2531.0 

El instalador detecta que el motor de la base de datos, Analysis Services y Reporting Services de la instancia X están instalados en Español(3082) e Ingles(1033), algo que resulta bastante extraño.

Cuando instalas SQL Server en un idioma que no coincide con el del sistema operativo es normal encontrar estas entradas en el log de SQL Server. Esto indica que la instalación es española y el sistema operativo es inglés.

Para estar dentro de soporte sin reinstalar todo de nuevo la única solución es instalar los MUI(Multilingual User Interface) para el idioma en el que tenemos instalando SQL Server, podemos descargarlos desde aquí http://www.microsoft.com/downloads/en/details.aspx?FamilyID=e9f6f200-cfaf-4516-8e96-e4d4750397ff&displaylang=en. Una vez que se instaló el MUI y se cambió la cuenta con la que se hace la instalación a español SQL se instaló sin ningún problema.

Pablo Gavela López - Microsoft Customer Support Services