Mearge recent development
This commit is contained in:
72
MARS_Packages/REL01_ADDITIONS/MARS-828/test/auto_install.sql
Normal file
72
MARS_Packages/REL01_ADDITIONS/MARS-828/test/auto_install.sql
Normal file
@@ -0,0 +1,72 @@
|
||||
-- Auto-install script for MARS-828 (bypasses ACCEPT prompts)
|
||||
-- Usage: sql "ADMIN/Cloudpass#34@ggmichalski_high" @auto_install.sql
|
||||
|
||||
SET SERVEROUTPUT ON SIZE UNLIMITED
|
||||
SET VERIFY OFF
|
||||
SET FEEDBACK ON
|
||||
SET ECHO OFF
|
||||
|
||||
-- Create log directory
|
||||
host mkdir log 2>nul
|
||||
|
||||
-- Generate SPOOL filename
|
||||
var filename VARCHAR2(100)
|
||||
BEGIN
|
||||
:filename := 'log/INSTALL_MARS_828_' || SYS_CONTEXT('USERENV', 'CON_NAME') || '_' || TO_CHAR(SYSDATE,'YYYYMMDD_HH24MISS') || '.log';
|
||||
END;
|
||||
/
|
||||
column filename new_value _filename
|
||||
select :filename filename from dual;
|
||||
spool &_filename
|
||||
|
||||
PROMPT
|
||||
PROMPT ============================================================================
|
||||
PROMPT MARS-828 Installation Starting (AUTO MODE)
|
||||
PROMPT ============================================================================
|
||||
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS install_start FROM DUAL;
|
||||
PROMPT ============================================================================
|
||||
|
||||
PROMPT
|
||||
PROMPT Step 1/7: Adding archival strategy columns
|
||||
PROMPT ===================================================================
|
||||
@@../01_MARS_828_install_add_archival_strategy_columns.sql
|
||||
|
||||
PROMPT
|
||||
PROMPT Step 2/7: Creating validation trigger
|
||||
PROMPT ======================================
|
||||
@@../02_MARS_828_install_archival_strategy_trigger.sql
|
||||
|
||||
PROMPT
|
||||
PROMPT Step 3/7: Deploying FILE_ARCHIVER Spec v3.0.0
|
||||
PROMPT ===============================================================
|
||||
@@../03_MARS_828_install_CT_MRDS_FILE_ARCHIVER_SPEC.sql
|
||||
|
||||
PROMPT
|
||||
PROMPT Step 4/7: Deploying FILE_ARCHIVER Body v3.0.0
|
||||
PROMPT ======================================================
|
||||
@@../04_MARS_828_install_CT_MRDS_FILE_ARCHIVER_BODY.sql
|
||||
|
||||
PROMPT
|
||||
PROMPT Step 5/7: Verifying installation
|
||||
PROMPT =================================
|
||||
@@../05_MARS_828_verify_installation.sql
|
||||
|
||||
PROMPT
|
||||
PROMPT Step 6/7: Tracking package versions
|
||||
PROMPT ====================================
|
||||
@@../track_package_versions.sql
|
||||
|
||||
PROMPT
|
||||
PROMPT Step 7/7: Verifying tracked packages
|
||||
PROMPT =====================================
|
||||
@@../verify_packages_version.sql
|
||||
|
||||
PROMPT
|
||||
PROMPT ============================================================================
|
||||
PROMPT MARS-828 Installation Completed
|
||||
PROMPT ============================================================================
|
||||
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS install_end FROM DUAL;
|
||||
PROMPT ============================================================================
|
||||
|
||||
spool off
|
||||
quit;
|
||||
@@ -0,0 +1,270 @@
|
||||
-- ===================================================================
|
||||
-- MARS-828: Comprehensive Testing Script
|
||||
-- ===================================================================
|
||||
-- Purpose: Test all archival strategies and verify functionality
|
||||
-- Author: Grzegorz Michalski
|
||||
-- Date: 2026-01-28
|
||||
-- ===================================================================
|
||||
|
||||
SET SERVEROUTPUT ON SIZE UNLIMITED
|
||||
SET LINESIZE 200
|
||||
SET PAGESIZE 1000
|
||||
|
||||
PROMPT
|
||||
PROMPT ========================================
|
||||
PROMPT MARS-828: Comprehensive Testing
|
||||
PROMPT ========================================
|
||||
PROMPT
|
||||
|
||||
-- Test 1: Verify package compilation
|
||||
PROMPT Test 1: Package Compilation Status
|
||||
PROMPT ====================================
|
||||
SELECT
|
||||
object_name,
|
||||
object_type,
|
||||
status,
|
||||
TO_CHAR(last_ddl_time, 'YYYY-MM-DD HH24:MI:SS') as last_ddl_time
|
||||
FROM all_objects
|
||||
WHERE owner = 'CT_MRDS'
|
||||
AND object_name = 'FILE_ARCHIVER'
|
||||
AND object_type IN ('PACKAGE', 'PACKAGE BODY')
|
||||
ORDER BY object_type;
|
||||
|
||||
-- Test 2: Verify package version
|
||||
PROMPT
|
||||
PROMPT Test 2: Package Version
|
||||
PROMPT ========================
|
||||
SELECT CT_MRDS.FILE_ARCHIVER.GET_VERSION() as version FROM DUAL;
|
||||
SELECT CT_MRDS.FILE_ARCHIVER.GET_BUILD_INFO() as build_info FROM DUAL;
|
||||
|
||||
-- Test 3: Track current version
|
||||
PROMPT
|
||||
PROMPT Test 3: Tracking FILE_ARCHIVER v3.0.0
|
||||
PROMPT =======================================
|
||||
BEGIN
|
||||
CT_MRDS.ENV_MANAGER.TRACK_PACKAGE_VERSION(
|
||||
pPackageOwner => 'CT_MRDS',
|
||||
pPackageName => 'FILE_ARCHIVER',
|
||||
pPackageVersion => CT_MRDS.FILE_ARCHIVER.GET_VERSION(),
|
||||
pPackageBuildDate => TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'),
|
||||
pPackageAuthor => 'Grzegorz Michalski'
|
||||
);
|
||||
DBMS_OUTPUT.PUT_LINE('FILE_ARCHIVER v3.0.0 tracked successfully');
|
||||
END;
|
||||
/
|
||||
|
||||
-- Test 4: Verify tracked packages status
|
||||
PROMPT
|
||||
PROMPT Test 4: Package Tracking Verification
|
||||
PROMPT =======================================
|
||||
SELECT
|
||||
PACKAGE_OWNER,
|
||||
PACKAGE_NAME,
|
||||
PACKAGE_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 PACKAGE_OWNER = 'CT_MRDS'
|
||||
AND PACKAGE_NAME = 'FILE_ARCHIVER'
|
||||
)
|
||||
WHERE RN = 1;
|
||||
|
||||
-- Test 5: Test GET_ARCHIVAL_WHERE_CLAUSE with different strategies
|
||||
PROMPT
|
||||
PROMPT Test 5: Testing GET_ARCHIVAL_WHERE_CLAUSE Function
|
||||
PROMPT ====================================================
|
||||
PROMPT Note: This is a private function, testing via public procedures
|
||||
PROMPT
|
||||
|
||||
-- Test 6: Verify existing configurations
|
||||
PROMPT
|
||||
PROMPT Test 6: Current Archival Strategies Configuration
|
||||
PROMPT ==================================================
|
||||
SELECT
|
||||
A_SOURCE_KEY,
|
||||
SOURCE_FILE_ID,
|
||||
TABLE_ID,
|
||||
ARCHIVAL_STRATEGY,
|
||||
MINIMUM_AGE_MONTHS,
|
||||
DAYS_FOR_ARCHIVE_THRESHOLD,
|
||||
FILES_COUNT_OVER_ARCHIVE_THRESHOLD,
|
||||
ROWS_COUNT_OVER_ARCHIVE_THRESHOLD,
|
||||
BYTES_SUM_OVER_ARCHIVE_THRESHOLD
|
||||
FROM CT_MRDS.A_SOURCE_FILE_CONFIG
|
||||
WHERE SOURCE_FILE_TYPE = 'INPUT'
|
||||
ORDER BY A_SOURCE_KEY, TABLE_ID;
|
||||
|
||||
-- Test 7: Update test configurations for each strategy
|
||||
PROMPT
|
||||
PROMPT Test 7: Configuring Test Strategies
|
||||
PROMPT =====================================
|
||||
|
||||
-- Strategy 1: THRESHOLD_BASED (backward compatible - already default)
|
||||
PROMPT Setting C2D to THRESHOLD_BASED...
|
||||
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
|
||||
SET ARCHIVAL_STRATEGY = 'THRESHOLD_BASED',
|
||||
MINIMUM_AGE_MONTHS = NULL,
|
||||
DAYS_FOR_ARCHIVE_THRESHOLD = 30
|
||||
WHERE A_SOURCE_KEY = 'C2D'
|
||||
AND SOURCE_FILE_TYPE = 'INPUT'
|
||||
AND ROWNUM = 1;
|
||||
|
||||
-- Strategy 2: CURRENT_MONTH_ONLY
|
||||
PROMPT Setting LM to CURRENT_MONTH_ONLY...
|
||||
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
|
||||
SET ARCHIVAL_STRATEGY = 'CURRENT_MONTH_ONLY',
|
||||
MINIMUM_AGE_MONTHS = NULL
|
||||
WHERE A_SOURCE_KEY = 'LM'
|
||||
AND SOURCE_FILE_TYPE = 'INPUT'
|
||||
AND ROWNUM = 1;
|
||||
|
||||
-- Strategy 3: MINIMUM_AGE_MONTHS (6 months for CSDB)
|
||||
PROMPT Setting CSDB to MINIMUM_AGE_MONTHS (6 months)...
|
||||
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
|
||||
SET ARCHIVAL_STRATEGY = 'MINIMUM_AGE_MONTHS',
|
||||
MINIMUM_AGE_MONTHS = 6
|
||||
WHERE A_SOURCE_KEY = 'CSDB'
|
||||
AND SOURCE_FILE_TYPE = 'INPUT'
|
||||
AND TABLE_ID = 'DEBT'
|
||||
AND ROWNUM = 1;
|
||||
|
||||
-- Strategy 4: HYBRID (current month + 3 months minimum)
|
||||
PROMPT Setting TOP to HYBRID...
|
||||
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
|
||||
SET ARCHIVAL_STRATEGY = 'HYBRID',
|
||||
MINIMUM_AGE_MONTHS = 3
|
||||
WHERE A_SOURCE_KEY = 'TOP'
|
||||
AND SOURCE_FILE_TYPE = 'INPUT'
|
||||
AND ROWNUM = 1;
|
||||
|
||||
COMMIT;
|
||||
|
||||
PROMPT Configurations updated successfully!
|
||||
|
||||
-- Test 8: Verify updated configurations
|
||||
PROMPT
|
||||
PROMPT Test 8: Verify Updated Configurations
|
||||
PROMPT =======================================
|
||||
SELECT
|
||||
A_SOURCE_KEY,
|
||||
TABLE_ID,
|
||||
ARCHIVAL_STRATEGY,
|
||||
MINIMUM_AGE_MONTHS,
|
||||
DAYS_FOR_ARCHIVE_THRESHOLD
|
||||
FROM CT_MRDS.A_SOURCE_FILE_CONFIG
|
||||
WHERE SOURCE_FILE_TYPE = 'INPUT'
|
||||
AND A_SOURCE_KEY IN ('C2D', 'LM', 'CSDB', 'TOP')
|
||||
ORDER BY
|
||||
CASE A_SOURCE_KEY
|
||||
WHEN 'C2D' THEN 1
|
||||
WHEN 'LM' THEN 2
|
||||
WHEN 'CSDB' THEN 3
|
||||
WHEN 'TOP' THEN 4
|
||||
END;
|
||||
|
||||
-- Test 9: Test trigger validation
|
||||
PROMPT
|
||||
PROMPT Test 9: Testing Trigger Validation
|
||||
PROMPT ====================================
|
||||
|
||||
DECLARE
|
||||
v_test_passed BOOLEAN;
|
||||
BEGIN
|
||||
-- Test 1: MINIMUM_AGE_MONTHS without value (should fail)
|
||||
BEGIN
|
||||
INSERT INTO CT_MRDS.A_SOURCE_FILE_CONFIG (
|
||||
A_SOURCE_FILE_CONFIG_KEY,
|
||||
A_SOURCE_KEY,
|
||||
SOURCE_FILE_TYPE,
|
||||
SOURCE_FILE_ID,
|
||||
ARCHIVAL_STRATEGY,
|
||||
MINIMUM_AGE_MONTHS
|
||||
) VALUES (
|
||||
-998,
|
||||
'TEST1',
|
||||
'INPUT',
|
||||
'TEST1',
|
||||
'MINIMUM_AGE_MONTHS',
|
||||
NULL
|
||||
);
|
||||
DBMS_OUTPUT.PUT_LINE('FAIL: Trigger should have prevented MINIMUM_AGE_MONTHS without value');
|
||||
ROLLBACK;
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
DBMS_OUTPUT.PUT_LINE('PASS: Trigger correctly prevented MINIMUM_AGE_MONTHS without value');
|
||||
ROLLBACK;
|
||||
END;
|
||||
|
||||
-- Test 2: HYBRID without value (should fail)
|
||||
BEGIN
|
||||
INSERT INTO CT_MRDS.A_SOURCE_FILE_CONFIG (
|
||||
A_SOURCE_FILE_CONFIG_KEY,
|
||||
A_SOURCE_KEY,
|
||||
SOURCE_FILE_TYPE,
|
||||
SOURCE_FILE_ID,
|
||||
ARCHIVAL_STRATEGY,
|
||||
MINIMUM_AGE_MONTHS
|
||||
) VALUES (
|
||||
-997,
|
||||
'TEST2',
|
||||
'INPUT',
|
||||
'TEST2',
|
||||
'HYBRID',
|
||||
NULL
|
||||
);
|
||||
DBMS_OUTPUT.PUT_LINE('FAIL: Trigger should have prevented HYBRID without value');
|
||||
ROLLBACK;
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
DBMS_OUTPUT.PUT_LINE('PASS: Trigger correctly prevented HYBRID without value');
|
||||
ROLLBACK;
|
||||
END;
|
||||
|
||||
-- Test 3: CURRENT_MONTH_ONLY (should pass)
|
||||
BEGIN
|
||||
INSERT INTO CT_MRDS.A_SOURCE_FILE_CONFIG (
|
||||
A_SOURCE_FILE_CONFIG_KEY,
|
||||
A_SOURCE_KEY,
|
||||
SOURCE_FILE_TYPE,
|
||||
SOURCE_FILE_ID,
|
||||
ARCHIVAL_STRATEGY,
|
||||
MINIMUM_AGE_MONTHS
|
||||
) VALUES (
|
||||
-996,
|
||||
'TEST3',
|
||||
'INPUT',
|
||||
'TEST3',
|
||||
'CURRENT_MONTH_ONLY',
|
||||
NULL
|
||||
);
|
||||
DBMS_OUTPUT.PUT_LINE('PASS: CURRENT_MONTH_ONLY without MINIMUM_AGE_MONTHS accepted');
|
||||
ROLLBACK;
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
DBMS_OUTPUT.PUT_LINE('FAIL: CURRENT_MONTH_ONLY should not require MINIMUM_AGE_MONTHS');
|
||||
ROLLBACK;
|
||||
END;
|
||||
END;
|
||||
/
|
||||
|
||||
PROMPT
|
||||
PROMPT ========================================
|
||||
PROMPT MARS-828: All Tests Completed
|
||||
PROMPT ========================================
|
||||
PROMPT
|
||||
PROMPT Summary:
|
||||
PROMPT - Package compilation: VALID
|
||||
PROMPT - Package version: 3.0.0
|
||||
PROMPT - Version tracking: Updated
|
||||
PROMPT - All 4 strategies configured:
|
||||
PROMPT * C2D: THRESHOLD_BASED (30 days)
|
||||
PROMPT * LM: CURRENT_MONTH_ONLY
|
||||
PROMPT * CSDB: MINIMUM_AGE_MONTHS (6 months)
|
||||
PROMPT * TOP: HYBRID (3 months)
|
||||
PROMPT - Trigger validation: Working
|
||||
PROMPT ========================================
|
||||
259
MARS_Packages/REL01_ADDITIONS/MARS-828/test/final_summary.sql
Normal file
259
MARS_Packages/REL01_ADDITIONS/MARS-828/test/final_summary.sql
Normal file
@@ -0,0 +1,259 @@
|
||||
-- ===================================================================
|
||||
-- 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 ================================================================
|
||||
@@ -0,0 +1,116 @@
|
||||
-- ============================================================================
|
||||
-- MARS-828 Master Installation Script
|
||||
-- ============================================================================
|
||||
-- Purpose: Deploy enhanced archival strategies for FILE_ARCHIVER package
|
||||
-- Target Schema: CT_MRDS
|
||||
-- Estimated Time: 2-3 minutes
|
||||
-- Prerequisites: FILE_ARCHIVER v2.0.0, ENV_MANAGER v3.x, ADMIN privileges
|
||||
-- ============================================================================
|
||||
|
||||
SET SERVEROUTPUT ON SIZE UNLIMITED
|
||||
SET VERIFY OFF
|
||||
SET FEEDBACK ON
|
||||
SET ECHO OFF
|
||||
|
||||
SET SERVEROUTPUT ON SIZE UNLIMITED
|
||||
SET VERIFY OFF
|
||||
SET FEEDBACK ON
|
||||
SET ECHO OFF
|
||||
|
||||
-- Create log directory if it doesn't exist
|
||||
host mkdir log 2>nul
|
||||
|
||||
-- Generate dynamic SPOOL filename with timestamp
|
||||
var filename VARCHAR2(100)
|
||||
BEGIN
|
||||
:filename := 'log/INSTALL_MARS_828_' || SYS_CONTEXT('USERENV', 'CON_NAME') || '_' || TO_CHAR(SYSDATE,'YYYYMMDD_HH24MISS') || '.log';
|
||||
END;
|
||||
/
|
||||
column filename new_value _filename
|
||||
select :filename filename from dual;
|
||||
spool &_filename
|
||||
|
||||
PROMPT
|
||||
PROMPT ============================================================================
|
||||
PROMPT MARS-828 Installation Starting
|
||||
PROMPT ============================================================================
|
||||
PROMPT Package: CT_MRDS.FILE_ARCHIVER
|
||||
PROMPT Change: Enhanced archival strategies (CURRENT_MONTH_ONLY, MINIMUM_AGE_MONTHS, HYBRID)
|
||||
PROMPT Purpose: Flexible archival policies per data source
|
||||
PROMPT Steps: 7 (DDL, Trigger, Packages, Verify, Track, Verify)
|
||||
PROMPT Timestamp:
|
||||
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS install_start FROM DUAL;
|
||||
PROMPT ============================================================================
|
||||
|
||||
-- Confirm installation with user
|
||||
-- ACCEPT continue CHAR PROMPT 'Type YES to continue with installation, or Ctrl+C to abort: '
|
||||
WHENEVER SQLERROR EXIT SQL.SQLCODE
|
||||
BEGIN
|
||||
IF 'YES' IS NULL OR TRIM('&continue') IS NULL OR UPPER(TRIM('&continue')) != 'YES' THEN
|
||||
RAISE_APPLICATION_ERROR(-20001, 'Installation aborted by user');
|
||||
END IF;
|
||||
END;
|
||||
/
|
||||
WHENEVER SQLERROR CONTINUE
|
||||
|
||||
-- Installation steps
|
||||
PROMPT7: Adding archival strategy columns to A_SOURCE_FILE_CONFIG
|
||||
PROMPT ===================================================================
|
||||
@@../01_MARS_828_install_add_archival_strategy_columns.sql
|
||||
|
||||
PROMPT
|
||||
PROMPT Step 2/7: Creating validation trigger
|
||||
PROMPT ======================================
|
||||
@@../02_MARS_828_install_archival_strategy_trigger.sql
|
||||
|
||||
PROMPT
|
||||
PROMPT Step 3/7: Deploying FILE_ARCHIVER Package Specification v3.0.0
|
||||
PROMPT ===============================================================
|
||||
@@../03_MARS_828_install_CT_MRDS_FILE_ARCHIVER_SPEC.sql
|
||||
|
||||
PROMPT
|
||||
PROMPT Step 4/7: Deploying FILE_ARCHIVER Package Body v3.0.0
|
||||
PROMPT ======================================================
|
||||
@@../04_MARS_828_install_CT_MRDS_FILE_ARCHIVER_BODY.sql
|
||||
|
||||
PROMPT
|
||||
PROMPT Step 5/7: Verifying installation
|
||||
PROMPT =================================
|
||||
@@../05_MARS_828_verify_installation.sql
|
||||
|
||||
PROMPT
|
||||
PROMPT Step 6/7: Tracking package versions
|
||||
PROMPT ====================================
|
||||
@@../track_package_versions.sql
|
||||
|
||||
PROMPT
|
||||
PROMPT Step 7/7: Verifying tracked packages
|
||||
PROMPT =====================================
|
||||
@@../verify_packages_version.sql
|
||||
|
||||
PROMPT
|
||||
PROMPT ============================================================================
|
||||
PROMPT MARS-828 Installation Completed
|
||||
PROMPT ============================================================================
|
||||
PROMPT Completion Time:
|
||||
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS install_end FROM DUAL;
|
||||
PROMPT
|
||||
PROMPT Installation Summary:
|
||||
PROMPT - Package: CT_MRDS.FILE_ARCHIVER
|
||||
PROMPT - Version: 2.0.0 -> 3.0.0 (MAJOR)
|
||||
PROMPT - New Strategies: CURRENT_MONTH_ONLY, MINIMUM_AGE_MONTHS, HYBRID
|
||||
PROMPT - Backward Compatible: THRESHOLD_BASED (default)
|
||||
PROMPT
|
||||
PROMPT Next Steps:
|
||||
PROMPT 1. Configure archival strategies per source:
|
||||
PROMPT UPDATE A_SOURCE_FILE_CONFIG SET ARCHIVAL_STRATEGY = 'CURRENT_MONTH_ONLY' WHERE A_SOURCE_KEY = 'LM';
|
||||
PROMPT UPDATE A_SOURCE_FILE_CONFIG SET ARCHIVAL_STRATEGY = 'MINIMUM_AGE_MONTHS', MINIMUM_AGE_MONTHS = 6 WHERE A_SOURCE_KEY = 'CSDB';
|
||||
PROMPT 2. Test strategies using test_archival_strategies.sql
|
||||
PROMPT 3. Monitor first archival run
|
||||
PROMPT
|
||||
PROMPT Log file: &_filename
|
||||
PROMPT ============================================================================
|
||||
|
||||
spool off
|
||||
|
||||
quit;
|
||||
@@ -0,0 +1,238 @@
|
||||
|
||||
============================================================================
|
||||
MARS-828 Installation Starting (AUTO MODE)
|
||||
============================================================================
|
||||
|
||||
INSTALL_START
|
||||
______________________
|
||||
2026-01-29 19:52:51
|
||||
|
||||
1 row selected.
|
||||
|
||||
============================================================================
|
||||
|
||||
Step 1/7: Adding archival strategy columns
|
||||
===================================================================
|
||||
========================================
|
||||
MARS-828: Adding archival strategy columns
|
||||
========================================
|
||||
|
||||
Table CT_MRDS.A_SOURCE_FILE_CONFIG altered.
|
||||
|
||||
|
||||
Table CT_MRDS.A_SOURCE_FILE_CONFIG altered.
|
||||
|
||||
|
||||
Comment created.
|
||||
|
||||
|
||||
Comment created.
|
||||
|
||||
|
||||
COLUMN_NAME DATA_TYPE DATA_LENGTH NULLABLE DATA_DEFAULT
|
||||
_____________________ ____________ ______________ ___________ _____________________
|
||||
ARCHIVAL_STRATEGY VARCHAR2 30 N 'THRESHOLD_BASED'
|
||||
MINIMUM_AGE_MONTHS NUMBER 22 Y NULL
|
||||
|
||||
|
||||
2 rows selected.
|
||||
|
||||
========================================
|
||||
Archival strategy columns added successfully
|
||||
========================================
|
||||
|
||||
Step 2/7: Creating validation trigger
|
||||
======================================
|
||||
========================================
|
||||
MARS-828: Creating archival strategy validation trigger
|
||||
========================================
|
||||
|
||||
Trigger CT_MRDS.TRG_BI_A_SRC_FILE_CFG_ARCH_VAL compiled
|
||||
|
||||
|
||||
TRIGGER_NAME STATUS TRIGGER_TYPE TRIGGERING_EVENT
|
||||
_________________________________ __________ __________________ ___________________
|
||||
TRG_BI_A_SRC_FILE_CFG_ARCH_VAL ENABLED BEFORE EACH ROW INSERT OR UPDATE
|
||||
|
||||
1 row selected.
|
||||
|
||||
========================================
|
||||
Archival strategy validation trigger created successfully
|
||||
========================================
|
||||
|
||||
Step 3/7: Deploying FILE_ARCHIVER Spec v3.0.0
|
||||
===============================================================
|
||||
|
||||
Package CT_MRDS.FILE_ARCHIVER compiled
|
||||
|
||||
========================================
|
||||
FILE_ARCHIVER Specification v3.0.0 ready for installation
|
||||
========================================
|
||||
|
||||
Step 4/7: Deploying FILE_ARCHIVER Body v3.0.0
|
||||
======================================================
|
||||
|
||||
Package Body CT_MRDS.FILE_ARCHIVER compiled
|
||||
|
||||
|
||||
Step 5/7: Verifying installation
|
||||
=================================
|
||||
========================================
|
||||
MARS-828: Verification Script
|
||||
========================================
|
||||
|
||||
1. Verifying A_SOURCE_FILE_CONFIG columns...
|
||||
|
||||
COLUMN_NAME DATA_TYPE NULLABLE DATA_DEFAULT
|
||||
_____________________ ____________ ___________ _____________________
|
||||
ARCHIVAL_STRATEGY VARCHAR2 N 'THRESHOLD_BASED'
|
||||
MINIMUM_AGE_MONTHS NUMBER Y NULL
|
||||
|
||||
|
||||
2 rows selected.
|
||||
|
||||
|
||||
2. Verifying check constraint...
|
||||
|
||||
CONSTRAINT_NAME CONSTRAINT_TYPE SEARCH_CONDITION
|
||||
________________________ __________________ _________________________________________________________________________________________________________
|
||||
CHK_ARCHIVAL_STRATEGY C
|
||||
ARCHIVAL_STRATEGY IN ('THRESHOLD_BASED', 'CURRENT_MONTH_ONLY', 'MINIMUM_AGE_MONTHS', 'HYBRID')
|
||||
|
||||
|
||||
1 row selected.
|
||||
|
||||
|
||||
3. Verifying validation trigger...
|
||||
|
||||
TRIGGER_NAME STATUS TRIGGER_TYPE
|
||||
_________________________________ __________ __________________
|
||||
TRG_BI_A_SRC_FILE_CFG_ARCH_VAL ENABLED BEFORE EACH ROW
|
||||
|
||||
1 row selected.
|
||||
|
||||
|
||||
4. Checking FILE_ARCHIVER package status...
|
||||
|
||||
OBJECT_NAME OBJECT_TYPE STATUS LAST_DDL_TIME
|
||||
________________ _______________ _________ ______________________
|
||||
FILE_ARCHIVER PACKAGE VALID 2026-01-29 19:52:54
|
||||
FILE_ARCHIVER PACKAGE BODY VALID 2026-01-29 19:52:55
|
||||
|
||||
2 rows selected.
|
||||
|
||||
|
||||
5. Checking for compilation errors...
|
||||
|
||||
|
||||
0 rows selected.
|
||||
|
||||
|
||||
6. Verifying FILE_ARCHIVER version...
|
||||
|
||||
PACKAGE_VERSION
|
||||
__________________
|
||||
3.0.0
|
||||
|
||||
1 row selected.
|
||||
|
||||
|
||||
7. Testing trigger validation (should fail)...
|
||||
SUCCESS: Trigger validation working correctly
|
||||
Expected error: ORA-20999: MINIMUM_AGE_MONTHS is required for MINIMUM_AGE_MONTHS strategy
|
||||
ORA-06512: at "CT_MRDS.TRG_BI_A_SRC_FILE_CFG_ARCH_VAL", line 26
|
||||
ORA-06512: at "CT_MRDS.TRG_BI_A_SRC_FILE_CFG_ARCH_VAL", line 8
|
||||
ORA-04088: error during execution of trigger 'CT_MRDS.TRG_BI_A_SRC_FILE_CFG_ARCH_VAL'
|
||||
|
||||
|
||||
PL/SQL procedure successfully completed.
|
||||
|
||||
|
||||
========================================
|
||||
MARS-828: Verification Complete
|
||||
========================================
|
||||
|
||||
Step 6/7: Tracking package versions
|
||||
====================================
|
||||
========================================
|
||||
Package Version Tracking
|
||||
========================================
|
||||
EnvironmentID set to: dev
|
||||
[2026-01-29 19:53:00] [INFO] ENV_MANAGER.TRACK_PACKAGE_VERSION: Start TRACK_PACKAGE_VERSION
|
||||
[2026-01-29 19:53:01] [INFO] ENV_MANAGER.TRACK_PACKAGE_VERSION: End TRACK_PACKAGE_VERSION - Record inserted
|
||||
|
||||
Summary:
|
||||
--------
|
||||
Packages tracked: 1/1
|
||||
|
||||
Tracked Packages:
|
||||
CT_MRDS.FILE_ARCHIVER v3.0.0
|
||||
========================================
|
||||
|
||||
|
||||
PL/SQL procedure successfully completed.
|
||||
|
||||
|
||||
Step 7/7: Verifying tracked packages
|
||||
=====================================
|
||||
|
||||
========================================
|
||||
Package Version Verification
|
||||
========================================
|
||||
|
||||
|
||||
PACKAGE_OWNER PACKAGE_NAME VERSION STATUS
|
||||
________________ ___________________ __________ ______________________________________________________
|
||||
CT_MRDS DATA_EXPORTER 2.6.3 OK: Package CT_MRDS.DATA_EXPORTER has not changed.
|
||||
Last Tracked: 2026-01-28 19:18:36
|
||||
Version: 2.6.3
|
||||
CT_MRDS ENV_MANAGER 3.2.0 OK: Package CT_MRDS.ENV_MANAGER has not changed.
|
||||
Last Tracked: 2026-01-28 19:18:36
|
||||
Version: 3.2.0
|
||||
CT_MRDS FILE_ARCHIVER 3.0.0 OK: Package CT_MRDS.FILE_ARCHIVER has not changed.
|
||||
Last Tracked: 2026-01-29 19:53:01
|
||||
Version: 3.0.0
|
||||
CT_MRDS FILE_MANAGER 3.4.0 OK: Package CT_MRDS.FILE_MANAGER has not changed.
|
||||
Last Tracked: 2026-01-26 11:42:32
|
||||
Version: 3.4.0
|
||||
CT_MRDS WORKFLOW_MANAGER 1.7.1 OK: Package CT_MRDS.WORKFLOW_MANAGER has not changed.
|
||||
Last Tracked: 2025-11-25 16:00:36
|
||||
Version: 1.7.1
|
||||
ODS FILE_MANAGER_ODS 2.1.0 WARNING: Package ODS.FILE_MANAGER_ODS has changed!
|
||||
========================================
|
||||
Last Tracked Version: 2.1.0
|
||||
Last Tracked Date: 2025-11-26 08:58:57
|
||||
|
||||
BODY Changed:
|
||||
Current Hash: 1d167a53256c10dd...
|
||||
Last Hash: NULL...
|
||||
|
||||
RECOMMENDATION:
|
||||
1. Update PACKAGE_VERSION constant
|
||||
2. Update PACKAGE_BUILD_DATE constant
|
||||
3. Add entry to VERSION_HISTORY
|
||||
4. Call TRACK_PACKAGE_VERSION to update tracking
|
||||
|
||||
========================================
|
||||
Verification Complete
|
||||
========================================
|
||||
|
||||
Legend:
|
||||
OK - Package has not changed since last tracking
|
||||
WARNING - Package code changed without version update
|
||||
|
||||
For detailed hash information, use:
|
||||
SELECT ENV_MANAGER.GET_PACKAGE_HASH_INFO('OWNER', 'PACKAGE') FROM DUAL
|
||||
========================================
|
||||
|
||||
============================================================================
|
||||
MARS-828 Installation Completed
|
||||
============================================================================
|
||||
|
||||
INSTALL_END
|
||||
______________________
|
||||
2026-01-29 19:53:02
|
||||
|
||||
1 row selected.
|
||||
|
||||
============================================================================
|
||||
44
MARS_Packages/REL01_ADDITIONS/MARS-828/test/quick_test.sql
Normal file
44
MARS_Packages/REL01_ADDITIONS/MARS-828/test/quick_test.sql
Normal file
@@ -0,0 +1,44 @@
|
||||
-- ===================================================================
|
||||
-- MARS-828 Comprehensive Test Suite
|
||||
-- ===================================================================
|
||||
-- Purpose: Test all installation steps and archival strategies
|
||||
-- Author: Grzegorz Michalski
|
||||
-- Date: 2026-01-28
|
||||
-- ===================================================================
|
||||
|
||||
SET SERVEROUTPUT ON SIZE UNLIMITED
|
||||
SET FEEDBACK ON
|
||||
SET ECHO ON
|
||||
|
||||
PROMPT ===================================================================
|
||||
PROMPT MARS-828 COMPREHENSIVE TEST - START
|
||||
PROMPT ===================================================================
|
||||
|
||||
-- STEP 1: Add Columns
|
||||
PROMPT
|
||||
PROMPT STEP 1: Adding Archival Strategy Columns
|
||||
PROMPT ===================================================================
|
||||
ALTER TABLE CT_MRDS.A_SOURCE_FILE_CONFIG ADD (
|
||||
ARCHIVAL_STRATEGY VARCHAR2(30) DEFAULT 'THRESHOLD_BASED' NOT NULL,
|
||||
MINIMUM_AGE_MONTHS NUMBER(3) DEFAULT NULL
|
||||
);
|
||||
|
||||
ALTER TABLE CT_MRDS.A_SOURCE_FILE_CONFIG ADD CONSTRAINT
|
||||
CHK_ARCHIVAL_STRATEGY CHECK (ARCHIVAL_STRATEGY IN ('THRESHOLD_BASED', 'CURRENT_MONTH_ONLY', 'MINIMUM_AGE_MONTHS', 'HYBRID'));
|
||||
|
||||
SELECT column_name, data_type, nullable FROM all_tab_columns
|
||||
WHERE owner = 'CT_MRDS' AND table_name = 'A_SOURCE_FILE_CONFIG'
|
||||
AND column_name IN ('ARCHIVAL_STRATEGY', 'MINIMUM_AGE_MONTHS');
|
||||
|
||||
PROMPT STEP 1 - COMPLETE
|
||||
|
||||
-- STEP 2: Verify FILE_ARCHIVER version
|
||||
PROMPT
|
||||
PROMPT STEP 2: Checking Current FILE_ARCHIVER Version
|
||||
PROMPT ===================================================================
|
||||
SELECT CT_MRDS.FILE_ARCHIVER.GET_VERSION() AS current_version FROM DUAL;
|
||||
|
||||
PROMPT ===================================================================
|
||||
PROMPT TEST SUITE PARTIAL EXECUTION COMPLETE
|
||||
PROMPT Next: Execute package updates manually
|
||||
PROMPT ===================================================================
|
||||
@@ -0,0 +1,87 @@
|
||||
-- ===================================================================
|
||||
-- MARS-828: Auto Rollback (bypasses confirmation)
|
||||
-- ===================================================================
|
||||
-- Purpose: Rollback MARS-828 without user prompts
|
||||
-- Author: Grzegorz Michalski
|
||||
-- Date: 2026-01-29
|
||||
-- ===================================================================
|
||||
|
||||
-- Dynamic spool file generation
|
||||
host mkdir ..\log 2>nul
|
||||
|
||||
var filename VARCHAR2(100)
|
||||
BEGIN
|
||||
:filename := '../log/ROLLBACK_MARS_828_AUTO_' || SYS_CONTEXT('USERENV', 'CON_NAME') || '_' || TO_CHAR(SYSDATE,'YYYYMMDD_HH24MISS') || '.log';
|
||||
END;
|
||||
/
|
||||
column filename new_value _filename
|
||||
select :filename filename from dual;
|
||||
spool &_filename
|
||||
|
||||
SET ECHO OFF
|
||||
SET TIMING ON
|
||||
SET SERVEROUTPUT ON SIZE UNLIMITED
|
||||
SET LINESIZE 200
|
||||
SET PAGESIZE 1000
|
||||
SET PAUSE OFF
|
||||
|
||||
PROMPT
|
||||
PROMPT ============================================================================
|
||||
PROMPT MARS-828 Rollback Starting (AUTO MODE - No Confirmation)
|
||||
PROMPT ============================================================================
|
||||
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS rollback_start FROM DUAL;
|
||||
PROMPT ============================================================================
|
||||
|
||||
-- Rollback steps (in reverse order)
|
||||
PROMPT
|
||||
PROMPT Step 1/6: Restoring FILE_ARCHIVER Package Specification v2.0.0
|
||||
PROMPT ===============================================================
|
||||
@@../91_MARS_828_rollback_FILE_ARCHIVER_SPEC.sql
|
||||
|
||||
PROMPT
|
||||
PROMPT Step 2/6: Restoring FILE_ARCHIVER Package Body v2.0.0
|
||||
PROMPT ======================================================
|
||||
@@../92_MARS_828_rollback_FILE_ARCHIVER_BODY.sql
|
||||
|
||||
PROMPT
|
||||
PROMPT Step 3/6: Dropping validation trigger
|
||||
PROMPT ======================================
|
||||
@@../93_MARS_828_rollback_trigger.sql
|
||||
|
||||
PROMPT
|
||||
PROMPT Step 4/6: Dropping archival strategy columns
|
||||
PROMPT =============================================
|
||||
@@../94_MARS_828_rollback_columns.sql
|
||||
|
||||
PROMPT
|
||||
PROMPT Step 5/6: Tracking rollback version
|
||||
PROMPT ====================================
|
||||
@@../track_package_versions.sql
|
||||
|
||||
PROMPT
|
||||
PROMPT Step 6/6: Verifying tracked packages
|
||||
PROMPT =====================================
|
||||
@@../verify_packages_version.sql
|
||||
|
||||
-- Verify rollback
|
||||
PROMPT
|
||||
PROMPT Verification: Package Compilation Status
|
||||
PROMPT =========================================
|
||||
SELECT object_name, object_type, status, last_ddl_time
|
||||
FROM all_objects
|
||||
WHERE owner = 'CT_MRDS'
|
||||
AND object_name = 'FILE_ARCHIVER'
|
||||
AND object_type IN ('PACKAGE', 'PACKAGE BODY')
|
||||
ORDER BY object_type;
|
||||
|
||||
PROMPT
|
||||
PROMPT ============================================================================
|
||||
PROMPT MARS-828 Rollback Completed
|
||||
PROMPT ============================================================================
|
||||
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS rollback_end FROM DUAL;
|
||||
PROMPT
|
||||
PROMPT Log file: &_filename
|
||||
PROMPT ============================================================================
|
||||
|
||||
spool off
|
||||
quit;
|
||||
@@ -0,0 +1,40 @@
|
||||
# MARS-828 Test Execution Script
|
||||
# Purpose: Run rollback and installation tests
|
||||
# Author: Grzegorz Michalski
|
||||
# Date: 2026-01-29
|
||||
|
||||
Write-Host "`n========================================" -ForegroundColor Cyan
|
||||
Write-Host "MARS-828 Testing Suite" -ForegroundColor Cyan
|
||||
Write-Host "========================================`n" -ForegroundColor Cyan
|
||||
|
||||
$connectionString = "ADMIN/Cloudpass#34@ggmichalski_high"
|
||||
$marsFolder = Split-Path -Parent $PSScriptRoot
|
||||
|
||||
Write-Host "Test 1: Rollback to v2.0.0" -ForegroundColor Yellow
|
||||
Write-Host "========================================" -ForegroundColor Yellow
|
||||
$rollbackCmd = "cd '$marsFolder'; sql '$connectionString' '@rollback_mars828.sql'"
|
||||
Write-Host "Command: $rollbackCmd`n" -ForegroundColor Gray
|
||||
Invoke-Expression $rollbackCmd
|
||||
|
||||
Write-Host "`nWaiting 5 seconds before installation...`n" -ForegroundColor Gray
|
||||
Start-Sleep -Seconds 5
|
||||
|
||||
Write-Host "Test 2: Installation v3.0.0 (Auto Mode)" -ForegroundColor Yellow
|
||||
Write-Host "========================================" -ForegroundColor Yellow
|
||||
$installCmd = "cd '$PSScriptRoot'; sql '$connectionString' '@auto_install.sql'"
|
||||
Write-Host "Command: $installCmd`n" -ForegroundColor Gray
|
||||
Invoke-Expression $installCmd
|
||||
|
||||
Write-Host "`nWaiting 5 seconds before verification...`n" -ForegroundColor Gray
|
||||
Start-Sleep -Seconds 5
|
||||
|
||||
Write-Host "Test 3: Final Summary" -ForegroundColor Yellow
|
||||
Write-Host "========================================" -ForegroundColor Yellow
|
||||
$summaryCmd = "cd '$PSScriptRoot'; sql 'CT_MRDS/$connectionString' '@final_summary.sql'"
|
||||
Write-Host "Command: $summaryCmd`n" -ForegroundColor Gray
|
||||
Invoke-Expression $summaryCmd
|
||||
|
||||
Write-Host "`n========================================" -ForegroundColor Green
|
||||
Write-Host "MARS-828 Testing Complete" -ForegroundColor Green
|
||||
Write-Host "========================================`n" -ForegroundColor Green
|
||||
Write-Host "Check log files in: $marsFolder\log\" -ForegroundColor Cyan
|
||||
20
MARS_Packages/REL01_ADDITIONS/MARS-828/test/run_tests.ps1
Normal file
20
MARS_Packages/REL01_ADDITIONS/MARS-828/test/run_tests.ps1
Normal file
@@ -0,0 +1,20 @@
|
||||
# MARS-828 Installation and Testing Script
|
||||
# Run from: MARS_Packages\REL01_ADDITIONS\MARS-828\
|
||||
|
||||
Write-Host "`n========================================" -ForegroundColor Cyan
|
||||
Write-Host "MARS-828: Installation & Testing Script" -ForegroundColor Cyan
|
||||
Write-Host "========================================`n" -ForegroundColor Cyan
|
||||
|
||||
$ErrorActionPreference = "Continue"
|
||||
$scriptDir = "c:\_git\_local_rep\working_dir_02\MARS_Packages\REL01_ADDITIONS\MARS-828"
|
||||
|
||||
# Test 1: Install MARS-828
|
||||
Write-Host "Test 1: Installing MARS-828..." -ForegroundColor Yellow
|
||||
$installCmd = @"
|
||||
cd $scriptDir
|
||||
echo "exit" | sql "ADMIN/Cloudpass#34@ggmichalski_high" "@auto_install.sql"
|
||||
"@
|
||||
Invoke-Expression $installCmd | Out-File -FilePath "$scriptDir\test_results.txt" -Encoding UTF8
|
||||
|
||||
Write-Host "`nInstallation log saved to: test_results.txt" -ForegroundColor Green
|
||||
Write-Host "`nCheck log file for results..." -ForegroundColor Yellow
|
||||
@@ -0,0 +1,200 @@
|
||||
-- ===================================================================
|
||||
-- MARS-828: Fix CSDB configuration and test all archival strategies
|
||||
-- ===================================================================
|
||||
-- Purpose: Correct CSDB strategy and comprehensive testing
|
||||
-- Author: Grzegorz Michalski
|
||||
-- Date: 2026-01-28
|
||||
-- ===================================================================
|
||||
|
||||
SET SERVEROUTPUT ON SIZE UNLIMITED
|
||||
SET LINESIZE 200
|
||||
SET PAGESIZE 1000
|
||||
|
||||
PROMPT
|
||||
PROMPT ========================================
|
||||
PROMPT MARS-828: Fix Configuration & Test Strategies
|
||||
PROMPT ========================================
|
||||
PROMPT
|
||||
|
||||
-- Step 1: Fix CSDB configurations (all CSDB_DEBT* tables)
|
||||
PROMPT Step 1: Updating CSDB configurations...
|
||||
PROMPT ========================================
|
||||
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
|
||||
SET ARCHIVAL_STRATEGY = 'MINIMUM_AGE_MONTHS',
|
||||
MINIMUM_AGE_MONTHS = 6
|
||||
WHERE A_SOURCE_KEY = 'CSDB'
|
||||
AND SOURCE_FILE_TYPE = 'INPUT'
|
||||
AND TABLE_ID LIKE 'CSDB_DEBT%';
|
||||
|
||||
COMMIT;
|
||||
|
||||
-- Step 2: Verify updated CSDB configurations
|
||||
PROMPT
|
||||
PROMPT Step 2: Verify CSDB Configurations
|
||||
PROMPT ====================================
|
||||
SELECT
|
||||
SOURCE_FILE_ID,
|
||||
TABLE_ID,
|
||||
ARCHIVAL_STRATEGY,
|
||||
MINIMUM_AGE_MONTHS
|
||||
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;
|
||||
|
||||
-- Step 3: View final test configurations
|
||||
PROMPT
|
||||
PROMPT Step 3: Final Test Configurations
|
||||
PROMPT ==================================
|
||||
SELECT
|
||||
A_SOURCE_KEY,
|
||||
SUBSTR(TABLE_ID, 1, 35) AS TABLE_ID,
|
||||
ARCHIVAL_STRATEGY,
|
||||
MINIMUM_AGE_MONTHS,
|
||||
DAYS_FOR_ARCHIVE_THRESHOLD
|
||||
FROM CT_MRDS.A_SOURCE_FILE_CONFIG
|
||||
WHERE SOURCE_FILE_TYPE = 'INPUT'
|
||||
AND (
|
||||
(A_SOURCE_KEY = 'C2D' AND SOURCE_FILE_ID = 'UC_ACC')
|
||||
OR (A_SOURCE_KEY = 'LM' AND SOURCE_FILE_ID = 'AdhocAdjustment' AND TABLE_ID = 'LM_ADHOC_ADJUSTMENTS_ITEM')
|
||||
OR (A_SOURCE_KEY = 'CSDB' AND TABLE_ID LIKE 'CSDB_DEBT%')
|
||||
OR (A_SOURCE_KEY = 'TOP' AND TABLE_ID = 'TOP_FULLBID_ARRAY_COMPILED')
|
||||
)
|
||||
ORDER BY
|
||||
CASE A_SOURCE_KEY
|
||||
WHEN 'C2D' THEN 1
|
||||
WHEN 'LM' THEN 2
|
||||
WHEN 'CSDB' THEN 3
|
||||
WHEN 'TOP' THEN 4
|
||||
END,
|
||||
TABLE_ID;
|
||||
|
||||
-- Step 4: Test GET_ARCHIVAL_WHERE_CLAUSE via DBMS_OUTPUT
|
||||
PROMPT
|
||||
PROMPT Step 4: Testing WHERE Clause Generation
|
||||
PROMPT ========================================
|
||||
DECLARE
|
||||
vConfig CT_MRDS.A_SOURCE_FILE_CONFIG%ROWTYPE;
|
||||
vWhereClause VARCHAR2(4000);
|
||||
BEGIN
|
||||
-- Test 1: THRESHOLD_BASED
|
||||
SELECT * INTO vConfig
|
||||
FROM CT_MRDS.A_SOURCE_FILE_CONFIG
|
||||
WHERE A_SOURCE_KEY = 'C2D'
|
||||
AND SOURCE_FILE_ID = 'UC_ACC'
|
||||
AND ROWNUM = 1;
|
||||
DBMS_OUTPUT.PUT_LINE('========================================');
|
||||
DBMS_OUTPUT.PUT_LINE('Test 1: THRESHOLD_BASED (C2D/UC_ACC)');
|
||||
DBMS_OUTPUT.PUT_LINE('Expected: extract(day from (systimestamp - workflow_start)) > 30');
|
||||
DBMS_OUTPUT.PUT_LINE('NOTE: Cannot test private function directly');
|
||||
DBMS_OUTPUT.PUT_LINE('Strategy: ' || vConfig.ARCHIVAL_STRATEGY);
|
||||
DBMS_OUTPUT.PUT_LINE('Threshold: ' || vConfig.DAYS_FOR_ARCHIVE_THRESHOLD);
|
||||
|
||||
-- Test 2: CURRENT_MONTH_ONLY
|
||||
SELECT * INTO vConfig
|
||||
FROM CT_MRDS.A_SOURCE_FILE_CONFIG
|
||||
WHERE A_SOURCE_KEY = 'LM'
|
||||
AND SOURCE_FILE_ID = 'AdhocAdjustment'
|
||||
AND TABLE_ID = 'LM_ADHOC_ADJUSTMENTS_ITEM'
|
||||
AND ROWNUM = 1;
|
||||
DBMS_OUTPUT.PUT_LINE('========================================');
|
||||
DBMS_OUTPUT.PUT_LINE('Test 2: CURRENT_MONTH_ONLY (LM/AdhocAdjustment)');
|
||||
DBMS_OUTPUT.PUT_LINE('Expected: TRUNC(workflow_start, ''MM'') < TRUNC(SYSDATE, ''MM'')');
|
||||
DBMS_OUTPUT.PUT_LINE('Strategy: ' || vConfig.ARCHIVAL_STRATEGY);
|
||||
DBMS_OUTPUT.PUT_LINE('Min Age: ' || NVL(TO_CHAR(vConfig.MINIMUM_AGE_MONTHS), 'NULL'));
|
||||
|
||||
-- Test 3: MINIMUM_AGE_MONTHS
|
||||
SELECT * INTO vConfig
|
||||
FROM CT_MRDS.A_SOURCE_FILE_CONFIG
|
||||
WHERE A_SOURCE_KEY = 'CSDB'
|
||||
AND TABLE_ID = 'CSDB_DEBT'
|
||||
AND ROWNUM = 1;
|
||||
DBMS_OUTPUT.PUT_LINE('========================================');
|
||||
DBMS_OUTPUT.PUT_LINE('Test 3: MINIMUM_AGE_MONTHS (CSDB/CSDB_DEBT)');
|
||||
DBMS_OUTPUT.PUT_LINE('Expected: workflow_start < ADD_MONTHS(TRUNC(SYSDATE, ''MM''), -6)');
|
||||
DBMS_OUTPUT.PUT_LINE('Strategy: ' || vConfig.ARCHIVAL_STRATEGY);
|
||||
DBMS_OUTPUT.PUT_LINE('Min Age: ' || vConfig.MINIMUM_AGE_MONTHS || ' months');
|
||||
|
||||
-- Test 4: HYBRID
|
||||
SELECT * INTO vConfig
|
||||
FROM CT_MRDS.A_SOURCE_FILE_CONFIG
|
||||
WHERE A_SOURCE_KEY = 'TOP'
|
||||
AND TABLE_ID = 'TOP_FULLBID_ARRAY_COMPILED'
|
||||
AND ROWNUM = 1;
|
||||
DBMS_OUTPUT.PUT_LINE('========================================');
|
||||
DBMS_OUTPUT.PUT_LINE('Test 4: HYBRID (TOP/TOP_FULLBID_ARRAY_COMPILED)');
|
||||
DBMS_OUTPUT.PUT_LINE('Expected: TRUNC(workflow_start, ''MM'') < TRUNC(SYSDATE, ''MM'')');
|
||||
DBMS_OUTPUT.PUT_LINE(' AND workflow_start < ADD_MONTHS(TRUNC(SYSDATE, ''MM''), -3)');
|
||||
DBMS_OUTPUT.PUT_LINE('Strategy: ' || vConfig.ARCHIVAL_STRATEGY);
|
||||
DBMS_OUTPUT.PUT_LINE('Min Age: ' || vConfig.MINIMUM_AGE_MONTHS || ' months');
|
||||
DBMS_OUTPUT.PUT_LINE('========================================');
|
||||
END;
|
||||
/
|
||||
|
||||
-- Step 5: Test archival statistics simulation
|
||||
PROMPT
|
||||
PROMPT Step 5: Archive Statistics Simulation
|
||||
PROMPT ======================================
|
||||
PROMPT NOTE: This simulates what GATHER_TABLE_STAT would calculate
|
||||
PROMPT
|
||||
|
||||
-- Create test scenario date ranges
|
||||
DECLARE
|
||||
vCurrentDate DATE := TRUNC(SYSDATE);
|
||||
vCurrentMonth DATE := TRUNC(SYSDATE, 'MM');
|
||||
v3MonthsAgo DATE := ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -3);
|
||||
v6MonthsAgo DATE := ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -6);
|
||||
v30DaysAgo DATE := SYSDATE - 30;
|
||||
BEGIN
|
||||
DBMS_OUTPUT.PUT_LINE('Current Date: ' || TO_CHAR(vCurrentDate, 'YYYY-MM-DD'));
|
||||
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('');
|
||||
|
||||
-- Example: Data from 2024-08-15 (CSDB DEBT)
|
||||
-- Would be archived with MINIMUM_AGE_MONTHS=6?
|
||||
IF DATE '2024-08-15' < v6MonthsAgo THEN
|
||||
DBMS_OUTPUT.PUT_LINE('CSDB Example: 2024-08-15 WOULD be archived (older than 6 months)');
|
||||
ELSE
|
||||
DBMS_OUTPUT.PUT_LINE('CSDB Example: 2024-08-15 would NOT be archived (within 6 months)');
|
||||
END IF;
|
||||
|
||||
-- Example: Data from 2025-12-20 (LM)
|
||||
-- Would be archived with CURRENT_MONTH_ONLY?
|
||||
IF TRUNC(DATE '2025-12-20', 'MM') < vCurrentMonth THEN
|
||||
DBMS_OUTPUT.PUT_LINE('LM Example: 2025-12-20 WOULD be archived (previous month)');
|
||||
ELSE
|
||||
DBMS_OUTPUT.PUT_LINE('LM Example: 2025-12-20 would NOT be archived (current month)');
|
||||
END IF;
|
||||
|
||||
-- Example: Data from 2025-10-10 (TOP HYBRID)
|
||||
-- Would be archived with HYBRID (current month + 3 months)?
|
||||
IF TRUNC(DATE '2025-10-10', 'MM') < vCurrentMonth
|
||||
AND DATE '2025-10-10' < v3MonthsAgo THEN
|
||||
DBMS_OUTPUT.PUT_LINE('TOP Example: 2025-10-10 WOULD be archived (previous month AND older than 3 months)');
|
||||
ELSE
|
||||
DBMS_OUTPUT.PUT_LINE('TOP Example: 2025-10-10 would NOT be archived (within 3 months or current month)');
|
||||
END IF;
|
||||
END;
|
||||
/
|
||||
|
||||
PROMPT
|
||||
PROMPT ========================================
|
||||
PROMPT MARS-828: Configuration & Testing Complete
|
||||
PROMPT ========================================
|
||||
PROMPT
|
||||
PROMPT Summary:
|
||||
PROMPT - All 4 strategies configured correctly
|
||||
PROMPT - CSDB: 4 tables updated to MINIMUM_AGE_MONTHS (6 months)
|
||||
PROMPT - LM: 1 table configured as CURRENT_MONTH_ONLY
|
||||
PROMPT - TOP: 1 table configured as HYBRID (3 months)
|
||||
PROMPT - C2D: 1 table kept as THRESHOLD_BASED (30 days)
|
||||
PROMPT
|
||||
PROMPT Next Steps:
|
||||
PROMPT - Test ARCHIVE_TABLE_DATA with real data
|
||||
PROMPT - Test GATHER_TABLE_STAT calculations
|
||||
PROMPT - Verify archival operations in production scenario
|
||||
PROMPT ========================================
|
||||
@@ -0,0 +1,253 @@
|
||||
-- MARS-828: Test archival strategies
|
||||
-- Author: Grzegorz Michalski
|
||||
-- Date: 2026-01-27
|
||||
-- Description: Comprehensive test scenarios for all archival strategies
|
||||
|
||||
SET SERVEROUTPUT ON SIZE UNLIMITED
|
||||
|
||||
PROMPT ========================================
|
||||
PROMPT MARS-828: Testing Archival Strategies
|
||||
PROMPT ========================================
|
||||
|
||||
-- Test 1: THRESHOLD_BASED (backward compatibility)
|
||||
PROMPT
|
||||
PROMPT Test 1: THRESHOLD_BASED strategy
|
||||
DECLARE
|
||||
vTestKey NUMBER := -1000;
|
||||
BEGIN
|
||||
INSERT INTO CT_MRDS.A_SOURCE_FILE_CONFIG (
|
||||
A_SOURCE_FILE_CONFIG_KEY,
|
||||
A_SOURCE_KEY,
|
||||
SOURCE_FILE_TYPE,
|
||||
SOURCE_FILE_ID,
|
||||
SOURCE_FILE_DESC,
|
||||
SOURCE_FILE_NAME_PATTERN,
|
||||
TABLE_ID,
|
||||
TEMPLATE_TABLE_NAME,
|
||||
ARCHIVAL_STRATEGY,
|
||||
DAYS_FOR_ARCHIVE_THRESHOLD
|
||||
) VALUES (
|
||||
vTestKey,
|
||||
'TEST1',
|
||||
'INPUT',
|
||||
'TEST_THRESHOLD',
|
||||
'Test threshold-based',
|
||||
'test*.csv',
|
||||
'TEST_TABLE',
|
||||
'CT_ET_TEMPLATES.TEST',
|
||||
'THRESHOLD_BASED',
|
||||
30
|
||||
);
|
||||
|
||||
DBMS_OUTPUT.PUT_LINE('SUCCESS: THRESHOLD_BASED strategy configured');
|
||||
ROLLBACK;
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
DBMS_OUTPUT.PUT_LINE('FAILED: ' || SQLERRM);
|
||||
ROLLBACK;
|
||||
END;
|
||||
/
|
||||
|
||||
-- Test 2: CURRENT_MONTH_ONLY
|
||||
PROMPT
|
||||
PROMPT Test 2: CURRENT_MONTH_ONLY strategy
|
||||
DECLARE
|
||||
vTestKey NUMBER := -1001;
|
||||
BEGIN
|
||||
INSERT INTO CT_MRDS.A_SOURCE_FILE_CONFIG (
|
||||
A_SOURCE_FILE_CONFIG_KEY,
|
||||
A_SOURCE_KEY,
|
||||
SOURCE_FILE_TYPE,
|
||||
SOURCE_FILE_ID,
|
||||
SOURCE_FILE_DESC,
|
||||
SOURCE_FILE_NAME_PATTERN,
|
||||
TABLE_ID,
|
||||
TEMPLATE_TABLE_NAME,
|
||||
ARCHIVAL_STRATEGY
|
||||
) VALUES (
|
||||
vTestKey,
|
||||
'TEST2',
|
||||
'INPUT',
|
||||
'TEST_CURRENT_MONTH',
|
||||
'Test current month only',
|
||||
'test*.csv',
|
||||
'TEST_TABLE',
|
||||
'CT_ET_TEMPLATES.TEST',
|
||||
'CURRENT_MONTH_ONLY'
|
||||
);
|
||||
|
||||
DBMS_OUTPUT.PUT_LINE('SUCCESS: CURRENT_MONTH_ONLY strategy configured');
|
||||
ROLLBACK;
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
DBMS_OUTPUT.PUT_LINE('FAILED: ' || SQLERRM);
|
||||
ROLLBACK;
|
||||
END;
|
||||
/
|
||||
|
||||
-- Test 3: MINIMUM_AGE_MONTHS (should succeed)
|
||||
PROMPT
|
||||
PROMPT Test 3: MINIMUM_AGE_MONTHS strategy with valid config
|
||||
DECLARE
|
||||
vTestKey NUMBER := -1002;
|
||||
BEGIN
|
||||
INSERT INTO CT_MRDS.A_SOURCE_FILE_CONFIG (
|
||||
A_SOURCE_FILE_CONFIG_KEY,
|
||||
A_SOURCE_KEY,
|
||||
SOURCE_FILE_TYPE,
|
||||
SOURCE_FILE_ID,
|
||||
SOURCE_FILE_DESC,
|
||||
SOURCE_FILE_NAME_PATTERN,
|
||||
TABLE_ID,
|
||||
TEMPLATE_TABLE_NAME,
|
||||
ARCHIVAL_STRATEGY,
|
||||
MINIMUM_AGE_MONTHS
|
||||
) VALUES (
|
||||
vTestKey,
|
||||
'TEST3',
|
||||
'INPUT',
|
||||
'TEST_MIN_AGE',
|
||||
'Test minimum age months',
|
||||
'test*.csv',
|
||||
'TEST_TABLE',
|
||||
'CT_ET_TEMPLATES.TEST',
|
||||
'MINIMUM_AGE_MONTHS',
|
||||
6
|
||||
);
|
||||
|
||||
DBMS_OUTPUT.PUT_LINE('SUCCESS: MINIMUM_AGE_MONTHS strategy configured with 6 months');
|
||||
ROLLBACK;
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
DBMS_OUTPUT.PUT_LINE('FAILED: ' || SQLERRM);
|
||||
ROLLBACK;
|
||||
END;
|
||||
/
|
||||
|
||||
-- Test 4: MINIMUM_AGE_MONTHS without value (should fail)
|
||||
PROMPT
|
||||
PROMPT Test 4: MINIMUM_AGE_MONTHS strategy without value (should fail)
|
||||
DECLARE
|
||||
vTestKey NUMBER := -1003;
|
||||
BEGIN
|
||||
INSERT INTO CT_MRDS.A_SOURCE_FILE_CONFIG (
|
||||
A_SOURCE_FILE_CONFIG_KEY,
|
||||
A_SOURCE_KEY,
|
||||
SOURCE_FILE_TYPE,
|
||||
SOURCE_FILE_ID,
|
||||
SOURCE_FILE_DESC,
|
||||
SOURCE_FILE_NAME_PATTERN,
|
||||
TABLE_ID,
|
||||
TEMPLATE_TABLE_NAME,
|
||||
ARCHIVAL_STRATEGY,
|
||||
MINIMUM_AGE_MONTHS
|
||||
) VALUES (
|
||||
vTestKey,
|
||||
'TEST4',
|
||||
'INPUT',
|
||||
'TEST_MIN_AGE_FAIL',
|
||||
'Test minimum age months failure',
|
||||
'test*.csv',
|
||||
'TEST_TABLE',
|
||||
'CT_ET_TEMPLATES.TEST',
|
||||
'MINIMUM_AGE_MONTHS',
|
||||
NULL -- Should trigger error
|
||||
);
|
||||
|
||||
DBMS_OUTPUT.PUT_LINE('FAILED: Trigger did not fire - this should have failed!');
|
||||
ROLLBACK;
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
IF SQLCODE = -20999 THEN
|
||||
DBMS_OUTPUT.PUT_LINE('SUCCESS: Trigger correctly prevented invalid config');
|
||||
ELSE
|
||||
DBMS_OUTPUT.PUT_LINE('FAILED: Unexpected error: ' || SQLERRM);
|
||||
END IF;
|
||||
ROLLBACK;
|
||||
END;
|
||||
/
|
||||
|
||||
-- Test 5: HYBRID strategy
|
||||
PROMPT
|
||||
PROMPT Test 5: HYBRID strategy
|
||||
DECLARE
|
||||
vTestKey NUMBER := -1004;
|
||||
BEGIN
|
||||
INSERT INTO CT_MRDS.A_SOURCE_FILE_CONFIG (
|
||||
A_SOURCE_FILE_CONFIG_KEY,
|
||||
A_SOURCE_KEY,
|
||||
SOURCE_FILE_TYPE,
|
||||
SOURCE_FILE_ID,
|
||||
SOURCE_FILE_DESC,
|
||||
SOURCE_FILE_NAME_PATTERN,
|
||||
TABLE_ID,
|
||||
TEMPLATE_TABLE_NAME,
|
||||
ARCHIVAL_STRATEGY,
|
||||
MINIMUM_AGE_MONTHS
|
||||
) VALUES (
|
||||
vTestKey,
|
||||
'TEST5',
|
||||
'INPUT',
|
||||
'TEST_HYBRID',
|
||||
'Test hybrid strategy',
|
||||
'test*.csv',
|
||||
'TEST_TABLE',
|
||||
'CT_ET_TEMPLATES.TEST',
|
||||
'HYBRID',
|
||||
3
|
||||
);
|
||||
|
||||
DBMS_OUTPUT.PUT_LINE('SUCCESS: HYBRID strategy configured');
|
||||
ROLLBACK;
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
DBMS_OUTPUT.PUT_LINE('FAILED: ' || SQLERRM);
|
||||
ROLLBACK;
|
||||
END;
|
||||
/
|
||||
|
||||
-- Test 6: Invalid strategy (should fail)
|
||||
PROMPT
|
||||
PROMPT Test 6: Invalid strategy (should fail)
|
||||
DECLARE
|
||||
vTestKey NUMBER := -1005;
|
||||
BEGIN
|
||||
INSERT INTO CT_MRDS.A_SOURCE_FILE_CONFIG (
|
||||
A_SOURCE_FILE_CONFIG_KEY,
|
||||
A_SOURCE_KEY,
|
||||
SOURCE_FILE_TYPE,
|
||||
SOURCE_FILE_ID,
|
||||
SOURCE_FILE_DESC,
|
||||
SOURCE_FILE_NAME_PATTERN,
|
||||
TABLE_ID,
|
||||
TEMPLATE_TABLE_NAME,
|
||||
ARCHIVAL_STRATEGY
|
||||
) VALUES (
|
||||
vTestKey,
|
||||
'TEST6',
|
||||
'INPUT',
|
||||
'TEST_INVALID',
|
||||
'Test invalid strategy',
|
||||
'test*.csv',
|
||||
'TEST_TABLE',
|
||||
'CT_ET_TEMPLATES.TEST',
|
||||
'INVALID_STRATEGY'
|
||||
);
|
||||
|
||||
DBMS_OUTPUT.PUT_LINE('FAILED: Check constraint did not fire!');
|
||||
ROLLBACK;
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
IF SQLCODE = -2290 THEN
|
||||
DBMS_OUTPUT.PUT_LINE('SUCCESS: Check constraint prevented invalid strategy');
|
||||
ELSE
|
||||
DBMS_OUTPUT.PUT_LINE('FAILED: Unexpected error: ' || SQLERRM);
|
||||
END IF;
|
||||
ROLLBACK;
|
||||
END;
|
||||
/
|
||||
|
||||
PROMPT
|
||||
PROMPT ========================================
|
||||
PROMPT MARS-828: Testing Complete
|
||||
PROMPT ========================================
|
||||
36
MARS_Packages/REL01_ADDITIONS/MARS-828/test/test_install.sql
Normal file
36
MARS_Packages/REL01_ADDITIONS/MARS-828/test/test_install.sql
Normal file
@@ -0,0 +1,36 @@
|
||||
-- MARS-828 Test Installation (Automated)
|
||||
-- This script bypasses ACCEPT prompts for automated testing
|
||||
|
||||
SET SERVEROUTPUT ON SIZE UNLIMITED
|
||||
SET VERIFY OFF
|
||||
SET FEEDBACK ON
|
||||
SET ECHO ON
|
||||
|
||||
PROMPT ===============================================
|
||||
PROMPT MARS-828 Automated Test Installation
|
||||
PROMPT ===============================================
|
||||
|
||||
-- Step 1: Add columns
|
||||
@@01_MARS_828_install_add_archival_strategy_columns.sql
|
||||
|
||||
-- Step 2: Create trigger
|
||||
@@02_MARS_828_install_archival_strategy_trigger.sql
|
||||
|
||||
-- Step 3: Deploy package spec
|
||||
@@03_MARS_828_install_CT_MRDS_FILE_ARCHIVER_SPEC.sql
|
||||
|
||||
-- Step 4: Deploy package body
|
||||
@@04_MARS_828_install_CT_MRDS_FILE_ARCHIVER_BODY.sql
|
||||
|
||||
-- Step 5: Verify
|
||||
@@05_MARS_828_verify_installation.sql
|
||||
|
||||
-- Step 6: Track version
|
||||
@@06_MARS_828_track_version.sql
|
||||
|
||||
-- Step 7: Verify packages
|
||||
@@verify_packages_version.sql
|
||||
|
||||
PROMPT ===============================================
|
||||
PROMPT Test Installation Complete!
|
||||
PROMPT ===============================================
|
||||
Reference in New Issue
Block a user