-- =================================================================== -- MARS-828: Final Summary Report -- =================================================================== -- Purpose: Complete status of MARS-828 implementation -- Author: Grzegorz Michalski -- Date: 2026-01-28 -- =================================================================== SET SERVEROUTPUT ON SIZE UNLIMITED SET LINESIZE 200 SET PAGESIZE 2000 PROMPT PROMPT ================================================================ PROMPT MARS-828: FINAL IMPLEMENTATION SUMMARY REPORT PROMPT ================================================================ PROMPT -- 1. Package Status PROMPT 1. PACKAGE STATUS PROMPT ================================================================ SELECT object_name, object_type, status, TO_CHAR(last_ddl_time, 'YYYY-MM-DD HH24:MI:SS') as last_modified FROM all_objects WHERE owner = 'CT_MRDS' AND object_name = 'FILE_ARCHIVER' AND object_type IN ('PACKAGE', 'PACKAGE BODY') ORDER BY object_type; SELECT 'Version: ' || CT_MRDS.FILE_ARCHIVER.GET_VERSION() AS info FROM DUAL UNION ALL SELECT 'Build Date: ' || SUBSTR(CT_MRDS.FILE_ARCHIVER.GET_BUILD_INFO(), INSTR(CT_MRDS.FILE_ARCHIVER.GET_BUILD_INFO(), 'Build Date:') + 12, 19) FROM DUAL; -- 2. Package Version Tracking PROMPT PROMPT 2. PACKAGE VERSION TRACKING PROMPT ================================================================ SELECT PACKAGE_NAME, PACKAGE_VERSION, PACKAGE_BUILD_DATE, TO_CHAR(TRACKING_DATE, 'YYYY-MM-DD HH24:MI:SS') AS tracked_on, CT_MRDS.ENV_MANAGER.CHECK_PACKAGE_CHANGES(PACKAGE_OWNER, PACKAGE_NAME) AS status FROM CT_MRDS.A_PACKAGE_VERSION_TRACKING WHERE PACKAGE_OWNER = 'CT_MRDS' AND PACKAGE_NAME = 'FILE_ARCHIVER' ORDER BY TRACKING_DATE DESC FETCH FIRST 1 ROW ONLY; -- 3. Database Schema Changes PROMPT PROMPT 3. DATABASE SCHEMA CHANGES PROMPT ================================================================ PROMPT New columns in A_SOURCE_FILE_CONFIG: SELECT column_name, data_type || CASE WHEN data_type = 'VARCHAR2' THEN '(' || data_length || ')' WHEN data_type = 'NUMBER' THEN '(' || NVL(TO_CHAR(data_precision), '*') || CASE WHEN data_scale IS NOT NULL THEN ',' || data_scale END || ')' ELSE '' END AS data_type, nullable, data_default FROM all_tab_columns WHERE owner = 'CT_MRDS' AND table_name = 'A_SOURCE_FILE_CONFIG' AND column_name IN ('ARCHIVAL_STRATEGY', 'MINIMUM_AGE_MONTHS') ORDER BY column_name; PROMPT PROMPT Constraints: SELECT constraint_name, constraint_type, search_condition FROM all_constraints WHERE owner = 'CT_MRDS' AND table_name = 'A_SOURCE_FILE_CONFIG' AND constraint_name = 'CHK_ARCHIVAL_STRATEGY'; PROMPT PROMPT Triggers: SELECT trigger_name, status, trigger_type, triggering_event FROM all_triggers WHERE owner = 'CT_MRDS' AND trigger_name = 'TRG_BI_A_SRC_FILE_CFG_ARCH_VAL'; -- 4. Archival Strategy Distribution PROMPT PROMPT 4. ARCHIVAL STRATEGY DISTRIBUTION PROMPT ================================================================ SELECT ARCHIVAL_STRATEGY, COUNT(*) AS config_count, ROUND(COUNT(*) * 100.0 / SUM(COUNT(*)) OVER (), 2) AS percentage FROM CT_MRDS.A_SOURCE_FILE_CONFIG WHERE SOURCE_FILE_TYPE = 'INPUT' GROUP BY ARCHIVAL_STRATEGY ORDER BY config_count DESC; -- 5. Strategy Examples by Source PROMPT PROMPT 5. STRATEGY EXAMPLES BY SOURCE PROMPT ================================================================ SELECT A_SOURCE_KEY AS source, ARCHIVAL_STRATEGY AS strategy, MINIMUM_AGE_MONTHS AS min_age, DAYS_FOR_ARCHIVE_THRESHOLD AS threshold_days, COUNT(*) AS tables FROM CT_MRDS.A_SOURCE_FILE_CONFIG WHERE SOURCE_FILE_TYPE = 'INPUT' GROUP BY A_SOURCE_KEY, ARCHIVAL_STRATEGY, MINIMUM_AGE_MONTHS, DAYS_FOR_ARCHIVE_THRESHOLD HAVING A_SOURCE_KEY IN ('C2D', 'LM', 'CSDB', 'TOP', 'CEPH', 'TMS') ORDER BY A_SOURCE_KEY, ARCHIVAL_STRATEGY; -- 6. CSDB Configuration (Special Case - 6 months retention) PROMPT PROMPT 6. CSDB DEBT CONFIGURATION (6-Month Retention Requirement) PROMPT ================================================================ SELECT SOURCE_FILE_ID, TABLE_ID, ARCHIVAL_STRATEGY, MINIMUM_AGE_MONTHS, 'Retains data for ' || MINIMUM_AGE_MONTHS || ' months before archival' AS retention_policy FROM CT_MRDS.A_SOURCE_FILE_CONFIG WHERE A_SOURCE_KEY = 'CSDB' AND SOURCE_FILE_TYPE = 'INPUT' AND TABLE_ID LIKE 'CSDB_DEBT%' ORDER BY TABLE_ID; -- 7. Implementation Testing Summary PROMPT PROMPT 7. IMPLEMENTATION TESTING SUMMARY PROMPT ================================================================ DECLARE vCurrentMonth DATE := TRUNC(SYSDATE, 'MM'); v3MonthsAgo DATE := ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -3); v6MonthsAgo DATE := ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -6); v30DaysAgo TIMESTAMP := SYSTIMESTAMP - INTERVAL '30' DAY; BEGIN DBMS_OUTPUT.PUT_LINE('Reference Dates for Strategy Testing:'); DBMS_OUTPUT.PUT_LINE('--------------------------------------'); DBMS_OUTPUT.PUT_LINE('Current Month Start: ' || TO_CHAR(vCurrentMonth, 'YYYY-MM-DD')); DBMS_OUTPUT.PUT_LINE('3 Months Ago: ' || TO_CHAR(v3MonthsAgo, 'YYYY-MM-DD')); DBMS_OUTPUT.PUT_LINE('6 Months Ago: ' || TO_CHAR(v6MonthsAgo, 'YYYY-MM-DD')); DBMS_OUTPUT.PUT_LINE('30 Days Ago: ' || TO_CHAR(v30DaysAgo, 'YYYY-MM-DD HH24:MI:SS')); DBMS_OUTPUT.PUT_LINE(''); DBMS_OUTPUT.PUT_LINE('WHERE Clause Logic by Strategy:'); DBMS_OUTPUT.PUT_LINE('--------------------------------------'); DBMS_OUTPUT.PUT_LINE('1. THRESHOLD_BASED:'); DBMS_OUTPUT.PUT_LINE(' extract(day from (systimestamp - workflow_start)) > DAYS_FOR_ARCHIVE_THRESHOLD'); DBMS_OUTPUT.PUT_LINE(' Example: Data older than 30 days archived'); DBMS_OUTPUT.PUT_LINE(''); DBMS_OUTPUT.PUT_LINE('2. CURRENT_MONTH_ONLY:'); DBMS_OUTPUT.PUT_LINE(' TRUNC(workflow_start, ''MM'') < TRUNC(SYSDATE, ''MM'')'); DBMS_OUTPUT.PUT_LINE(' Example: All data from previous months archived'); DBMS_OUTPUT.PUT_LINE(' Current month data (' || TO_CHAR(vCurrentMonth, 'YYYY-MM') || ') retained'); DBMS_OUTPUT.PUT_LINE(''); DBMS_OUTPUT.PUT_LINE('3. MINIMUM_AGE_MONTHS (CSDB = 6 months):'); DBMS_OUTPUT.PUT_LINE(' workflow_start < ADD_MONTHS(TRUNC(SYSDATE, ''MM''), -6)'); DBMS_OUTPUT.PUT_LINE(' Example: Data before ' || TO_CHAR(v6MonthsAgo, 'YYYY-MM-DD') || ' archived'); DBMS_OUTPUT.PUT_LINE(' Last 6 months retained'); DBMS_OUTPUT.PUT_LINE(''); DBMS_OUTPUT.PUT_LINE('4. HYBRID (TOP = current month + 3 months):'); DBMS_OUTPUT.PUT_LINE(' TRUNC(workflow_start, ''MM'') < TRUNC(SYSDATE, ''MM'')'); DBMS_OUTPUT.PUT_LINE(' AND workflow_start < ADD_MONTHS(TRUNC(SYSDATE, ''MM''), -3)'); DBMS_OUTPUT.PUT_LINE(' Example: Previous months AND before ' || TO_CHAR(v3MonthsAgo, 'YYYY-MM-DD')); DBMS_OUTPUT.PUT_LINE(' Both conditions must be met'); END; / -- 8. Business Requirements Validation PROMPT PROMPT 8. BUSINESS REQUIREMENTS VALIDATION PROMPT ================================================================ DECLARE vCsdbCount NUMBER; vLmCount NUMBER; vTopCount NUMBER; BEGIN -- Requirement 1: CSDB 6-month retention SELECT COUNT(*) INTO vCsdbCount FROM CT_MRDS.A_SOURCE_FILE_CONFIG WHERE A_SOURCE_KEY = 'CSDB' AND TABLE_ID LIKE 'CSDB_DEBT%' AND ARCHIVAL_STRATEGY = 'MINIMUM_AGE_MONTHS' AND MINIMUM_AGE_MONTHS = 6; -- Requirement 2: LM/TOP current month only SELECT COUNT(*) INTO vLmCount FROM CT_MRDS.A_SOURCE_FILE_CONFIG WHERE A_SOURCE_KEY IN ('LM', 'TOP') AND ARCHIVAL_STRATEGY IN ('CURRENT_MONTH_ONLY', 'HYBRID'); DBMS_OUTPUT.PUT_LINE('Requirement 1: CSDB 6-month retention'); DBMS_OUTPUT.PUT_LINE(' Status: ' || CASE WHEN vCsdbCount >= 4 THEN 'PASS ✓' ELSE 'FAIL ✗' END); DBMS_OUTPUT.PUT_LINE(' Configured tables: ' || vCsdbCount || ' (expected: 4)'); DBMS_OUTPUT.PUT_LINE(''); DBMS_OUTPUT.PUT_LINE('Requirement 2: Non-current month archival (LM/TOP)'); DBMS_OUTPUT.PUT_LINE(' Status: ' || CASE WHEN vLmCount > 0 THEN 'PASS ✓' ELSE 'FAIL ✗' END); DBMS_OUTPUT.PUT_LINE(' Configured tables: ' || vLmCount); DBMS_OUTPUT.PUT_LINE(''); DBMS_OUTPUT.PUT_LINE('Overall Implementation: ' || CASE WHEN vCsdbCount >= 4 AND vLmCount > 0 THEN 'SUCCESS ✓✓✓' ELSE 'INCOMPLETE' END); END; / PROMPT PROMPT ================================================================ PROMPT MARS-828: IMPLEMENTATION COMPLETE PROMPT ================================================================ PROMPT PROMPT Summary of Changes: PROMPT - FILE_ARCHIVER upgraded to v3.0.0 PROMPT - Added ARCHIVAL_STRATEGY column (4 strategies supported) PROMPT - Added MINIMUM_AGE_MONTHS column for age-based retention PROMPT - Created validation trigger (TRG_BI_A_SRC_FILE_CFG_ARCH_VAL) PROMPT - Implemented GET_ARCHIVAL_WHERE_CLAUSE private function PROMPT - Updated ARCHIVE_TABLE_DATA to use strategy-based filtering PROMPT - Updated GATHER_TABLE_STAT to use strategy-based statistics PROMPT PROMPT Business Requirements Met: PROMPT ✓ CSDB data retention: 6 months (MINIMUM_AGE_MONTHS strategy) PROMPT ✓ General archival: Current month only (CURRENT_MONTH_ONLY/HYBRID) PROMPT ✓ Backward compatibility: THRESHOLD_BASED (existing behavior) PROMPT PROMPT Files Deployed: PROMPT - 01_MARS_828_install_add_archival_strategy_columns.sql PROMPT - 02_MARS_828_install_archival_strategy_trigger.sql PROMPT - 03_MARS_828_install_CT_MRDS_FILE_ARCHIVER_SPEC.sql PROMPT - 04_MARS_828_install_CT_MRDS_FILE_ARCHIVER_BODY.sql PROMPT - 05_MARS_828_verify_installation.sql PROMPT - 06_MARS_828_track_version.sql PROMPT - 07_MARS_828_verify_packages_version.sql PROMPT PROMPT Rollback Available: rollback_mars828.sql PROMPT ================================================================