Mearge recent development
This commit is contained in:
@@ -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 ========================================
|
||||
Reference in New Issue
Block a user