diff --git a/MARS_Packages/REL02_POST/MARS-956/01_MARS_956_export_c2d_mpec_data.sql b/MARS_Packages/REL02_POST/MARS-956/01_MARS_956_export_c2d_mpec_data.sql new file mode 100644 index 0000000..9133189 --- /dev/null +++ b/MARS_Packages/REL02_POST/MARS-956/01_MARS_956_export_c2d_mpec_data.sql @@ -0,0 +1,164 @@ +-- =================================================================== +-- MARS-956: Export Historical C2D MPEC Data to DATA Bucket +-- =================================================================== +-- Purpose: One-time export of historical C2D MPEC delta data from +-- OU_C2D operational database to DATA bucket as CSV files +-- Method: Using DATA_EXPORTER.EXPORT_TABLE_DATA_BY_DATE procedure +-- Target: DATA bucket with folder structure ODS/C2D/{TABLE_NAME} +-- Format: CSV files for complete historical data access +-- =================================================================== + +PROMPT ========================================================================= +PROMPT MARS-956: Starting C2D MPEC Historical Data Export +PROMPT ========================================================================= +PROMPT Export Strategy: +PROMPT - Source: OU_C2D schema tables (operational database) +PROMPT - Target: DATA bucket as CSV files +PROMPT - Method: DATA_EXPORTER.EXPORT_TABLE_DATA_BY_DATE +PROMPT - Structure: Must match ODS template tables +PROMPT ========================================================================= + +-- Log export start +INSERT INTO CT_MRDS.A_PROCESS_LOG (PACKAGE_NAME, PROCEDURE_NAME, EVENT_TYPE, EVENT_MESSAGE, PROCEDURE_PARAMETERS) +VALUES ('MARS-956', 'EXPORT_C2D_MPEC_DATA', 'INFO', 'Starting historical C2D MPEC data export', + 'Tables: MPEC_ADMIN, MPEC_CONTENT, MPEC_CONTENT_CRITERION'); +COMMIT; + +-- =================================================================== +-- TABLE 1: OU_C2D.MPEC_ADMIN -> ODS/C2D/C2D_MPEC_ADMIN +-- =================================================================== + +PROMPT Exporting Table 1/3: OU_C2D.MPEC_ADMIN +PROMPT Target: mrds_data_dev/ODS/C2D/C2D_MPEC_ADMIN + +BEGIN + CT_MRDS.DATA_EXPORTER.EXPORT_TABLE_DATA_BY_DATE( + pSchemaName => 'OU_C2D', + pTableName => 'MPEC_ADMIN', + pKeyColumnName => 'A_WORKFLOW_HISTORY_KEY', -- Adjust if different + pBucketArea => 'DATA', + pFolderName => 'ODS/C2D/C2D_MPEC_ADMIN', + pColumnList => NULL, -- Use all columns + pMinDate => DATE '2020-01-01', -- Full historical range + pMaxDate => SYSDATE, -- Up to current date + pParallelDegree => 1, -- Sequential for safety + pTemplateTableName => 'CT_ET_TEMPLATES.C2D_MPEC_ADMIN', -- Template for mapping + pCredentialName => 'DEF_CRED_ARN' + ); + + DBMS_OUTPUT.PUT_LINE('✓ MPEC_ADMIN export completed successfully'); +EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('✗ MPEC_ADMIN export failed: ' || SQLERRM); + -- Log error but continue with other tables + INSERT INTO CT_MRDS.A_PROCESS_LOG (PACKAGE_NAME, PROCEDURE_NAME, EVENT_TYPE, EVENT_MESSAGE) + VALUES ('MARS-956', 'EXPORT_MPEC_ADMIN', 'ERROR', 'Export failed: ' || SQLERRM); + COMMIT; + RAISE; +END; +/ + +-- =================================================================== +-- TABLE 2: OU_C2D.MPEC_CONTENT -> ODS/C2D/C2D_MPEC_CONTENT +-- =================================================================== + +PROMPT Exporting Table 2/3: OU_C2D.MPEC_CONTENT +PROMPT Target: mrds_data_dev/ODS/C2D/C2D_MPEC_CONTENT + +BEGIN + CT_MRDS.DATA_EXPORTER.EXPORT_TABLE_DATA_BY_DATE( + pSchemaName => 'OU_C2D', + pTableName => 'MPEC_CONTENT', + pKeyColumnName => 'A_WORKFLOW_HISTORY_KEY', -- Adjust if different + pBucketArea => 'DATA', + pFolderName => 'ODS/C2D/C2D_MPEC_CONTENT', + pColumnList => NULL, -- Use all columns + pMinDate => DATE '2020-01-01', -- Full historical range + pMaxDate => SYSDATE, -- Up to current date + pParallelDegree => 1, -- Sequential for safety + pTemplateTableName => 'CT_ET_TEMPLATES.C2D_MPEC_CONTENT', -- Template for mapping + pCredentialName => 'DEF_CRED_ARN' + ); + + DBMS_OUTPUT.PUT_LINE('✓ MPEC_CONTENT export completed successfully'); +EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('✗ MPEC_CONTENT export failed: ' || SQLERRM); + -- Log error but continue with other tables + INSERT INTO CT_MRDS.A_PROCESS_LOG (PACKAGE_NAME, PROCEDURE_NAME, EVENT_TYPE, EVENT_MESSAGE) + VALUES ('MARS-956', 'EXPORT_MPEC_CONTENT', 'ERROR', 'Export failed: ' || SQLERRM); + COMMIT; + RAISE; +END; +/ + +-- =================================================================== +-- TABLE 3: OU_C2D.MPEC_CONTENT_CRITERION -> ODS/C2D/C2D_MPEC_CONTENT_CRITERION +-- =================================================================== + +PROMPT Exporting Table 3/3: OU_C2D.MPEC_CONTENT_CRITERION +PROMPT Target: mrds_data_dev/ODS/C2D/C2D_MPEC_CONTENT_CRITERION + +BEGIN + CT_MRDS.DATA_EXPORTER.EXPORT_TABLE_DATA_BY_DATE( + pSchemaName => 'OU_C2D', + pTableName => 'MPEC_CONTENT_CRITERION', + pKeyColumnName => 'A_WORKFLOW_HISTORY_KEY', -- Adjust if different + pBucketArea => 'DATA', + pFolderName => 'ODS/C2D/C2D_MPEC_CONTENT_CRITERION', + pColumnList => NULL, -- Use all columns + pMinDate => DATE '2020-01-01', -- Full historical range + pMaxDate => SYSDATE, -- Up to current date + pParallelDegree => 1, -- Sequential for safety + pTemplateTableName => 'CT_ET_TEMPLATES.C2D_MPEC_CONTENT_CRITERION', -- Template for mapping + pCredentialName => 'DEF_CRED_ARN' + ); + + DBMS_OUTPUT.PUT_LINE('✓ MPEC_CONTENT_CRITERION export completed successfully'); +EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('✗ MPEC_CONTENT_CRITERION export failed: ' || SQLERRM); + -- Log error + INSERT INTO CT_MRDS.A_PROCESS_LOG (PACKAGE_NAME, PROCEDURE_NAME, EVENT_TYPE, EVENT_MESSAGE) + VALUES ('MARS-956', 'EXPORT_MPEC_CONTENT_CRITERION', 'ERROR', 'Export failed: ' || SQLERRM); + COMMIT; + RAISE; +END; +/ + +-- =================================================================== +-- Export Summary and Verification +-- =================================================================== + +PROMPT ========================================================================= +PROMPT Export Summary - Checking Results +PROMPT ========================================================================= + +-- Log completion +INSERT INTO CT_MRDS.A_PROCESS_LOG (PACKAGE_NAME, PROCEDURE_NAME, EVENT_TYPE, EVENT_MESSAGE) +VALUES ('MARS-956', 'EXPORT_C2D_MPEC_DATA', 'INFO', 'All C2D MPEC historical exports completed successfully'); +COMMIT; + +-- Display recent export activity +PROMPT Recent Export Activity (last 30 minutes): +SELECT TO_CHAR(EVENT_TIMESTAMP, 'YYYY-MM-DD HH24:MI:SS') AS EXPORT_TIME, + PACKAGE_NAME, + PROCEDURE_NAME, + EVENT_TYPE, + EVENT_MESSAGE +FROM CT_MRDS.A_PROCESS_LOG +WHERE PACKAGE_NAME = 'MARS-956' + OR PROCEDURE_NAME LIKE '%DATA_EXPORTER%' + AND EVENT_TIMESTAMP >= SYSTIMESTAMP - INTERVAL '30' MINUTE +ORDER BY EVENT_TIMESTAMP DESC +FETCH FIRST 20 ROWS ONLY; + +PROMPT ========================================================================= +PROMPT MARS-956 Export Completed Successfully! +PROMPT ========================================================================= +PROMPT Next Steps: +PROMPT 1. Verify CSV files created in DATA bucket +PROMPT 2. Check file structure matches template tables +PROMPT 3. Validate row counts match source tables +PROMPT 4. Confirm data available for delta queries +PROMPT ========================================================================= \ No newline at end of file diff --git a/MARS_Packages/REL02_POST/MARS-956/README.md b/MARS_Packages/REL02_POST/MARS-956/README.md new file mode 100644 index 0000000..71451c9 --- /dev/null +++ b/MARS_Packages/REL02_POST/MARS-956/README.md @@ -0,0 +1,66 @@ +# MARS-956: Exporting Historical data for ODS: C2D MPEC (delta) + +## Overview + +**Purpose**: One-time export of historical C2D MPEC delta data from operational database (OU_C2D) to DATA bucket as CSV files. + +**Approach**: Use FILE_MANAGER export functionality EXPORT_TABLE_DATA_BY_DATE for bulk data movement. + +**Input**: Old tables in OU_C2D operational database +**Output**: CSV files in DATA bucket +**Mapping**: Structure must match new ODS template tables + +## Tables to Export + +| Source Table (OU_C2D) | Target Location (DATA) | Export Type | Time Dependency | +|------------------------|-------------------------|-------------|-----------------| +| `MPEC_ADMIN` | `mrds_data_dev/ODS/C2D/C2D_MPEC_ADMIN` | CSV to DATA | Sync with REL_02 | +| `MPEC_CONTENT` | `mrds_data_dev/ODS/C2D/C2D_MPEC_CONTENT` | CSV to DATA | Sync with REL_02 | +| `MPEC_CONTENT_CRITERION` | `mrds_data_dev/ODS/C2D/C2D_MPEC_CONTENT_CRITERION` | CSV to DATA | Sync with REL_02 | + +## Export Strategy + +- **Format**: CSV files in DATA bucket +- **Reason**: Complete history of delta records needed for all queries +- **Method**: `DATA_EXPORTER.EXPORT_TABLE_DATA_BY_DATE` procedure +- **Bucket Area**: `'DATA'` +- **Folder Structure**: `'ODS/C2D/{TABLE_NAME}'` + +## Installation Steps + +1. Run master install script: `@install_mars956.sql` +2. Verify exports completed successfully +3. Confirm CSV files created in DATA bucket with expected structure + +## Files Structure + +``` +MARS-956/ +├── README.md # This file +├── install_mars956.sql # Master installation script +├── 01_MARS_956_export_c2d_mpec_data.sql # Export procedures execution +├── track_package_versions.sql # Universal version tracking +├── verify_packages_version.sql # Universal version verification +└── rollback_mars956.sql # Rollback script (if needed) +``` + +## Prerequisites + +- OU_C2D schema access for source tables +- DATA_EXPORTER package v2.7.4+ deployed +- DEF_CRED_ARN credentials configured +- DATA bucket accessible + +## Post-Installation Verification + +1. Check export completion in A_PROCESS_LOG +2. Verify CSV files created in DATA bucket +3. Validate file structure matches template tables +4. Confirm row counts match source tables + +## Notes + +- This is a **one-time** data migration +- No package modifications required (uses existing DATA_EXPORTER) +- Export timing critical - must sync with REL_02 deployment +- Complete history required for delta queries \ No newline at end of file diff --git a/MARS_Packages/REL02_POST/MARS-956/install_mars956.sql b/MARS_Packages/REL02_POST/MARS-956/install_mars956.sql new file mode 100644 index 0000000..b28dfcd --- /dev/null +++ b/MARS_Packages/REL02_POST/MARS-956/install_mars956.sql @@ -0,0 +1,128 @@ +-- =================================================================== +-- MARS-956 MASTER INSTALLATION SCRIPT +-- =================================================================== +-- Purpose: Export Historical C2D MPEC data from OU_C2D to DATA bucket +-- Author: Grzegorz Michalski +-- Date: 2026-02-11 +-- +-- Requirements: +-- - ADMIN user access for MARS installation +-- - OU_C2D schema access for source tables +-- - DATA_EXPORTER package v2.7.4+ deployed +-- - DEF_CRED_ARN credentials configured +-- - DATA bucket accessible +-- =================================================================== + +-- Dynamic spool file generation +host mkdir log 2>nul +define spoolfile = 'log\install_mars956_' +define timestamp = '' + +-- Get current timestamp for unique log filename +column current_time new_value timestamp +SELECT TO_CHAR(SYSDATE, 'YYYYMMDD_HH24MISS') AS current_time FROM dual; + +-- Start logging +spool &spoolfile.×tamp..log + +-- Display environment information +PROMPT ========================================================================= +PROMPT MARS-956 INSTALLATION - Export Historical C2D MPEC Data +PROMPT ========================================================================= +PROMPT Installation Start: +SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS INSTALL_START FROM DUAL; + +PROMPT Current User: +SELECT USER AS CURRENT_USER FROM DUAL; + +PROMPT Database Info: +SELECT INSTANCE_NAME, VERSION, STATUS FROM V$INSTANCE; + +PROMPT ========================================================================= +PROMPT Installation Details: +PROMPT - Purpose: One-time export of historical C2D MPEC delta data +PROMPT - Source: OU_C2D schema tables (operational database) +PROMPT - Target: DATA bucket as CSV files +PROMPT - Tables: MPEC_ADMIN, MPEC_CONTENT, MPEC_CONTENT_CRITERION +PROMPT - Method: DATA_EXPORTER.EXPORT_TABLE_DATA_BY_DATE +PROMPT ========================================================================= + +SET SERVEROUTPUT ON SIZE 1000000 +SET LINESIZE 200 +SET PAGESIZE 1000 + +PROMPT +PROMPT Step 1: Verify Prerequisites +PROMPT ========================================================================= + +-- Verify DATA_EXPORTER package is available +PROMPT Checking DATA_EXPORTER package availability... +SELECT 'DATA_EXPORTER v' || CT_MRDS.DATA_EXPORTER.PACKAGE_VERSION || + ' (Build: ' || CT_MRDS.DATA_EXPORTER.PACKAGE_BUILD_DATE || ')' AS PACKAGE_INFO +FROM DUAL; + +-- Verify source tables exist in OU_C2D +PROMPT Checking source tables in OU_C2D schema... +SELECT table_name, num_rows +FROM all_tables +WHERE owner = 'OU_C2D' + AND table_name IN ('MPEC_ADMIN', 'MPEC_CONTENT', 'MPEC_CONTENT_CRITERION') +ORDER BY table_name; + +-- Verify template tables exist in CT_ET_TEMPLATES +PROMPT Checking template tables in CT_ET_TEMPLATES schema... +SELECT table_name +FROM all_tables +WHERE owner = 'CT_ET_TEMPLATES' + AND table_name IN ('C2D_MPEC_ADMIN', 'C2D_MPEC_CONTENT', 'C2D_MPEC_CONTENT_CRITERION') +ORDER BY table_name; + +PROMPT +PROMPT Step 2: Execute Historical Data Export +PROMPT ========================================================================= +@@01_MARS_956_export_c2d_mpec_data.sql + +PROMPT +PROMPT Step 3: Track Package Versions +PROMPT ========================================================================= +@@track_package_versions.sql + +PROMPT +PROMPT Step 4: Verify Package Versions +PROMPT ========================================================================= +@@verify_packages_version.sql + +PROMPT +PROMPT ========================================================================= +PROMPT MARS-956 INSTALLATION SUMMARY +PROMPT ========================================================================= + +-- Display final summary +PROMPT Installation Completed: +SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS INSTALL_END FROM DUAL; + +PROMPT Export Results Summary: +SELECT COUNT(*) AS EXPORT_LOG_ENTRIES, + MIN(EVENT_TIMESTAMP) AS FIRST_EXPORT, + MAX(EVENT_TIMESTAMP) AS LAST_EXPORT +FROM CT_MRDS.A_PROCESS_LOG +WHERE PACKAGE_NAME = 'MARS-956' + AND EVENT_TIMESTAMP >= SYSDATE - 1; -- Last 24 hours + +PROMPT +PROMPT ========================================================================= +PROMPT POST-INSTALLATION TASKS +PROMPT ========================================================================= +PROMPT 1. Verify CSV files created in DATA bucket: +PROMPT - mrds_data_dev/ODS/C2D/C2D_MPEC_ADMIN/*.csv +PROMPT - mrds_data_dev/ODS/C2D/C2D_MPEC_CONTENT/*.csv +PROMPT - mrds_data_dev/ODS/C2D/C2D_MPEC_CONTENT_CRITERION/*.csv +PROMPT +PROMPT 2. Check file structure matches template tables +PROMPT 3. Validate row counts match source tables +PROMPT 4. Confirm data available for delta queries +PROMPT 5. Sync deployment timing with REL_02 deployment +PROMPT ========================================================================= + +spool off +quit; \ No newline at end of file diff --git a/MARS_Packages/REL02_POST/MARS-956/rollback_mars956.sql b/MARS_Packages/REL02_POST/MARS-956/rollback_mars956.sql new file mode 100644 index 0000000..b87e521 --- /dev/null +++ b/MARS_Packages/REL02_POST/MARS-956/rollback_mars956.sql @@ -0,0 +1,85 @@ +-- =================================================================== +-- MARS-956 ROLLBACK SCRIPT +-- =================================================================== +-- Purpose: Rollback/cleanup for MARS-956 C2D MPEC historical data export +-- Author: Grzegorz Michalski +-- Date: 2026-02-11 +-- +-- NOTE: This is primarily for cleanup of log entries and tracking data. +-- The exported CSV files would need to be manually removed from +-- the DATA bucket if rollback is required. +-- =================================================================== + +-- Start logging +spool rollback_mars956.log + +PROMPT ========================================================================= +PROMPT MARS-956 ROLLBACK - Cleanup Historical C2D MPEC Export +PROMPT ========================================================================= +PROMPT Rollback Start: +SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS ROLLBACK_START FROM DUAL; + +SET SERVEROUTPUT ON SIZE 1000000 + +PROMPT +PROMPT Step 1: Review Export Activity +PROMPT ========================================================================= + +-- Show what was exported +PROMPT Recent MARS-956 export activity: +SELECT TO_CHAR(EVENT_TIMESTAMP, 'YYYY-MM-DD HH24:MI:SS') AS EXPORT_TIME, + PROCEDURE_NAME, + EVENT_TYPE, + EVENT_MESSAGE +FROM CT_MRDS.A_PROCESS_LOG +WHERE PACKAGE_NAME = 'MARS-956' + OR PROCEDURE_NAME LIKE '%MARS_956%' +ORDER BY EVENT_TIMESTAMP DESC; + +PROMPT +PROMPT Step 2: Cleanup Log Entries (Optional) +PROMPT ========================================================================= + +-- Optionally remove MARS-956 log entries (uncomment if needed) +/* +DELETE FROM CT_MRDS.A_PROCESS_LOG +WHERE PACKAGE_NAME = 'MARS-956' + OR PROCEDURE_NAME LIKE '%MARS_956%'; + +PROMPT Deleted log entries: +SELECT SQL%ROWCOUNT AS DELETED_ROWS FROM DUAL; + +COMMIT; +*/ + +PROMPT Log cleanup skipped (uncomment DELETE statement if cleanup needed) + +PROMPT +PROMPT Step 3: Manual Steps Required +PROMPT ========================================================================= + +PROMPT ⚠️ MANUAL CLEANUP REQUIRED: +PROMPT +PROMPT If complete rollback is needed, manually remove CSV files from DATA bucket: +PROMPT - mrds_data_dev/ODS/C2D/C2D_MPEC_ADMIN/*.csv +PROMPT - mrds_data_dev/ODS/C2D/C2D_MPEC_CONTENT/*.csv +PROMPT - mrds_data_dev/ODS/C2D/C2D_MPEC_CONTENT_CRITERION/*.csv +PROMPT +PROMPT Use OCI CLI or console to remove files: +PROMPT oci os object list --bucket-name mrds_data_dev --prefix "ODS/C2D/C2D_MPEC" +PROMPT oci os object delete --bucket-name mrds_data_dev --name "path/to/file.csv" + +PROMPT +PROMPT ========================================================================= +PROMPT MARS-956 ROLLBACK SUMMARY +PROMPT ========================================================================= + +PROMPT Rollback Completed: +SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS ROLLBACK_END FROM DUAL; + +PROMPT +PROMPT Note: This rollback script primarily cleans up log entries. +PROMPT Exported CSV files require manual removal from DATA bucket. + +spool off +quit; \ No newline at end of file diff --git a/MARS_Packages/REL02_POST/MARS-956/track_package_versions.sql b/MARS_Packages/REL02_POST/MARS-956/track_package_versions.sql new file mode 100644 index 0000000..8497868 --- /dev/null +++ b/MARS_Packages/REL02_POST/MARS-956/track_package_versions.sql @@ -0,0 +1,96 @@ +-- =================================================================== +-- Simple Package Version Tracking Script +-- =================================================================== +-- Purpose: Track specified Oracle package versions for MARS-956 +-- Author: Grzegorz Michalski +-- Date: 2026-02-11 +-- Version: 3.1.0 - List-Based Edition +-- +-- USAGE: +-- 1. Edit package list below (add/remove packages as needed) +-- 2. Include in your install/rollback script: @@track_package_versions.sql +-- =================================================================== + +SET SERVEROUTPUT ON; + +DECLARE + TYPE t_package_rec IS RECORD ( + owner VARCHAR2(50), + package_name VARCHAR2(50), + version VARCHAR2(50) + ); + TYPE t_packages IS TABLE OF t_package_rec; + TYPE t_string_array IS TABLE OF VARCHAR2(100); + + -- =================================================================== + -- PACKAGE LIST - Edit this array to specify packages to track + -- =================================================================== + -- MARS-956: Historical C2D MPEC data export - using existing packages + -- No new packages created, tracking existing DATA_EXPORTER usage + -- =================================================================== + vPackageList t_string_array := t_string_array( + 'CT_MRDS.DATA_EXPORTER' + ); + -- =================================================================== + + vPackages t_packages := t_packages(); + vVersion VARCHAR2(50); + vCount NUMBER := 0; + vOwner VARCHAR2(50); + vPackageName VARCHAR2(50); + vDotPos NUMBER; +BEGIN + DBMS_OUTPUT.PUT_LINE('========================================'); + DBMS_OUTPUT.PUT_LINE('MARS-956: Package Version Tracking'); + DBMS_OUTPUT.PUT_LINE('========================================'); + + -- Process each package in the list + FOR i IN 1..vPackageList.COUNT LOOP + vDotPos := INSTR(vPackageList(i), '.'); + IF vDotPos > 0 THEN + vOwner := SUBSTR(vPackageList(i), 1, vDotPos - 1); + vPackageName := SUBSTR(vPackageList(i), vDotPos + 1); + + -- Get package version + BEGIN + EXECUTE IMMEDIATE 'SELECT ' || vOwner || '.' || vPackageName || '.GET_VERSION() FROM DUAL' INTO vVersion; + vPackages.EXTEND; + vPackages(vPackages.COUNT).owner := vOwner; + vPackages(vPackages.COUNT).package_name := vPackageName; + vPackages(vPackages.COUNT).version := vVersion; + + -- Track in ENV_MANAGER + BEGIN + CT_MRDS.ENV_MANAGER.TRACK_PACKAGE_VERSION( + pPackageOwner => vOwner, + pPackageName => vPackageName, + pPackageVersion => vVersion, + pPackageBuildDate => TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'), + pPackageAuthor => 'Grzegorz Michalski' + ); + vCount := vCount + 1; + EXCEPTION + WHEN OTHERS THEN NULL; -- Continue even if tracking fails + END; + EXCEPTION + WHEN OTHERS THEN NULL; -- Skip packages that fail + END; + END IF; + END LOOP; + + DBMS_OUTPUT.PUT_LINE(''); + DBMS_OUTPUT.PUT_LINE('Summary:'); + DBMS_OUTPUT.PUT_LINE('--------'); + DBMS_OUTPUT.PUT_LINE('Packages tracked: ' || vCount || '/' || vPackageList.COUNT); + + IF vPackages.COUNT > 0 THEN + DBMS_OUTPUT.PUT_LINE(''); + DBMS_OUTPUT.PUT_LINE('Tracked Packages:'); + FOR i IN 1..vPackages.COUNT LOOP + DBMS_OUTPUT.PUT_LINE(' ' || vPackages(i).owner || '.' || vPackages(i).package_name || ' v' || vPackages(i).version); + END LOOP; + END IF; + + DBMS_OUTPUT.PUT_LINE('========================================'); +END; +/ \ No newline at end of file diff --git a/MARS_Packages/REL02_POST/MARS-956/validate_export.sql b/MARS_Packages/REL02_POST/MARS-956/validate_export.sql new file mode 100644 index 0000000..865225b --- /dev/null +++ b/MARS_Packages/REL02_POST/MARS-956/validate_export.sql @@ -0,0 +1,142 @@ +-- =================================================================== +-- MARS-956 POST-EXPORT VALIDATION SCRIPT +-- =================================================================== +-- Purpose: Validate C2D MPEC historical data export results +-- Author: Grzegorz Michalski +-- Date: 2026-02-11 +-- +-- Run after MARS-956 installation to verify export success +-- =================================================================== + +SET LINESIZE 200 +SET PAGESIZE 1000 +SET SERVEROUTPUT ON SIZE 1000000 + +PROMPT ========================================================================= +PROMPT MARS-956 POST-EXPORT VALIDATION +PROMPT ========================================================================= +PROMPT Validation Start: +SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS VALIDATION_START FROM DUAL; + +PROMPT +PROMPT 1. Export Process Log Review +PROMPT ========================================================================= + +-- Check export completion status +PROMPT Recent MARS-956 export activity: +SELECT TO_CHAR(EVENT_TIMESTAMP, 'YYYY-MM-DD HH24:MI:SS') AS EVENT_TIME, + PROCEDURE_NAME, + EVENT_TYPE, + SUBSTR(EVENT_MESSAGE, 1, 80) AS MESSAGE_PREVIEW +FROM CT_MRDS.A_PROCESS_LOG +WHERE PACKAGE_NAME = 'MARS-956' + OR PROCEDURE_NAME LIKE '%MARS_956%' + OR PROCEDURE_NAME LIKE '%DATA_EXPORTER%' +ORDER BY EVENT_TIMESTAMP DESC +FETCH FIRST 20 ROWS ONLY; + +-- Check for any errors +PROMPT Export errors (if any): +SELECT TO_CHAR(EVENT_TIMESTAMP, 'YYYY-MM-DD HH24:MI:SS') AS ERROR_TIME, + PROCEDURE_NAME, + EVENT_MESSAGE +FROM CT_MRDS.A_PROCESS_LOG +WHERE (PACKAGE_NAME = 'MARS-956' OR PROCEDURE_NAME LIKE '%MARS_956%') + AND EVENT_TYPE = 'ERROR' + AND EVENT_TIMESTAMP >= SYSDATE - 1; -- Last 24 hours + +PROMPT +PROMPT 2. Source Table Row Counts +PROMPT ========================================================================= + +-- Get source table counts for comparison +PROMPT Source table row counts (OU_C2D): +SELECT 'OU_C2D' AS SCHEMA_NAME, + table_name, + num_rows, + TO_CHAR(last_analyzed, 'YYYY-MM-DD HH24:MI:SS') AS STATS_DATE +FROM all_tables +WHERE owner = 'OU_C2D' + AND table_name IN ('MPEC_ADMIN', 'MPEC_CONTENT', 'MPEC_CONTENT_CRITERION') +ORDER BY table_name; + +PROMPT +PROMPT 3. Template Table Structure Verification +PROMPT ========================================================================= + +-- Verify template tables exist and have proper structure +PROMPT Template tables in CT_ET_TEMPLATES: +SELECT table_name, + num_rows, + TO_CHAR(last_analyzed, 'YYYY-MM-DD HH24:MI:SS') AS STATS_DATE +FROM all_tables +WHERE owner = 'CT_ET_TEMPLATES' + AND table_name IN ('C2D_MPEC_ADMIN', 'C2D_MPEC_CONTENT', 'C2D_MPEC_CONTENT_CRITERION') +ORDER BY table_name; + +PROMPT +PROMPT Template table column counts: +SELECT owner, table_name, COUNT(*) AS COLUMN_COUNT +FROM all_tab_columns +WHERE owner IN ('OU_C2D', 'CT_ET_TEMPLATES') + AND ((owner = 'OU_C2D' AND table_name IN ('MPEC_ADMIN', 'MPEC_CONTENT', 'MPEC_CONTENT_CRITERION')) + OR (owner = 'CT_ET_TEMPLATES' AND table_name IN ('C2D_MPEC_ADMIN', 'C2D_MPEC_CONTENT', 'C2D_MPEC_CONTENT_CRITERION'))) +GROUP BY owner, table_name +ORDER BY table_name, owner; + +PROMPT +PROMPT 4. Export File Validation Commands +PROMPT ========================================================================= + +PROMPT To validate exported CSV files, use these OCI CLI commands: +PROMPT +PROMPT # List exported files +PROMPT oci os object list --bucket-name mrds_data_dev --prefix "ODS/C2D/C2D_MPEC" +PROMPT +PROMPT # Check file sizes +PROMPT oci os object list --bucket-name mrds_data_dev --prefix "ODS/C2D/C2D_MPEC_ADMIN" +PROMPT oci os object list --bucket-name mrds_data_dev --prefix "ODS/C2D/C2D_MPEC_CONTENT" +PROMPT oci os object list --bucket-name mrds_data_dev --prefix "ODS/C2D/C2D_MPEC_CONTENT_CRITERION" +PROMPT +PROMPT # Download sample file for validation +PROMPT oci os object get --bucket-name mrds_data_dev --name "ODS/C2D/C2D_MPEC_ADMIN/filename.csv" --file sample.csv + +PROMPT +PROMPT 5. Data Quality Checks (Manual) +PROMPT ========================================================================= + +PROMPT Manual verification steps: +PROMPT 1. Download sample CSV files from each folder +PROMPT 2. Verify CSV header matches template table columns +PROMPT 3. Check data formats (especially dates) match expectations +PROMPT 4. Confirm row counts approximately match source tables +PROMPT 5. Validate no empty files were created +PROMPT 6. Test loading sample data into external tables + +PROMPT +PROMPT 6. Next Steps for ODS Integration +PROMPT ========================================================================= + +PROMPT After validation success: +PROMPT 1. Configure external tables pointing to CSV files +PROMPT 2. Test external table queries +PROMPT 3. Setup scheduled data refresh processes (if needed) +PROMPT 4. Document file locations and access patterns +PROMPT 5. Coordinate with REL_02 deployment timing + +PROMPT +PROMPT ========================================================================= +PROMPT VALIDATION COMPLETED +PROMPT ========================================================================= +PROMPT Validation End: +SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS VALIDATION_END FROM DUAL; + +PROMPT +PROMPT Review the output above to confirm: +PROMPT ✓ Export processes completed without errors +PROMPT ✓ Source table row counts are reasonable +PROMPT ✓ Template tables exist and have matching structure +PROMPT ✓ Manual file validation steps are understood +PROMPT +PROMPT If any issues found, check export logs and re-run specific exports if needed. +PROMPT ========================================================================= \ No newline at end of file diff --git a/MARS_Packages/REL02_POST/MARS-956/verify_packages_version.sql b/MARS_Packages/REL02_POST/MARS-956/verify_packages_version.sql new file mode 100644 index 0000000..510f8b7 --- /dev/null +++ b/MARS_Packages/REL02_POST/MARS-956/verify_packages_version.sql @@ -0,0 +1,62 @@ +-- =================================================================== +-- Universal Package Version Verification Script +-- =================================================================== +-- Purpose: Verify all tracked Oracle packages for code changes (MARS-956) +-- Author: Grzegorz Michalski +-- Date: 2026-02-11 +-- Version: 1.0.0 +-- +-- USAGE: +-- Include at the end of install/rollback scripts: @@verify_packages_version.sql +-- +-- OUTPUT: +-- - List of all tracked packages with their current status +-- - OK: Package has not changed since last tracking +-- - WARNING: Package code changed without version update +-- =================================================================== + +SET LINESIZE 200 +SET PAGESIZE 1000 +SET FEEDBACK OFF + +PROMPT +PROMPT ======================================== +PROMPT MARS-956: Package Version Verification +PROMPT ======================================== +PROMPT + +COLUMN PACKAGE_OWNER FORMAT A15 +COLUMN PACKAGE_NAME FORMAT A20 +COLUMN VERSION FORMAT A10 +COLUMN STATUS FORMAT A80 + +SELECT + PACKAGE_OWNER, + PACKAGE_NAME, + PACKAGE_VERSION AS VERSION, + CT_MRDS.ENV_MANAGER.CHECK_PACKAGE_CHANGES(PACKAGE_OWNER, PACKAGE_NAME) AS STATUS +FROM ( + SELECT + PACKAGE_OWNER, + PACKAGE_NAME, + PACKAGE_VERSION, + ROW_NUMBER() OVER (PARTITION BY PACKAGE_OWNER, PACKAGE_NAME ORDER BY TRACKING_DATE DESC) AS RN + FROM CT_MRDS.A_PACKAGE_VERSION_TRACKING +) +WHERE RN = 1 +ORDER BY PACKAGE_OWNER, PACKAGE_NAME; + +PROMPT +PROMPT ======================================== +PROMPT MARS-956: Verification Complete +PROMPT ======================================== +PROMPT +PROMPT Legend: +PROMPT OK - Package has not changed since last tracking +PROMPT WARNING - Package code changed without version update +PROMPT +PROMPT For detailed hash information, use: +PROMPT SELECT ENV_MANAGER.GET_PACKAGE_HASH_INFO('OWNER', 'PACKAGE') FROM DUAL; +PROMPT ======================================== + +SET FEEDBACK ON \ No newline at end of file