Migrar Collate Base de datos

    Nota: Antes de empezar por favor detener todos los servicios que le apunten a la base de datos y sacar un backup de la base de datos.


    Recursos necesarios

    En la Knowledge base de Aranda puede descargar el paquete necesario para llevar a cabo la migración.

    Carpeta con collatemigr con collatemigr.exe Ejecutable que modifica el collate, data/tables_collation Collate especial para algunas tablas de adm

    • Verifique que la base de datos se encuentra en un collate diferente a SQL_Latin1_General_CP1_CI_AI. Clic derecho sobre la base de datos > propiedades
    • Verifique que la base de datos se encuentre en la versión 9.5.13

    • Haciendo uso del sqlpackage.exe verifique que la base de datos no tiene diferencias a nivel de schema. Para información adicional

    • Si se presentan diferencias actualice el schema de la base de datos. Si no puede actualizar el schema, detenga el proceso y contacte a soporte.

    • Ejecute el siguiente script en la base de datos

        SELECT
            id,
            MIN(id) OVER(PARTITION BY product_id, version ORDER BY id) min_id,
            version
        INTO #SOFTWARE_IDS
        FROM (
                SELECT
                        id,
                        product_id,
                        SUBSTRING(version, 1, PATINDEX('%[abcdefghijklmniopqrstuvwxyzz0123456789][^0123456789./()_-]%', version)) version
                FROM AAM_SOFTWARE_VERSION
                WHERE version LIKE '%[^abcdefghijklmniopqrstuvwxyz0-9./ ()_-]%'
                UNION
                SELECT
                        id,
                        product_id,
                        version
                FROM AAM_SOFTWARE_VERSION
                WHERE version in (
                        SELECT
                            SUBSTRING(version, 1,PATINDEX('%[abcdefghijklmniopqrstuvwxyzz0123456789][^0123456789./ ()_-]%', version)) version
                        FROM AAM_SOFTWARE_VERSION
                        WHERE version LIKE '%[^abcdefghijklmniopqrstuvwxyz0-9./ ()_-]%')
        ) t;
      
        UPDATE ds SET
                ds.software_id = si.min_id
        FROM AAM_DEVICE_SOFTWARE ds
        JOIN #SOFTWARE_IDS si ON si.id = ds.software_id;
      
        UPDATE fv SET
                fv.software_id = si.min_id
        FROM AAM_FILE_VERSION fv
        JOIN #SOFTWARE_IDS si ON si.id = fv.software_id;
      
        UPDATE sv SET
                sv.parent_id = si.min_id
        FROM AAM_SOFTWARE_VERSION sv
        JOIN #SOFTWARE_IDS si ON si.id = sv.product_id and sv.parent_id is not null;
      
        UPDATE fr SET
                fr.software_id = si.min_id
        FROM ASM_FILE_RULE fr
        JOIN #SOFTWARE_IDS si ON si.id = fr.software_id;
      
        UPDATE ls SET
                ls.software_id = si.min_id
        FROM ASM_LICENSE_SOFTWARE ls
        JOIN #SOFTWARE_IDS si ON si.id = ls.software_id;
      
        UPDATE cl SET
                cl.software_version_id = si.min_id
        FROM ASM_SOFT_USAGE_CONFIG_LIST cl
        JOIN #SOFTWARE_IDS si ON si.id = cl.software_version_id;
      
        UPDATE sc SET
                sc.software_id = si.min_id
        FROM ASM_SOFTWARE_CATEGORY sc
        JOIN #SOFTWARE_IDS si ON si.id = sc.software_id;
      
        UPDATE fs SET
                fs.software_version_id = si.min_id
        FROM ASM_SOFTWARE_FILE_SUGGES fs
        JOIN #SOFTWARE_IDS si ON si.id = fs.software_version_id;
      
        UPDATE sg SET
                sg.software_id = si.min_id
        FROM ASM_SOFTWARE_GROUP sg
        JOIN #SOFTWARE_IDS si ON si.id = sg.software_id;
      
        UPDATE sr SET
                sr.software_id = si.min_id
        FROM ASM_SOFTWARE_RULE sr
        JOIN #SOFTWARE_IDS si ON si.id = sr.software_id;
      
        DELETE sv
        FROM AAM_SOFTWARE_VERSION sv
        JOIN #SOFTWARE_IDS si ON si.id = sv.id
        WHERE sv.version LIKE '%[^abcdefghijklmniopqrstuvwxyz0-9./ ()_-]%'AND sv.id > si.min_id;
      
        UPDATE sv
        SET sv.version=si.version
        FROM AAM_SOFTWARE_VERSION sv
        JOIN #SOFTWARE_IDS si ON si.id = sv.id
        WHERE sv.version LIKE '%[^abcdefghijklmniopqrstuvwxyz0-9./ ()_-]%'AND sv.id = si.min_id;
        DROP TABLE #SOFTWARE_IDS
      
      
      
    • Exporte un bacpac de la base de datos, este proceso puede demorar dependiendo de la cantidad de datos. Clic derecho sobre la base de datos > task > exportar data-tier

    • Ejecute desde una consola de Windows la siguiente línea, desde la ubicación del ejecutable collatemigr
      collatemigr -file “[ruta]\ADMAranda.bacpac”
      Ruta= ubicación del bacpac

    • Finalizado el proceso importe nuevamente el bacpac.
      Sugerencia: puede importar la base de datos con un nombre diferente al original si desea conservar un respaldo adicional

    • Terminada la importación de la base de datos, realice una nueva importación, comparando la información, usando Sqlpackage.exe y verifique que no existan diferencias. En caso contrario, actualice las diferencias usando Sqlpackage.exe, previo a realizar la actualización de versión en la base de datos.

    • Una vez no se tengan diferencias continúe con la actualización de la base de datos