ES
Español
English
Português
    Depuración del historial de uso de software

    ¿Qué es la depuración del historial de uso de software?

    ADM registra de forma continua qué aplicaciones utilizan los dispositivos administrados. Ese registro se acumula en tres tablas de historial que crecen de manera indefinida: el detalle diario y sus dos consolidados, diario y mensual.

    La depuración es el proceso que elimina ese historial hasta una fecha determinada, conservando únicamente la información más reciente. El procedimiento dbo.PRC_ASM_CLEAN_SOFT_USE ejecuta esa limpieza por lotes de hasta 5.000 registros por tabla, de modo que la operación no bloquee la base de datos.

    ⚐ Nota: Este procedimiento requiere ejecutar sentencias T-SQL sobre la base de datos. Está dirigido al administrador de la plataforma o al personal de soporte técnico con acceso a SQL Server Management Studio.


    ¿Para qué se utiliza?

    • Liberar espacio de almacenamiento en la base de datos.
    • Reducir los tiempos de respuesta de las consultas y reportes de uso de software.
    • Controlar el crecimiento sostenido de las tablas de historial.


    ¿Qué información se elimina?

    Cada fecha de corte es independiente y elimina todo lo anterior a ella. La fecha indicada y los registros posteriores se conservan.

    Parámetro Tabla Información que elimina Efecto para el usuario
    @i_detail dbo.ASM_SOFTWARE_USAGE_DETAIL Detalle diario de uso El desglose por ventana deja de estar disponible
    @i_day dbo.ASM_SOFTWARE_USAGE_DAY Consolidado diario Los reportes de uso por día dejan de mostrar ese periodo
    @i_month dbo.ASM_SOFTWARE_USAGE_MONTH Consolidado mensual (vía ADW_DIM_DATE) Los reportes de uso por mes dejan de mostrar ese periodo

    Habitualmente se asigna un periodo de retención menor al detalle que a los consolidados, porque el desglose ocupa mucho más espacio y se consulta con menos frecuencia.

    El procedimiento no interviene la tabla heredada dbo.ASM_SOFTWARE_USAGE; su depuración se realiza aparte, en el paso 5.

    ⚠ Advertencia: La eliminación es definitiva. La información depurada solo se recupera restaurando un respaldo de la base de datos.


    ¿Qué se requiere antes de comenzar?

    • Versión de ADM 9.5.43 o superior. Las versiones 9.5.33 y anteriores utilizan una estructura distinta y no deben depurarse con este procedimiento.
    • Respaldo vigente de la base de datos.
    • Ventana de mantenimiento, dado que el proceso genera carga sobre el motor.
    • Permisos de ejecución sobre el procedimiento y de eliminación sobre las tablas involucradas.

    ⚐ Nota: Ejecute todos los pasos en la misma ventana de consulta. Las variables se declaran una sola vez al inicio; si abre una pestaña nueva, el motor responde el mensaje Must declare the scalar variable.


    ¿Cómo se ejecuta la depuración?

    1. Confirme la versión de la base de datos. Si corresponde a 9.5.33 o anterior, no continúe y consulte las consideraciones finales.

    SELECT * FROM dbo.VERSION_DATABASE;
    

    2. Defina las fechas de corte y consulte cuántos registros resultan elegibles. Esta verificación es de solo lectura y no modifica información.

    ⚐ Nota: Las fechas de corte se ajustan según el requerimiento, con formato ‘AAAA-MM-DD’. Ejemplo: ‘2026-01-01’.

    SET NOCOUNT ON;
    
    -- Configuración: fechas de corte (ajustar según requerimiento)
    DECLARE @i_detail date = 'AAAA-MM-DD'; -- ASM_SOFTWARE_USAGE_DETAIL
    DECLARE @i_day date = 'AAAA-MM-DD'; -- ASM_SOFTWARE_USAGE_DAY
    DECLARE @i_month date = 'AAAA-MM-DD'; -- ASM_SOFTWARE_USAGE_MONTH
    
    DECLARE @detail_key int = dbo.FUN_ADW_DATE_KEY(@i_detail);
    DECLARE @day_key int = dbo.FUN_ADW_DATE_KEY(@i_day);
    DECLARE @month_key int = dbo.FUN_ADW_DATE_KEY(@i_month);
    
    -- Verificación previa (solo lectura)
    SELECT 'ASM_SOFTWARE_USAGE_DETAIL' AS table_name, COUNT_BIG(*) AS eligible_rows
    FROM dbo.ASM_SOFTWARE_USAGE_DETAIL
    WHERE date_id < @detail_key;
    
    SELECT 'ASM_SOFTWARE_USAGE_DAY' AS table_name, COUNT_BIG(*) AS eligible_rows
    FROM dbo.ASM_SOFTWARE_USAGE_DAY
    WHERE date_id < @day_key;
    
    SELECT 'ASM_SOFTWARE_USAGE_MONTH' AS table_name, COUNT_BIG(*) AS eligible_rows
    FROM dbo.ASM_SOFTWARE_USAGE_MONTH AS su
    WHERE EXISTS (
        SELECT 1
        FROM dbo.ADW_DIM_DATE AS dd
        WHERE dd.[year] = su.[year]
          AND dd.[month] = su.[month]
          AND dd.id < @month_key
    );
    

    Ejemplo: Para conservar el detalle del último año y los consolidados de los últimos tres, asigne @i_detail = ‘2026-01-01’, @i_day = ‘2024-01-01’ y @i_month = ‘2024-01-01’.

    3. Ejecute la depuración.

    EXEC dbo.PRC_ASM_CLEAN_SOFT_USE
        @i_detail = @i_detail,
        @i_day = @i_day,
        @i_month = @i_month;
    

    4. Valide el resultado repitiendo el conteo del paso 2. Las tres consultas deben devolver cero. Consulte además los rangos conservados.

    -- Repetir el conteo previo; se espera 0 en las tres tablas
    SELECT 'ASM_SOFTWARE_USAGE_DETAIL' AS table_name, COUNT_BIG(*) AS eligible_rows
    FROM dbo.ASM_SOFTWARE_USAGE_DETAIL
    WHERE date_id < @detail_key;
    
    SELECT 'ASM_SOFTWARE_USAGE_DAY' AS table_name, COUNT_BIG(*) AS eligible_rows
    FROM dbo.ASM_SOFTWARE_USAGE_DAY
    WHERE date_id < @day_key;
    
    SELECT 'ASM_SOFTWARE_USAGE_MONTH' AS table_name, COUNT_BIG(*) AS eligible_rows
    FROM dbo.ASM_SOFTWARE_USAGE_MONTH AS su
    WHERE EXISTS (
        SELECT 1
        FROM dbo.ADW_DIM_DATE AS dd
        WHERE dd.[year] = su.[year]
          AND dd.[month] = su.[month]
          AND dd.id < @month_key
    );
    
    -- Rangos conservados, para referencia
    SELECT MIN(date_id) AS min_date_id, MAX(date_id) AS max_date_id, COUNT_BIG(*) AS total_rows
    FROM dbo.ASM_SOFTWARE_USAGE_DETAIL;
    
    SELECT MIN(date_id) AS min_date_id, MAX(date_id) AS max_date_id, COUNT_BIG(*) AS total_rows
    FROM dbo.ASM_SOFTWARE_USAGE_DAY;
    

    5. Depure la tabla heredada dbo.ASM_SOFTWARE_USAGE, únicamente si la base fue actualizada desde la versión 9.5.33 o anteriores. Este bloque elimina la totalidad de los registros, sin fecha de corte, también por lotes de 5.000.

    ⚠ Advertencia: Ejecute este paso solo tras confirmar en el paso 1 que la base opera en versión 9.5.43 o superior.

    -- Verificación previa (solo lectura)
    SELECT COUNT_BIG(*) AS total_rows FROM dbo.ASM_SOFTWARE_USAGE;
    
    -- Eliminación por lotes de 5.000 registros (mismo patrón que el PRC documentado)
    WHILE 1 = 1
    BEGIN
        DELETE TOP (5000) FROM dbo.ASM_SOFTWARE_USAGE;
        IF @@ROWCOUNT = 0 BREAK;
    END;
    
    -- Validación posterior (se espera 0)
    SELECT COUNT_BIG(*) AS total_rows FROM dbo.ASM_SOFTWARE_USAGE;
    


    ¿Qué significa el mensaje “(0 rows affected)”?

    Este mensaje indica que no existen registros anteriores a la fecha indicada, no que el procedimiento haya fallado. Es el resultado esperado cuando la depuración ya se ejecutó previamente, o cuando las fechas de corte son más antiguas que el historial almacenado.

    De igual forma, los avisos “(1 row affected)” intercalados corresponden a asignaciones internas de variables y no representan eliminaciones.

    Para confirmar el comportamiento, consulte el conteo del paso 2: si devuelve cero antes de ejecutar la depuración, no hay información elegible.


    ¿Qué ocurre en bases actualizadas desde versiones anteriores?

    Las bases actualizadas desde la versión 9.5.33 o anteriores conservan historial en la tabla dbo.ASM_SOFTWARE_USAGE, que el procedimiento actual ya no utiliza ni depura. Ese contenido queda inmovilizado y solo ocupa espacio.

    Al tratarse de una versión en desuso, esos registros se eliminan directamente, sin migrarlos, mediante el paso 5 del procedimiento.


    ¿Qué consideraciones aplican a las versiones 9.5.33 y anteriores?

    Estas versiones no utilizan la tabla de detalle actual: la información se basa en ASM_SOFTWARE_USAGE, y los consolidados se calculan sobre AFW_DIM_DATE en lugar de ADW_DIM_DATE. Además, presentan un defecto conocido en el control del ciclo de eliminación mediante @@ROWCOUNT, que puede impedir las limpiezas diaria y mensual.

    En estos casos se recomienda actualizar la plataforma antes de depurar, en lugar de sustituir el procedimiento.