PROJECT SERVER 213. PROBLEMAS DE ACTUALIZACION SI EL LENGUAJE DE SQL SERVER NO ES INGLES.
Buenas,
Este post de Brian nos pareció muy interesante en su momento, y por unos motivos u otros no hemos sido capaces de encontrar un momento para traducirlo a castellano en nuestro blog. Se trata de una situación en la cual nos podemos encontrar perfectamente, y se referencia el excelente trabajo que llevó a cabo nuestra colega Diana Balan para ayudar a solventarlo.
El artículo original se puede encontrar aquí:
“Gracias a Diana Balan por todo el esfuerzo empleado en este caso, donde los scripts de PowerShell de actualización para realizar una migración de Project Server 2010 a Project Server 2013 no terminaban correctamente. Tenemos una solicitud de fix para solventar esto (trataremos de actualizar esta información cuando esto ocurra), y también un workaround.
El problema sucede al ejecutar el comando ConvertTo-SPProjectDatabase, y fallará después de un lapso de tiempo, mostrando un mensaje como el siguiente:
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
ConvertTo-SPProjectDatabase : Action 15.0.10.0 of Microsoft.Office.Project.Server.Upgrade.ReportingDatabaseSequence failed. At line:1 char:1 + ConvertTo-SPProjectDatabase -WebApplication https://<servername> -Dbserver bris … + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (Microsoft.Offic…baseImplementor:ConvertToProjec…baseImplementor) [ConvertTo-SPProjectDatabase], SPU pgradeException + FullyQualifiedErrorId : Microsoft.Office.Project.Server.Cmdlet.PSCmdletConvertToProjectServiceDatabase
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Esto ocurre si hemos editado el lenguaje SQL del Usuario que está ejecutando el comando PowerShell en el siguiente cuadro de diálogo en SQL Server Management Studio (o que lo hayamos configurado nosotros en SQL )
En el ejemplo mostrado se ha configurado el idioma a Alemán (German). Esto aparece también en un mensaje de error en los logs ULS, el principio del cual indica lo siguiente:
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
System.Data.SqlClient.SqlException (0x80131904): Bei der Konvertierung eines varchar-Datentyps in einen datetime-Datentyp liegt der Wert außerhalb des gültigen Bereichs. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
El cual podemos traducir, pero básicamente nos indica que “algo” relacionado con el formato de tiempo / fecha está causando el problema. Lo peliagudo de la situación es que usando este idioma (y otros) configurará el formato ISO de fecha que configura la hora al igual que la fecha. Podemos confirmar esto capturando una traza de SQL Server con el Profiler, de tal modo que veremos la referencia a:
WHILE @CurrentTimeByDay <= ‘2149-12-31’
Que es la causa de la excepción-
El workaround es sencillo, y consiste en modificar el lenguaje a inglés para el usuario que ejecute el comando no reciba este error.
A continuación, se muestran los mensajes de error en distintos idiomas, para que los motores de búsqueda puedan indexar este contenido para futuras búsquedas. Recordemos estos mensajes de error son los relacionados con los idiomas soportados de Project Server 2013. Si usáramos otro, es muy probable no apareciera aquí:
- German – Bei der Konvertierung eines varchar-Datentyps in einen datetime-Datentyp liegt der Wert außerhalb des gültigen Bereichs.
- French – La conversion d’un type de données varchar en type de données datetime a créé une valeur hors limites.
- Spanish – La conversión del tipo de datos varchar en datetime produjo un valor fuera de intervalo.
- Portuguese – A conversão de um tipo de dados varchar num tipo de dados datetime resultou num valor fora do âmbito.
- Russian – Преобразование типа данных varchar в тип данных datetime привело к выходу значения за пределы диапазона.
- Italian – La conversione di un tipo di dati varchar in datetime ha generato un valore non compreso nell’intervallo dei valori consentiti.
- Danish – Konverteringen af en varchar-datatype til en datetime-datatype resulterede i en værdi, der ligger uden for intervallet.
- Dutch – De conversie van varchar-gegevenstype naar een datetime-gegevenstype heeft geresulteerd in een waarde buiten het bereik.
- Greek – Η μετατροπή ενός τύπου δεδομένων varchar σε τύπο δεδομένων datetime είχε ως αποτέλεσμα μια τιμή εκτός περιοχής.
- Polish – Konwersja typu danych varchar na typ danych datetime spowodowała utworzenie wartości leżącej poza zakresem.
- Finnish – Tietotyypin varchar muuntaminen tietotyypiksi datetime antoi tulokseksi arvon, joka ei ole alueella.
- Czech – Převod datového typu varchar na datový typ datetime vrátil hodnotu mimo rozsah.
- Turkish – varchar veri türünden bir datetime veri türüne dönüştürme aralık dışı bir değerle sonuçlandı.
- Algunos idiomas fallaron, pero mostraron el error en inglés: noruego y árabe. La conversión de varchar a datetime dió un resultado fuera de rango.
- Sueco, japonés, koreano, chino y húngaro funcionaron bien.
>>>>>>>>>>>>>>>>>>>>>
Reiterar el agradecimiento a Diana Balan por su estupendo trabajo, y esperamos os resulte de interés y útil.
Saludos
Jorge Puig