none
cambiar collation a nivel de servidor en sql server 2005

    Pregunta

  • hola, tengo el siguiente problema.... estoy cambiando la maquina de mi servidor sql, pero al instalarlo me quedo con el collation "Latin1_General_CI_AS", siendo la correcta "SQL_Latin1_General_CP1_CI_AS"

    he intentado cambiarla con el comando

    e:\SQL\cd1\setup.exe /qb INSTANCENAME=MSSQLSERVER REINSTALL=SQL_Engine REBUILDDATABASE=1 SAPWD=12345678 SQLCOLLATION=SQL_Latin1_General_CP1_CI_AS

    aparece el cuadro de dialogo de instalacion y se cierra sin cambios aparentes, luego entro al managment studio y verifico por las propiedades del servidor y esta la misma


    se presenta este error cuando intento asignar las propiedades a los usuarios nuevos

    TITLE: Microsoft SQL Server Management Studio
    ------------------------------

    Failed to retrieve data for this request. (Microsoft.SqlServer.SmoEnum)

    For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&LinkId=20476

    ------------------------------
    ADDITIONAL INFORMATION:

    An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)

    ------------------------------

    Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Latin1_General_CI_AS" in the UNION operation. (Microsoft SQL Server, Error: 468)

    For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=09.00.3042&EvtSrc=MSSQLServer&EvtID=468&LinkId=20476

    ------------------------------


    gracias  por la ayuda


    Ricardo
    jueves, 23 de julio de 2009 19:23

Respuestas

  • Hola.

    Lo cierto es que esa es la sentencia, pero además de eso has de eliminar (previa copia) todos los usuarios y todas las bases de datos de usuario antes de realizar la operación para que tome efecto. En resumen, casi como reinstalar. Antes de eso, prueba a reiniciar el servicio para que carguen de nuevo las bases de datos de sistema. 

    Te dejo un link con los pasos a realizar que te ahorrarían la reinstalación, aunque si estás empezando a migrar, lo que menos tiempo va a llevarte va a ser reintalar la instancia.


    Si te ha pillado con las bases de datos y usuarios ya cargados, tendrías que hacer detach de las bases de datos de usuarios, borrar los usuarios (cuenta con sp_help_revlogin para crear un script antes).

    Suerte,

    Alberto López Grande.
    jueves, 23 de julio de 2009 19:44
    Moderador
  • Primero que nada, en lugar de cambiar el collation default de una instancia de SQL Server, usted siempre puede especificar una collation predeterminada para cada nueva base de datos que crea. De esta forma, no importa cuál sea el collation del servidor, sus bases siempre tendrán el collation que usted prefiera.

    Ahora bien, si usted decidió modificar el collation de todo el servidor, ha usted hecho la secuencia correcta? Debe hacerse así:

    1. Asegurarse de que se dispone de toda la información o scripts necesarios para volver a crear las bases de datos de usuario y todos los objetos contenidos en ellas.

    2. Exportar todos los datos mediante una herramienta como BCP.

    3. Quitar todas las bases de datos de usuario.

    4. Volver a generar la base de datos maestra especificando la nueva intercalación en la propiedad SQLCOLLATION del comando setup. Por ejemplo:

    Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=InstanceName
    /SQLSYSADMINACCOUNTS=accounts /[ SAPWD= StrongPassword ]
    /SQLCOLLATION=CollationName

    5. Crear todas las bases de datos y todos los objetos contenidos en ellas.

    6. Importar todos los datos.

    FUENTE: Libros en pantalla de SQL Server 2008 - Establecer y cambiar la intercalación de servidor
    http://msdn.microsoft.com/es-es/library/ms179254.aspx


    Gustavo Larriera, MVP --- Este mensaje se proporciona tal como es, sin garantías de ninguna clase. ---
    • Marcado como respuesta Ricardo Cabra jueves, 23 de julio de 2009 19:50
    jueves, 23 de julio de 2009 19:49
    Moderador

Todas las respuestas

  • Hola.

    Lo cierto es que esa es la sentencia, pero además de eso has de eliminar (previa copia) todos los usuarios y todas las bases de datos de usuario antes de realizar la operación para que tome efecto. En resumen, casi como reinstalar. Antes de eso, prueba a reiniciar el servicio para que carguen de nuevo las bases de datos de sistema. 

    Te dejo un link con los pasos a realizar que te ahorrarían la reinstalación, aunque si estás empezando a migrar, lo que menos tiempo va a llevarte va a ser reintalar la instancia.


    Si te ha pillado con las bases de datos y usuarios ya cargados, tendrías que hacer detach de las bases de datos de usuarios, borrar los usuarios (cuenta con sp_help_revlogin para crear un script antes).

    Suerte,

    Alberto López Grande.
    jueves, 23 de julio de 2009 19:44
    Moderador
  • Primero que nada, en lugar de cambiar el collation default de una instancia de SQL Server, usted siempre puede especificar una collation predeterminada para cada nueva base de datos que crea. De esta forma, no importa cuál sea el collation del servidor, sus bases siempre tendrán el collation que usted prefiera.

    Ahora bien, si usted decidió modificar el collation de todo el servidor, ha usted hecho la secuencia correcta? Debe hacerse así:

    1. Asegurarse de que se dispone de toda la información o scripts necesarios para volver a crear las bases de datos de usuario y todos los objetos contenidos en ellas.

    2. Exportar todos los datos mediante una herramienta como BCP.

    3. Quitar todas las bases de datos de usuario.

    4. Volver a generar la base de datos maestra especificando la nueva intercalación en la propiedad SQLCOLLATION del comando setup. Por ejemplo:

    Setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=InstanceName
    /SQLSYSADMINACCOUNTS=accounts /[ SAPWD= StrongPassword ]
    /SQLCOLLATION=CollationName

    5. Crear todas las bases de datos y todos los objetos contenidos en ellas.

    6. Importar todos los datos.

    FUENTE: Libros en pantalla de SQL Server 2008 - Establecer y cambiar la intercalación de servidor
    http://msdn.microsoft.com/es-es/library/ms179254.aspx


    Gustavo Larriera, MVP --- Este mensaje se proporciona tal como es, sin garantías de ninguna clase. ---
    • Marcado como respuesta Ricardo Cabra jueves, 23 de julio de 2009 19:50
    jueves, 23 de julio de 2009 19:49
    Moderador
  • Gustavo, en mi base de datos tenia el collation correcto, pero me preocupo fue cuando me aparecio el error que referencie antes, previniendo errores futuros tome la decision de unificar el collation del servidor con el de mi base de datos.
    Ricardo
    jueves, 23 de julio de 2009 19:52
  • Hola.

    Gustavo, con el debido respeto, hay una diferencia significativa. La intercalación por defecto del servidor marca la intercalación de tempdb, que si es diferente a la intercalación de las bases de datos puede dificultar el trabajo con las bases de datos de usuario.

    Obliga en unos casos a tomar unas precauciones que no serían necesarias de ser la misma (indicarle el collation al crear tablas temporales) y en otras (las menos) genera problemas de una más compleja solución, como que arroje errores una consulta que, sin usar tablas temporales sí, por el plan de ejecución empleado se use tempdb para almacenar worktables. Me ha ocurrido alguna vez y es para tirarse de los pelos.


    Alberto López Grande.
    jueves, 23 de julio de 2009 19:54
    Moderador
  • Estoy de acuerdo en que cuando el collation de TempDb es diferente al de la base de datos, requiere esfuerzo extra al crear objetos temporales (por ejemplo, especificar el collation de las columnas de las tablas temporales). Por eso es que definir el collation de la instancia requiere planificación y no debe hacerse a la ligera.

    La experta Kimberly Tripp escribió acerca del tema:

    Changing Database Collation and dealing with TempDB Objects
    http://www.sqlskills.com/blogs/Kimberly/post/Changing-Database-Collation-and-dealing-with-TempDB-Objects.aspx


    Gustavo Larriera, MVP --- Este mensaje se proporciona tal como es, sin garantías de ninguna clase. ---
    jueves, 23 de julio de 2009 20:07
    Moderador
  • Tengo un problema similar, pero leyendo sus aportaciones veo que se soluciona al "indicarle el collation al crear tablas temporales", pero como hago esto último. Gracias.

    sábado, 12 de febrero de 2011 0:09
  • Hola.

    Sólo has de indicar la intercalación, como si de una tabla "normal" se tratara, para los campos de cadena. Te invito a iniciar un nuevo hilo en el que expongas con detalle la problemática que tienes. 


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/

    sábado, 12 de febrero de 2011 14:03
    Moderador