Refactor archival strategies in FILE_ARCHIVER package

- Removed CURRENT_MONTH_ONLY strategy, replacing it with MINIMUM_AGE_MONTHS = 0 for current month retention.
- Updated validation logic to allow MINIMUM_AGE_MONTHS to be non-negative.
- Consolidated documentation to reflect changes in archival strategies.
- Adjusted rollback script to reset all archival parameters to NULL for 25 Release 01 tables.
- Enhanced README and installation scripts to clarify new configuration requirements and usage examples.
- Updated version history to indicate breaking changes and migration steps for existing configurations.
This commit is contained in:
Grzegorz Michalski
2026-02-05 20:17:51 +01:00
parent e93140e962
commit e6ab189dc9
9 changed files with 477 additions and 641 deletions

View File

@@ -16,12 +16,12 @@ ALTER TABLE CT_MRDS.A_SOURCE_FILE_CONFIG ADD (
-- Add check constraint for valid strategies -- Add check constraint for valid strategies
ALTER TABLE CT_MRDS.A_SOURCE_FILE_CONFIG ADD CONSTRAINT ALTER TABLE CT_MRDS.A_SOURCE_FILE_CONFIG ADD CONSTRAINT
CHK_ARCHIVAL_STRATEGY CHECK ( CHK_ARCHIVAL_STRATEGY CHECK (
ARCHIVAL_STRATEGY IN ('THRESHOLD_BASED', 'CURRENT_MONTH_ONLY', 'MINIMUM_AGE_MONTHS', 'HYBRID') ARCHIVAL_STRATEGY IN ('THRESHOLD_BASED', 'MINIMUM_AGE_MONTHS', 'HYBRID')
); );
-- Add comments -- Add comments
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_CONFIG.ARCHIVAL_STRATEGY IS COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_CONFIG.ARCHIVAL_STRATEGY IS
'Archival strategy: THRESHOLD_BASED (days), CURRENT_MONTH_ONLY (exclude current month), MINIMUM_AGE_MONTHS (minimum age), HYBRID (combination)'; 'Archival strategy: THRESHOLD_BASED (days), MINIMUM_AGE_MONTHS (0=current month, N=retain N months), HYBRID (combination)';
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_CONFIG.MINIMUM_AGE_MONTHS IS COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_CONFIG.MINIMUM_AGE_MONTHS IS
'Minimum age in months for archival (used with MINIMUM_AGE_MONTHS or HYBRID strategies)'; 'Minimum age in months for archival (used with MINIMUM_AGE_MONTHS or HYBRID strategies)';

View File

@@ -1,255 +1,142 @@
-- ===================================================================== -- =====================================================================
-- Script: 06_MARS_828_configure_release01_tables.sql -- Script: 06_MARS_828_configure_release01_tables.sql
-- MARS Issue: MARS-828 -- MARS Issue: MARS-828
-- Purpose: Configure archival strategies for Release 01 tables -- Purpose: Configure COMPLETE archival parameters for Release 01 tables
-- Author: Grzegorz Michalski -- Author: Grzegorz Michalski
-- Date: 2026-02-03 -- Date: 2026-02-05
-- --
-- Description: -- Description:
-- Configures ARCHIVAL_STRATEGY and MINIMUM_AGE_MONTHS for 25 tables: -- Configures ALL archival parameters for 25 tables:
-- - 19 LM tables: CURRENT_MONTH_ONLY strategy -- - ARCHIVAL_STRATEGY and MINIMUM_AGE_MONTHS
-- - 2 CSDB tables (DEBT, DEBT_DAILY): MINIMUM_AGE_MONTHS=6 strategy -- - Archival triggers (FILES/ROWS/BYTES thresholds)
-- - 4 CSDB tables (ratings/descriptions): CURRENT_MONTH_ONLY strategy -- - Statistics expiration (HOURS_TO_EXPIRE_STATISTICS)
--
-- Configuration by group:
-- - 19 LM tables: MINIMUM_AGE_MONTHS=0 (current month only), 10 files OR 100K rows OR 1GB, 24h stats
-- - 2 CSDB DEBT: MINIMUM_AGE_MONTHS=6, 5 files OR 50K rows OR 512MB, 48h stats
-- - 4 CSDB ratings: MINIMUM_AGE_MONTHS=0 (current month only), 10 files OR 20K rows OR 256MB, 72h stats
-- --
-- Dependencies: -- Dependencies:
-- - A_SOURCE_FILE_CONFIG table with ARCHIVAL_STRATEGY column -- - A_SOURCE_FILE_CONFIG table with all archival columns
-- - TRG_BI_A_SRC_FILE_CFG_ARCH_VAL trigger -- - TRG_BI_A_SRC_FILE_CFG_ARCH_VAL trigger
-- ===================================================================== -- =====================================================================
PROMPT ===================================================================== PROMPT =====================================================================
PROMPT MARS-828: Configuring Release 01 Tables - Archival Strategies PROMPT MARS-828: Enhanced Configuration - Complete Archival Parameters
PROMPT ===================================================================== PROMPT =====================================================================
PROMPT PROMPT
PROMPT This script will configure archival strategies for 25 Release 01 tables: PROMPT This script configures COMPLETE archival parameters for 25 tables
PROMPT - 19 LM tables: CURRENT_MONTH_ONLY PROMPT
PROMPT - 2 CSDB DEBT tables: MINIMUM_AGE_MONTHS (6 months) PROMPT LM Tables (19):
PROMPT - 4 CSDB rating/description tables: CURRENT_MONTH_ONLY PROMPT - Strategy: MINIMUM_AGE_MONTHS = 0 (current month only)
PROMPT - Triggers: 10 files OR 100,000 rows OR 1 GB
PROMPT - Stats Expiration: 24 hours
PROMPT
PROMPT CSDB DEBT Tables (2):
PROMPT - Strategy: MINIMUM_AGE_MONTHS = 6
PROMPT - Triggers: 5 files OR 50,000 rows OR 512 MB
PROMPT - Stats Expiration: 48 hours
PROMPT
PROMPT CSDB Rating/Description Tables (4):
PROMPT - Strategy: MINIMUM_AGE_MONTHS = 0 (current month only)
PROMPT - Triggers: 10 files OR 20,000 rows OR 256 MB
PROMPT - Stats Expiration: 72 hours
PROMPT PROMPT
PROMPT Current timestamp: PROMPT Current timestamp:
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS CURRENT_TIME FROM DUAL; SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS CURRENT_TIME FROM DUAL;
PROMPT PROMPT
PROMPT ===================================================================== PROMPT =====================================================================
PROMPT SECTION 1: LM Tables Configuration (CURRENT_MONTH_ONLY) PROMPT SECTION 1: LM Tables Configuration (MINIMUM_AGE_MONTHS = 0)
PROMPT =====================================================================
PROMPT Thresholds: 10 files OR 100K rows OR 1GB
PROMPT Stats expire: 24 hours
PROMPT ===================================================================== PROMPT =====================================================================
-- LM_STANDING_FACILITIES -- Update all 19 LM tables in a single statement
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = 'CURRENT_MONTH_ONLY',
MINIMUM_AGE_MONTHS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'DistributeStandingFacilities'
AND TABLE_ID = 'LM_STANDING_FACILITIES';
-- LM_STANDING_FACILITIES_HEADER
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = 'CURRENT_MONTH_ONLY',
MINIMUM_AGE_MONTHS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'DistributeStandingFacilities'
AND TABLE_ID = 'LM_STANDING_FACILITIES_HEADER';
-- LM_TTS_HEADER
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = 'CURRENT_MONTH_ONLY',
MINIMUM_AGE_MONTHS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'DistributeTwoTierSystem'
AND TABLE_ID = 'LM_TTS_HEADER';
-- LM_TTS_ITEM
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = 'CURRENT_MONTH_ONLY',
MINIMUM_AGE_MONTHS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'DistributeTwoTierSystem'
AND TABLE_ID = 'LM_TTS_ITEM';
-- LM_ADHOC_ADJUSTMENTS_HEADER
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = 'CURRENT_MONTH_ONLY',
MINIMUM_AGE_MONTHS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'AdhocAdjustment'
AND TABLE_ID = 'LM_ADHOC_ADJUSTMENTS_HEADER';
-- LM_ADHOC_ADJUSTMENTS_ITEM
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = 'CURRENT_MONTH_ONLY',
MINIMUM_AGE_MONTHS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'AdhocAdjustment'
AND TABLE_ID = 'LM_ADHOC_ADJUSTMENTS_ITEM';
-- LM_ADHOC_ADJUSTMENTS_ITEM_HEADER
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = 'CURRENT_MONTH_ONLY',
MINIMUM_AGE_MONTHS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'AdhocAdjustment'
AND TABLE_ID = 'LM_ADHOC_ADJUSTMENTS_ITEM_HEADER';
-- LM_BALANCESHEET_HEADER
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = 'CURRENT_MONTH_ONLY',
MINIMUM_AGE_MONTHS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'AggregatedDailyFinancialStatementOfTheEurosystem'
AND TABLE_ID = 'LM_BALANCESHEET_HEADER';
-- LM_BALANCESHEET_ITEM
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = 'CURRENT_MONTH_ONLY',
MINIMUM_AGE_MONTHS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'AggregatedDailyFinancialStatementOfTheEurosystem'
AND TABLE_ID = 'LM_BALANCESHEET_ITEM';
-- LM_CSM_ADJUSTMENTS_HEADER
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = 'CURRENT_MONTH_ONLY',
MINIMUM_AGE_MONTHS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'MonthlyCSMAdjustment'
AND TABLE_ID = 'LM_CSM_ADJUSTMENTS_HEADER';
-- LM_CSM_ADJUSTMENTS_ITEM
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = 'CURRENT_MONTH_ONLY',
MINIMUM_AGE_MONTHS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'MonthlyCSMAdjustment'
AND TABLE_ID = 'LM_CSM_ADJUSTMENTS_ITEM';
-- LM_CSM_ADJUSTMENTS_ITEM_HEADER
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = 'CURRENT_MONTH_ONLY',
MINIMUM_AGE_MONTHS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'MonthlyCSMAdjustment'
AND TABLE_ID = 'LM_CSM_ADJUSTMENTS_ITEM_HEADER';
-- LM_CURRENT_ACCOUNTS_HEADER
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = 'CURRENT_MONTH_ONLY',
MINIMUM_AGE_MONTHS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'MinimumReservesRequirements'
AND TABLE_ID = 'LM_CURRENT_ACCOUNTS_HEADER';
-- LM_CURRENT_ACCOUNTS_ITEM
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = 'CURRENT_MONTH_ONLY',
MINIMUM_AGE_MONTHS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'MinimumReservesRequirements'
AND TABLE_ID = 'LM_CURRENT_ACCOUNTS_ITEM';
-- LM_FORECAST_HEADER
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = 'CURRENT_MONTH_ONLY',
MINIMUM_AGE_MONTHS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'EurosystemAutonomousFactorForecast'
AND TABLE_ID = 'LM_FORECAST_HEADER';
-- LM_FORECAST_ITEM
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = 'CURRENT_MONTH_ONLY',
MINIMUM_AGE_MONTHS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'EurosystemAutonomousFactorForecast'
AND TABLE_ID = 'LM_FORECAST_ITEM';
-- LM_QRE_ADJUSTMENTS_HEADER
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = 'CURRENT_MONTH_ONLY',
MINIMUM_AGE_MONTHS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'QuarterlyRevaluationAdjustment'
AND TABLE_ID = 'LM_QRE_ADJUSTMENTS_HEADER';
-- LM_QRE_ADJUSTMENTS_ITEM
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = 'CURRENT_MONTH_ONLY',
MINIMUM_AGE_MONTHS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'QuarterlyRevaluationAdjustment'
AND TABLE_ID = 'LM_QRE_ADJUSTMENTS_ITEM';
-- LM_QRE_ADJUSTMENTS_ITEM_HEADER
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = 'CURRENT_MONTH_ONLY',
MINIMUM_AGE_MONTHS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'QuarterlyRevaluationAdjustment'
AND TABLE_ID = 'LM_QRE_ADJUSTMENTS_ITEM_HEADER';
PROMPT
PROMPT LM tables configured: 19 rows updated
PROMPT
PROMPT =====================================================================
PROMPT SECTION 2: CSDB DEBT Tables Configuration (MINIMUM_AGE_MONTHS)
PROMPT =====================================================================
-- CSDB_DEBT (6 months retention)
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = 'MINIMUM_AGE_MONTHS', SET ARCHIVAL_STRATEGY = 'MINIMUM_AGE_MONTHS',
MINIMUM_AGE_MONTHS = 6 MINIMUM_AGE_MONTHS = 0, -- 0 = current month only
FILES_COUNT_OVER_ARCHIVE_THRESHOLD = 10,
ROWS_COUNT_OVER_ARCHIVE_THRESHOLD = 100000,
BYTES_SUM_OVER_ARCHIVE_THRESHOLD = 1073741824, -- 1 GB
HOURS_TO_EXPIRE_STATISTICS = 24
WHERE SOURCE_FILE_TYPE = 'INPUT' WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'CentralizedSecuritiesDissemination' AND A_SOURCE_KEY = 'LM'
AND TABLE_ID = 'CSDB_DEBT'; AND TABLE_ID IN (
'LM_STANDING_FACILITIES',
'LM_STANDING_FACILITIES_HEADER',
'LM_TTS_HEADER',
'LM_TTS_ITEM',
'LM_ADHOC_ADJUSTMENTS_HEADER',
'LM_ADHOC_ADJUSTMENTS_ITEM',
'LM_ADHOC_ADJUSTMENTS_ITEM_HEADER',
'LM_BALANCESHEET_HEADER',
'LM_BALANCESHEET_ITEM',
'LM_CSM_ADJUSTMENTS_HEADER',
'LM_CSM_ADJUSTMENTS_ITEM',
'LM_CSM_ADJUSTMENTS_ITEM_HEADER',
'LM_CURRENT_ACCOUNTS_HEADER',
'LM_CURRENT_ACCOUNTS_ITEM',
'LM_FORECAST_HEADER',
'LM_FORECAST_ITEM',
'LM_QRE_ADJUSTMENTS_HEADER',
'LM_QRE_ADJUSTMENTS_ITEM',
'LM_QRE_ADJUSTMENTS_ITEM_HEADER'
);
-- CSDB_DEBT_DAILY (6 months retention) PROMPT
PROMPT LM tables configuration completed
PROMPT
PROMPT =====================================================================
PROMPT SECTION 2: CSDB DEBT Tables (MINIMUM_AGE_MONTHS = 6)
PROMPT =====================================================================
PROMPT Thresholds: 5 files OR 50K rows OR 512MB
PROMPT Stats expire: 48 hours
PROMPT =====================================================================
-- Update CSDB DEBT tables (6-month retention)
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = 'MINIMUM_AGE_MONTHS', SET ARCHIVAL_STRATEGY = 'MINIMUM_AGE_MONTHS',
MINIMUM_AGE_MONTHS = 6 MINIMUM_AGE_MONTHS = 6,
FILES_COUNT_OVER_ARCHIVE_THRESHOLD = 5,
ROWS_COUNT_OVER_ARCHIVE_THRESHOLD = 50000,
BYTES_SUM_OVER_ARCHIVE_THRESHOLD = 536870912, -- 512 MB
HOURS_TO_EXPIRE_STATISTICS = 48
WHERE SOURCE_FILE_TYPE = 'INPUT' WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'CentralizedSecuritiesDailyReferenceDataDissemination' AND A_SOURCE_KEY = 'CSDB'
AND TABLE_ID = 'CSDB_DEBT_DAILY'; AND TABLE_ID IN ('CSDB_DEBT', 'CSDB_DEBT_DAILY');
PROMPT PROMPT
PROMPT CSDB DEBT tables configured: 2 rows updated PROMPT CSDB DEBT tables configuration completed
PROMPT PROMPT
PROMPT ===================================================================== PROMPT =====================================================================
PROMPT SECTION 3: CSDB Rating/Description Tables (CURRENT_MONTH_ONLY) PROMPT SECTION 3: CSDB Rating/Description Tables (MINIMUM_AGE_MONTHS = 0)
PROMPT =====================================================================
PROMPT Thresholds: 10 files OR 20K rows OR 256MB
PROMPT Stats expire: 72 hours
PROMPT ===================================================================== PROMPT =====================================================================
-- CSDB_INSTR_RAT_FULL -- Update CSDB rating/description tables
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = 'CURRENT_MONTH_ONLY', SET ARCHIVAL_STRATEGY = 'MINIMUM_AGE_MONTHS',
MINIMUM_AGE_MONTHS = NULL MINIMUM_AGE_MONTHS = 0, -- 0 = current month only
FILES_COUNT_OVER_ARCHIVE_THRESHOLD = 10,
ROWS_COUNT_OVER_ARCHIVE_THRESHOLD = 20000,
BYTES_SUM_OVER_ARCHIVE_THRESHOLD = 268435456, -- 256 MB
HOURS_TO_EXPIRE_STATISTICS = 72
WHERE SOURCE_FILE_TYPE = 'INPUT' WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'FullRatingsDissemination' AND A_SOURCE_KEY = 'CSDB'
AND TABLE_ID = 'CSDB_INSTR_RAT_FULL'; AND TABLE_ID IN (
'CSDB_INSTR_RAT_FULL',
-- CSDB_INSTR_DESC_FULL 'CSDB_INSTR_DESC_FULL',
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG 'CSDB_ISSUER_RAT_FULL',
SET ARCHIVAL_STRATEGY = 'CURRENT_MONTH_ONLY', 'CSDB_ISSUER_DESC_FULL'
MINIMUM_AGE_MONTHS = NULL );
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'FullRatingsDissemination'
AND TABLE_ID = 'CSDB_INSTR_DESC_FULL';
-- CSDB_ISSUER_RAT_FULL
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = 'CURRENT_MONTH_ONLY',
MINIMUM_AGE_MONTHS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'FullRatingsDissemination'
AND TABLE_ID = 'CSDB_ISSUER_RAT_FULL';
-- CSDB_ISSUER_DESC_FULL
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = 'CURRENT_MONTH_ONLY',
MINIMUM_AGE_MONTHS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'FullRatingsDissemination'
AND TABLE_ID = 'CSDB_ISSUER_DESC_FULL';
PROMPT PROMPT
PROMPT CSDB rating/description tables configured: 4 rows updated PROMPT CSDB rating/description tables configuration completed
PROMPT PROMPT
PROMPT ===================================================================== PROMPT =====================================================================
@@ -263,36 +150,35 @@ PROMPT Configuration committed successfully.
PROMPT PROMPT
PROMPT ===================================================================== PROMPT =====================================================================
PROMPT VERIFICATION: Archival Strategy Configuration Summary PROMPT VERIFICATION: Complete Archival Configuration
PROMPT ===================================================================== PROMPT =====================================================================
PROMPT PROMPT
PROMPT LM Tables (CURRENT_MONTH_ONLY): PROMPT LM Tables (MINIMUM_AGE_MONTHS = 0):
PROMPT PROMPT
SELECT SELECT
A_SOURCE_KEY,
TABLE_ID, TABLE_ID,
ARCHIVAL_STRATEGY, ARCHIVAL_STRATEGY,
MINIMUM_AGE_MONTHS, MINIMUM_AGE_MONTHS,
FILES_COUNT_OVER_ARCHIVE_THRESHOLD AS FILE_THR,
ROWS_COUNT_OVER_ARCHIVE_THRESHOLD AS ROW_THR,
BYTES_SUM_OVER_ARCHIVE_THRESHOLD AS BYTE_THR,
HOURS_TO_EXPIRE_STATISTICS AS STATS_HRS,
CASE CASE
WHEN ARCHIVAL_STRATEGY = 'CURRENT_MONTH_ONLY' AND MINIMUM_AGE_MONTHS IS NULL WHEN ARCHIVAL_STRATEGY = 'MINIMUM_AGE_MONTHS'
AND MINIMUM_AGE_MONTHS = 0
AND FILES_COUNT_OVER_ARCHIVE_THRESHOLD = 10
AND ROWS_COUNT_OVER_ARCHIVE_THRESHOLD = 100000
AND BYTES_SUM_OVER_ARCHIVE_THRESHOLD = 1073741824
AND HOURS_TO_EXPIRE_STATISTICS = 24
THEN 'OK' THEN 'OK'
ELSE 'ERROR' ELSE 'ERROR'
END AS STATUS END AS STATUS
FROM CT_MRDS.A_SOURCE_FILE_CONFIG FROM CT_MRDS.A_SOURCE_FILE_CONFIG
WHERE A_SOURCE_KEY = 'LM' WHERE A_SOURCE_KEY = 'LM'
AND SOURCE_FILE_TYPE = 'INPUT' AND SOURCE_FILE_TYPE = 'INPUT'
AND TABLE_ID IN ( AND TABLE_ID LIKE 'LM_%'
'LM_ADHOC_ADJUSTMENTS_HEADER', 'LM_ADHOC_ADJUSTMENTS_ITEM', 'LM_ADHOC_ADJUSTMENTS_ITEM_HEADER',
'LM_BALANCESHEET_HEADER', 'LM_BALANCESHEET_ITEM',
'LM_CSM_ADJUSTMENTS_HEADER', 'LM_CSM_ADJUSTMENTS_ITEM', 'LM_CSM_ADJUSTMENTS_ITEM_HEADER',
'LM_CURRENT_ACCOUNTS_HEADER', 'LM_CURRENT_ACCOUNTS_ITEM',
'LM_FORECAST_HEADER', 'LM_FORECAST_ITEM',
'LM_QRE_ADJUSTMENTS_HEADER', 'LM_QRE_ADJUSTMENTS_ITEM', 'LM_QRE_ADJUSTMENTS_ITEM_HEADER',
'LM_STANDING_FACILITIES', 'LM_STANDING_FACILITIES_HEADER',
'LM_TTS_HEADER', 'LM_TTS_ITEM'
)
ORDER BY TABLE_ID; ORDER BY TABLE_ID;
PROMPT PROMPT
@@ -300,12 +186,20 @@ PROMPT CSDB DEBT Tables (MINIMUM_AGE_MONTHS = 6):
PROMPT PROMPT
SELECT SELECT
A_SOURCE_KEY,
TABLE_ID, TABLE_ID,
ARCHIVAL_STRATEGY, ARCHIVAL_STRATEGY,
MINIMUM_AGE_MONTHS, MINIMUM_AGE_MONTHS,
FILES_COUNT_OVER_ARCHIVE_THRESHOLD AS FILE_THR,
ROWS_COUNT_OVER_ARCHIVE_THRESHOLD AS ROW_THR,
BYTES_SUM_OVER_ARCHIVE_THRESHOLD AS BYTE_THR,
HOURS_TO_EXPIRE_STATISTICS AS STATS_HRS,
CASE CASE
WHEN ARCHIVAL_STRATEGY = 'MINIMUM_AGE_MONTHS' AND MINIMUM_AGE_MONTHS = 6 WHEN ARCHIVAL_STRATEGY = 'MINIMUM_AGE_MONTHS'
AND MINIMUM_AGE_MONTHS = 6
AND FILES_COUNT_OVER_ARCHIVE_THRESHOLD = 5
AND ROWS_COUNT_OVER_ARCHIVE_THRESHOLD = 50000
AND BYTES_SUM_OVER_ARCHIVE_THRESHOLD = 536870912
AND HOURS_TO_EXPIRE_STATISTICS = 48
THEN 'OK' THEN 'OK'
ELSE 'ERROR' ELSE 'ERROR'
END AS STATUS END AS STATUS
@@ -316,16 +210,24 @@ WHERE A_SOURCE_KEY = 'CSDB'
ORDER BY TABLE_ID; ORDER BY TABLE_ID;
PROMPT PROMPT
PROMPT CSDB Rating/Description Tables (CURRENT_MONTH_ONLY): PROMPT CSDB Rating/Description Tables (MINIMUM_AGE_MONTHS = 0):
PROMPT PROMPT
SELECT SELECT
A_SOURCE_KEY,
TABLE_ID, TABLE_ID,
ARCHIVAL_STRATEGY, ARCHIVAL_STRATEGY,
MINIMUM_AGE_MONTHS, MINIMUM_AGE_MONTHS,
FILES_COUNT_OVER_ARCHIVE_THRESHOLD AS FILE_THR,
ROWS_COUNT_OVER_ARCHIVE_THRESHOLD AS ROW_THR,
BYTES_SUM_OVER_ARCHIVE_THRESHOLD AS BYTE_THR,
HOURS_TO_EXPIRE_STATISTICS AS STATS_HRS,
CASE CASE
WHEN ARCHIVAL_STRATEGY = 'CURRENT_MONTH_ONLY' AND MINIMUM_AGE_MONTHS IS NULL WHEN ARCHIVAL_STRATEGY = 'MINIMUM_AGE_MONTHS'
AND MINIMUM_AGE_MONTHS = 0
AND FILES_COUNT_OVER_ARCHIVE_THRESHOLD = 10
AND ROWS_COUNT_OVER_ARCHIVE_THRESHOLD = 20000
AND BYTES_SUM_OVER_ARCHIVE_THRESHOLD = 268435456
AND HOURS_TO_EXPIRE_STATISTICS = 72
THEN 'OK' THEN 'OK'
ELSE 'ERROR' ELSE 'ERROR'
END AS STATUS END AS STATUS
@@ -337,36 +239,69 @@ ORDER BY TABLE_ID;
PROMPT PROMPT
PROMPT ===================================================================== PROMPT =====================================================================
PROMPT Summary: Total Configured Tables PROMPT Summary: Total Configured Tables with Full Parameters
PROMPT ===================================================================== PROMPT =====================================================================
SELECT SELECT
COUNT(*) AS TOTAL_CONFIGURED, COUNT(*) AS TOTAL_CONFIGURED,
SUM(CASE WHEN ARCHIVAL_STRATEGY = 'CURRENT_MONTH_ONLY' THEN 1 ELSE 0 END) AS CURRENT_MONTH_ONLY, SUM(CASE WHEN MINIMUM_AGE_MONTHS = 0 THEN 1 ELSE 0 END) AS CURRENT_MONTH_ONLY,
SUM(CASE WHEN ARCHIVAL_STRATEGY = 'MINIMUM_AGE_MONTHS' THEN 1 ELSE 0 END) AS MINIMUM_AGE_MONTHS, SUM(CASE WHEN MINIMUM_AGE_MONTHS > 0 THEN 1 ELSE 0 END) AS MULTI_MONTH_RETENTION,
SUM(CASE WHEN ARCHIVAL_STRATEGY IS NULL THEN 1 ELSE 0 END) AS NOT_CONFIGURED SUM(CASE WHEN FILES_COUNT_OVER_ARCHIVE_THRESHOLD IS NOT NULL THEN 1 ELSE 0 END) AS WITH_FILE_THRESHOLD,
SUM(CASE WHEN ROWS_COUNT_OVER_ARCHIVE_THRESHOLD IS NOT NULL THEN 1 ELSE 0 END) AS WITH_ROWS_THRESHOLD,
SUM(CASE WHEN BYTES_SUM_OVER_ARCHIVE_THRESHOLD IS NOT NULL THEN 1 ELSE 0 END) AS WITH_BYTES_THRESHOLD,
SUM(CASE WHEN HOURS_TO_EXPIRE_STATISTICS IS NOT NULL THEN 1 ELSE 0 END) AS WITH_STATS_EXPIRY
FROM CT_MRDS.A_SOURCE_FILE_CONFIG FROM CT_MRDS.A_SOURCE_FILE_CONFIG
WHERE SOURCE_FILE_TYPE = 'INPUT' WHERE SOURCE_FILE_TYPE = 'INPUT'
AND ((A_SOURCE_KEY = 'LM' AND TABLE_ID IN ( AND ((A_SOURCE_KEY = 'LM' AND TABLE_ID LIKE 'LM_%')
'LM_ADHOC_ADJUSTMENTS_HEADER', 'LM_ADHOC_ADJUSTMENTS_ITEM', 'LM_ADHOC_ADJUSTMENTS_ITEM_HEADER', OR (A_SOURCE_KEY = 'CSDB' AND TABLE_ID IN (
'LM_BALANCESHEET_HEADER', 'LM_BALANCESHEET_ITEM',
'LM_CSM_ADJUSTMENTS_HEADER', 'LM_CSM_ADJUSTMENTS_ITEM', 'LM_CSM_ADJUSTMENTS_ITEM_HEADER',
'LM_CURRENT_ACCOUNTS_HEADER', 'LM_CURRENT_ACCOUNTS_ITEM',
'LM_FORECAST_HEADER', 'LM_FORECAST_ITEM',
'LM_QRE_ADJUSTMENTS_HEADER', 'LM_QRE_ADJUSTMENTS_ITEM', 'LM_QRE_ADJUSTMENTS_ITEM_HEADER',
'LM_STANDING_FACILITIES', 'LM_STANDING_FACILITIES_HEADER',
'LM_TTS_HEADER', 'LM_TTS_ITEM'
))
OR (A_SOURCE_KEY = 'CSDB' AND TABLE_ID IN (
'CSDB_DEBT', 'CSDB_DEBT_DAILY', 'CSDB_DEBT', 'CSDB_DEBT_DAILY',
'CSDB_INSTR_RAT_FULL', 'CSDB_INSTR_DESC_FULL', 'CSDB_INSTR_RAT_FULL', 'CSDB_INSTR_DESC_FULL',
'CSDB_ISSUER_RAT_FULL', 'CSDB_ISSUER_DESC_FULL' 'CSDB_ISSUER_RAT_FULL', 'CSDB_ISSUER_DESC_FULL'
))); )));
PROMPT PROMPT
PROMPT Expected: TOTAL_CONFIGURED = 25, NOT_CONFIGURED = 0 PROMPT Expected:
PROMPT - TOTAL_CONFIGURED = 25
PROMPT - WITH_FILE_THRESHOLD = 25
PROMPT - WITH_ROWS_THRESHOLD = 25
PROMPT - WITH_BYTES_THRESHOLD = 25
PROMPT - WITH_STATS_EXPIRY = 25
PROMPT PROMPT
PROMPT =====================================================================
PROMPT Parameter Configuration Summary by Group
PROMPT =====================================================================
SELECT
CASE
WHEN A_SOURCE_KEY = 'LM' THEN 'LM Tables'
WHEN TABLE_ID LIKE 'CSDB_DEBT%' THEN 'CSDB DEBT'
ELSE 'CSDB Ratings'
END AS GROUP_NAME,
COUNT(*) AS TABLE_COUNT,
MAX(ARCHIVAL_STRATEGY) AS STRATEGY,
MAX(MINIMUM_AGE_MONTHS) AS MIN_AGE,
MAX(FILES_COUNT_OVER_ARCHIVE_THRESHOLD) AS FILES_THRESHOLD,
MAX(ROWS_COUNT_OVER_ARCHIVE_THRESHOLD) AS ROWS_THRESHOLD,
ROUND(MAX(BYTES_SUM_OVER_ARCHIVE_THRESHOLD)/1048576, 0) || ' MB' AS BYTES_THRESHOLD,
MAX(HOURS_TO_EXPIRE_STATISTICS) AS STATS_HOURS
FROM CT_MRDS.A_SOURCE_FILE_CONFIG
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND ((A_SOURCE_KEY = 'LM' AND TABLE_ID LIKE 'LM_%')
OR (A_SOURCE_KEY = 'CSDB' AND TABLE_ID IN (
'CSDB_DEBT', 'CSDB_DEBT_DAILY',
'CSDB_INSTR_RAT_FULL', 'CSDB_INSTR_DESC_FULL',
'CSDB_ISSUER_RAT_FULL', 'CSDB_ISSUER_DESC_FULL'
)))
GROUP BY
CASE
WHEN A_SOURCE_KEY = 'LM' THEN 'LM Tables'
WHEN TABLE_ID LIKE 'CSDB_DEBT%' THEN 'CSDB DEBT'
ELSE 'CSDB Ratings'
END
ORDER BY GROUP_NAME;
PROMPT
PROMPT ===================================================================== PROMPT =====================================================================
PROMPT Configuration Complete PROMPT Configuration Complete
PROMPT ===================================================================== PROMPT =====================================================================
@@ -374,8 +309,17 @@ PROMPT
PROMPT Next Steps: PROMPT Next Steps:
PROMPT 1. Review verification results above PROMPT 1. Review verification results above
PROMPT 2. All 25 tables should show STATUS = 'OK' PROMPT 2. All 25 tables should show STATUS = 'OK'
PROMPT 3. If errors exist, review and re-run specific UPDATE statements PROMPT 3. Verify parameter configuration summary matches expectations
PROMPT 4. Monitor archival process with new thresholds
PROMPT
PROMPT Archival Trigger Logic (OR condition):
PROMPT - Archival starts when ANY threshold is exceeded
PROMPT - Example: 10 files OR 100K rows OR 1GB triggers archival
PROMPT
PROMPT Statistics Refresh:
PROMPT - LM: Every 24 hours (daily updates for frequent changes)
PROMPT - CSDB DEBT: Every 48 hours (bi-daily for larger datasets)
PROMPT - CSDB Ratings: Every 72 hours (every 3 days for stable data)
PROMPT PROMPT
PROMPT Log file: 06_MARS_828_configure_release01_tables.log PROMPT Log file: 06_MARS_828_configure_release01_tables.log
PROMPT ===================================================================== PROMPT =====================================================================

View File

@@ -1,252 +1,126 @@
-- ===================================================================== -- =====================================================================
-- Script: 96_MARS_828_rollback_release01_configuration.sql -- Script: 96_MARS_828_rollback_release01_configuration.sql
-- MARS Issue: MARS-828 -- MARS Issue: MARS-828
-- Purpose: Rollback archival strategy configuration for Release 01 tables -- Purpose: ROLLBACK archival configuration for Release 01 tables
-- Author: Grzegorz Michalski -- Author: Grzegorz Michalski
-- Date: 2026-02-03 -- Date: 2026-02-05
-- --
-- Description: -- Description:
-- Removes archival strategy configuration from 25 Release 01 tables -- Rolls back archival configuration for 25 tables by setting all
-- by setting ARCHIVAL_STRATEGY and MINIMUM_AGE_MONTHS to NULL. -- archival parameters back to NULL (unconfigured state):
-- This is the rollback for 06_MARS_828_configure_release01_tables.sql -- - ARCHIVAL_STRATEGY
-- - MINIMUM_AGE_MONTHS
-- - FILES_COUNT_OVER_ARCHIVE_THRESHOLD
-- - ROWS_COUNT_OVER_ARCHIVE_THRESHOLD
-- - BYTES_SUM_OVER_ARCHIVE_THRESHOLD
-- - HOURS_TO_EXPIRE_STATISTICS
--
-- This script reverts changes made by:
-- - 06_MARS_828_configure_release01_tables.sql
-- --
-- Dependencies: -- Dependencies:
-- - A_SOURCE_FILE_CONFIG table with ARCHIVAL_STRATEGY column -- - A_SOURCE_FILE_CONFIG table with archival columns
-- ===================================================================== -- =====================================================================
PROMPT ===================================================================== PROMPT =====================================================================
PROMPT MARS-828: Rollback Release 01 Tables Configuration PROMPT MARS-828: ROLLBACK - Remove Archival Configuration
PROMPT ===================================================================== PROMPT =====================================================================
PROMPT PROMPT
PROMPT This script will remove archival strategy configuration from 25 tables: PROMPT This script will REMOVE archival configuration from 25 tables
PROMPT - 19 LM tables
PROMPT - 6 CSDB tables (DEBT, DEBT_DAILY, and 4 rating/description tables)
PROMPT PROMPT
PROMPT ARCHIVAL_STRATEGY and MINIMUM_AGE_MONTHS will be set to NULL PROMPT WARNING: This will reset ALL archival parameters to NULL
PROMPT
PROMPT Tables affected:
PROMPT - 19 LM tables
PROMPT - 2 CSDB DEBT tables
PROMPT - 4 CSDB rating/description tables
PROMPT PROMPT
PROMPT Current timestamp: PROMPT Current timestamp:
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS CURRENT_TIME FROM DUAL; SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS CURRENT_TIME FROM DUAL;
PROMPT PROMPT
PROMPT =====================================================================
PROMPT This will disable archival automation for all 25 tables
PROMPT =====================================================================
PROMPT
PROMPT ===================================================================== PROMPT =====================================================================
PROMPT SECTION 1: Rollback LM Tables Configuration PROMPT SECTION 1: Rollback LM Tables Configuration
PROMPT ===================================================================== PROMPT =====================================================================
-- LM_STANDING_FACILITIES -- Rollback all 19 LM tables in a single statement
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = NULL, SET ARCHIVAL_STRATEGY = NULL,
MINIMUM_AGE_MONTHS = NULL MINIMUM_AGE_MONTHS = NULL,
FILES_COUNT_OVER_ARCHIVE_THRESHOLD = NULL,
ROWS_COUNT_OVER_ARCHIVE_THRESHOLD = NULL,
BYTES_SUM_OVER_ARCHIVE_THRESHOLD = NULL,
HOURS_TO_EXPIRE_STATISTICS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT' WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'DistributeStandingFacilities' AND A_SOURCE_KEY = 'LM'
AND TABLE_ID = 'LM_STANDING_FACILITIES'; AND TABLE_ID IN (
'LM_STANDING_FACILITIES',
-- LM_STANDING_FACILITIES_HEADER 'LM_STANDING_FACILITIES_HEADER',
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG 'LM_TTS_HEADER',
SET ARCHIVAL_STRATEGY = NULL, 'LM_TTS_ITEM',
MINIMUM_AGE_MONTHS = NULL 'LM_ADHOC_ADJUSTMENTS_HEADER',
WHERE SOURCE_FILE_TYPE = 'INPUT' 'LM_ADHOC_ADJUSTMENTS_ITEM',
AND SOURCE_FILE_ID = 'DistributeStandingFacilities' 'LM_ADHOC_ADJUSTMENTS_ITEM_HEADER',
AND TABLE_ID = 'LM_STANDING_FACILITIES_HEADER'; 'LM_BALANCESHEET_HEADER',
'LM_BALANCESHEET_ITEM',
-- LM_TTS_HEADER 'LM_CSM_ADJUSTMENTS_HEADER',
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG 'LM_CSM_ADJUSTMENTS_ITEM',
SET ARCHIVAL_STRATEGY = NULL, 'LM_CSM_ADJUSTMENTS_ITEM_HEADER',
MINIMUM_AGE_MONTHS = NULL 'LM_CURRENT_ACCOUNTS_HEADER',
WHERE SOURCE_FILE_TYPE = 'INPUT' 'LM_CURRENT_ACCOUNTS_ITEM',
AND SOURCE_FILE_ID = 'DistributeTwoTierSystem' 'LM_FORECAST_HEADER',
AND TABLE_ID = 'LM_TTS_HEADER'; 'LM_FORECAST_ITEM',
'LM_QRE_ADJUSTMENTS_HEADER',
-- LM_TTS_ITEM 'LM_QRE_ADJUSTMENTS_ITEM',
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG 'LM_QRE_ADJUSTMENTS_ITEM_HEADER'
SET ARCHIVAL_STRATEGY = NULL, );
MINIMUM_AGE_MONTHS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'DistributeTwoTierSystem'
AND TABLE_ID = 'LM_TTS_ITEM';
-- LM_ADHOC_ADJUSTMENTS_HEADER
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = NULL,
MINIMUM_AGE_MONTHS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'AdhocAdjustment'
AND TABLE_ID = 'LM_ADHOC_ADJUSTMENTS_HEADER';
-- LM_ADHOC_ADJUSTMENTS_ITEM
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = NULL,
MINIMUM_AGE_MONTHS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'AdhocAdjustment'
AND TABLE_ID = 'LM_ADHOC_ADJUSTMENTS_ITEM';
-- LM_ADHOC_ADJUSTMENTS_ITEM_HEADER
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = NULL,
MINIMUM_AGE_MONTHS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'AdhocAdjustment'
AND TABLE_ID = 'LM_ADHOC_ADJUSTMENTS_ITEM_HEADER';
-- LM_BALANCESHEET_HEADER
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = NULL,
MINIMUM_AGE_MONTHS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'AggregatedDailyFinancialStatementOfTheEurosystem'
AND TABLE_ID = 'LM_BALANCESHEET_HEADER';
-- LM_BALANCESHEET_ITEM
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = NULL,
MINIMUM_AGE_MONTHS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'AggregatedDailyFinancialStatementOfTheEurosystem'
AND TABLE_ID = 'LM_BALANCESHEET_ITEM';
-- LM_CSM_ADJUSTMENTS_HEADER
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = NULL,
MINIMUM_AGE_MONTHS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'MonthlyCSMAdjustment'
AND TABLE_ID = 'LM_CSM_ADJUSTMENTS_HEADER';
-- LM_CSM_ADJUSTMENTS_ITEM
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = NULL,
MINIMUM_AGE_MONTHS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'MonthlyCSMAdjustment'
AND TABLE_ID = 'LM_CSM_ADJUSTMENTS_ITEM';
-- LM_CSM_ADJUSTMENTS_ITEM_HEADER
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = NULL,
MINIMUM_AGE_MONTHS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'MonthlyCSMAdjustment'
AND TABLE_ID = 'LM_CSM_ADJUSTMENTS_ITEM_HEADER';
-- LM_CURRENT_ACCOUNTS_HEADER
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = NULL,
MINIMUM_AGE_MONTHS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'MinimumReservesRequirements'
AND TABLE_ID = 'LM_CURRENT_ACCOUNTS_HEADER';
-- LM_CURRENT_ACCOUNTS_ITEM
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = NULL,
MINIMUM_AGE_MONTHS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'MinimumReservesRequirements'
AND TABLE_ID = 'LM_CURRENT_ACCOUNTS_ITEM';
-- LM_FORECAST_HEADER
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = NULL,
MINIMUM_AGE_MONTHS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'EurosystemAutonomousFactorForecast'
AND TABLE_ID = 'LM_FORECAST_HEADER';
-- LM_FORECAST_ITEM
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = NULL,
MINIMUM_AGE_MONTHS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'EurosystemAutonomousFactorForecast'
AND TABLE_ID = 'LM_FORECAST_ITEM';
-- LM_QRE_ADJUSTMENTS_HEADER
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = NULL,
MINIMUM_AGE_MONTHS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'QuarterlyRevaluationAdjustment'
AND TABLE_ID = 'LM_QRE_ADJUSTMENTS_HEADER';
-- LM_QRE_ADJUSTMENTS_ITEM
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = NULL,
MINIMUM_AGE_MONTHS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'QuarterlyRevaluationAdjustment'
AND TABLE_ID = 'LM_QRE_ADJUSTMENTS_ITEM';
-- LM_QRE_ADJUSTMENTS_ITEM_HEADER
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = NULL,
MINIMUM_AGE_MONTHS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'QuarterlyRevaluationAdjustment'
AND TABLE_ID = 'LM_QRE_ADJUSTMENTS_ITEM_HEADER';
PROMPT PROMPT
PROMPT LM tables configuration removed: 19 rows updated PROMPT LM tables rollback completed
PROMPT PROMPT
PROMPT ===================================================================== PROMPT =====================================================================
PROMPT SECTION 2: Rollback CSDB Tables Configuration PROMPT SECTION 2: Rollback CSDB DEBT Tables Configuration
PROMPT ===================================================================== PROMPT =====================================================================
-- CSDB_DEBT -- Rollback CSDB DEBT tables
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = NULL, SET ARCHIVAL_STRATEGY = NULL,
MINIMUM_AGE_MONTHS = NULL MINIMUM_AGE_MONTHS = NULL,
FILES_COUNT_OVER_ARCHIVE_THRESHOLD = NULL,
ROWS_COUNT_OVER_ARCHIVE_THRESHOLD = NULL,
BYTES_SUM_OVER_ARCHIVE_THRESHOLD = NULL,
HOURS_TO_EXPIRE_STATISTICS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT' WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'CentralizedSecuritiesDissemination' AND A_SOURCE_KEY = 'CSDB'
AND TABLE_ID = 'CSDB_DEBT'; AND TABLE_ID IN ('CSDB_DEBT', 'CSDB_DEBT_DAILY');
-- CSDB_DEBT_DAILY
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = NULL,
MINIMUM_AGE_MONTHS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'CentralizedSecuritiesDailyReferenceDataDissemination'
AND TABLE_ID = 'CSDB_DEBT_DAILY';
-- CSDB_INSTR_RAT_FULL
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = NULL,
MINIMUM_AGE_MONTHS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'FullRatingsDissemination'
AND TABLE_ID = 'CSDB_INSTR_RAT_FULL';
-- CSDB_INSTR_DESC_FULL
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = NULL,
MINIMUM_AGE_MONTHS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'FullRatingsDissemination'
AND TABLE_ID = 'CSDB_INSTR_DESC_FULL';
-- CSDB_ISSUER_RAT_FULL
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = NULL,
MINIMUM_AGE_MONTHS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'FullRatingsDissemination'
AND TABLE_ID = 'CSDB_ISSUER_RAT_FULL';
-- CSDB_ISSUER_DESC_FULL
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = NULL,
MINIMUM_AGE_MONTHS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'FullRatingsDissemination'
AND TABLE_ID = 'CSDB_ISSUER_DESC_FULL';
PROMPT PROMPT
PROMPT CSDB tables configuration removed: 6 rows updated PROMPT CSDB DEBT tables rollback completed
PROMPT
PROMPT =====================================================================
PROMPT SECTION 3: Rollback CSDB Rating/Description Tables Configuration
PROMPT =====================================================================
-- Rollback CSDB rating/description tables
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = NULL,
MINIMUM_AGE_MONTHS = NULL,
FILES_COUNT_OVER_ARCHIVE_THRESHOLD = NULL,
ROWS_COUNT_OVER_ARCHIVE_THRESHOLD = NULL,
BYTES_SUM_OVER_ARCHIVE_THRESHOLD = NULL,
HOURS_TO_EXPIRE_STATISTICS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND A_SOURCE_KEY = 'CSDB'
AND TABLE_ID IN (
'CSDB_INSTR_RAT_FULL',
'CSDB_INSTR_DESC_FULL',
'CSDB_ISSUER_RAT_FULL',
'CSDB_ISSUER_DESC_FULL'
);
PROMPT
PROMPT CSDB rating/description tables rollback completed
PROMPT PROMPT
PROMPT ===================================================================== PROMPT =====================================================================
@@ -260,82 +134,138 @@ PROMPT Rollback committed successfully.
PROMPT PROMPT
PROMPT ===================================================================== PROMPT =====================================================================
PROMPT VERIFICATION: Configuration Removal Confirmation PROMPT VERIFICATION: Archival Configuration Removed
PROMPT ===================================================================== PROMPT =====================================================================
PROMPT PROMPT
PROMPT All 25 Tables - Configuration Status: PROMPT LM Tables (should all be NULL):
PROMPT PROMPT
SELECT SELECT
A_SOURCE_KEY,
TABLE_ID, TABLE_ID,
ARCHIVAL_STRATEGY, ARCHIVAL_STRATEGY,
MINIMUM_AGE_MONTHS, MINIMUM_AGE_MONTHS,
FILES_COUNT_OVER_ARCHIVE_THRESHOLD AS FILE_THR,
ROWS_COUNT_OVER_ARCHIVE_THRESHOLD AS ROW_THR,
BYTES_SUM_OVER_ARCHIVE_THRESHOLD AS BYTE_THR,
HOURS_TO_EXPIRE_STATISTICS AS STATS_HRS,
CASE CASE
WHEN ARCHIVAL_STRATEGY IS NULL AND MINIMUM_AGE_MONTHS IS NULL WHEN ARCHIVAL_STRATEGY IS NULL
THEN 'REMOVED' AND MINIMUM_AGE_MONTHS IS NULL
ELSE 'ERROR - STILL CONFIGURED' AND FILES_COUNT_OVER_ARCHIVE_THRESHOLD IS NULL
AND ROWS_COUNT_OVER_ARCHIVE_THRESHOLD IS NULL
AND BYTES_SUM_OVER_ARCHIVE_THRESHOLD IS NULL
AND HOURS_TO_EXPIRE_STATISTICS IS NULL
THEN 'OK'
ELSE 'ERROR - Still configured'
END AS STATUS END AS STATUS
FROM CT_MRDS.A_SOURCE_FILE_CONFIG FROM CT_MRDS.A_SOURCE_FILE_CONFIG
WHERE SOURCE_FILE_TYPE = 'INPUT' WHERE A_SOURCE_KEY = 'LM'
AND ((A_SOURCE_KEY = 'LM' AND TABLE_ID IN ( AND SOURCE_FILE_TYPE = 'INPUT'
'LM_ADHOC_ADJUSTMENTS_HEADER', 'LM_ADHOC_ADJUSTMENTS_ITEM', 'LM_ADHOC_ADJUSTMENTS_ITEM_HEADER', AND TABLE_ID LIKE 'LM_%'
'LM_BALANCESHEET_HEADER', 'LM_BALANCESHEET_ITEM', ORDER BY TABLE_ID;
'LM_CSM_ADJUSTMENTS_HEADER', 'LM_CSM_ADJUSTMENTS_ITEM', 'LM_CSM_ADJUSTMENTS_ITEM_HEADER',
'LM_CURRENT_ACCOUNTS_HEADER', 'LM_CURRENT_ACCOUNTS_ITEM', PROMPT
'LM_FORECAST_HEADER', 'LM_FORECAST_ITEM', PROMPT CSDB DEBT Tables (should all be NULL):
'LM_QRE_ADJUSTMENTS_HEADER', 'LM_QRE_ADJUSTMENTS_ITEM', 'LM_QRE_ADJUSTMENTS_ITEM_HEADER', PROMPT
'LM_STANDING_FACILITIES', 'LM_STANDING_FACILITIES_HEADER',
'LM_TTS_HEADER', 'LM_TTS_ITEM' SELECT
)) TABLE_ID,
OR (A_SOURCE_KEY = 'CSDB' AND TABLE_ID IN ( ARCHIVAL_STRATEGY,
'CSDB_DEBT', 'CSDB_DEBT_DAILY', MINIMUM_AGE_MONTHS,
'CSDB_INSTR_RAT_FULL', 'CSDB_INSTR_DESC_FULL', FILES_COUNT_OVER_ARCHIVE_THRESHOLD AS FILE_THR,
'CSDB_ISSUER_RAT_FULL', 'CSDB_ISSUER_DESC_FULL' ROWS_COUNT_OVER_ARCHIVE_THRESHOLD AS ROW_THR,
))) BYTES_SUM_OVER_ARCHIVE_THRESHOLD AS BYTE_THR,
ORDER BY A_SOURCE_KEY, TABLE_ID; HOURS_TO_EXPIRE_STATISTICS AS STATS_HRS,
CASE
WHEN ARCHIVAL_STRATEGY IS NULL
AND MINIMUM_AGE_MONTHS IS NULL
AND FILES_COUNT_OVER_ARCHIVE_THRESHOLD IS NULL
AND ROWS_COUNT_OVER_ARCHIVE_THRESHOLD IS NULL
AND BYTES_SUM_OVER_ARCHIVE_THRESHOLD IS NULL
AND HOURS_TO_EXPIRE_STATISTICS IS NULL
THEN 'OK'
ELSE 'ERROR - Still configured'
END AS STATUS
FROM CT_MRDS.A_SOURCE_FILE_CONFIG
WHERE A_SOURCE_KEY = 'CSDB'
AND SOURCE_FILE_TYPE = 'INPUT'
AND TABLE_ID IN ('CSDB_DEBT', 'CSDB_DEBT_DAILY')
ORDER BY TABLE_ID;
PROMPT
PROMPT CSDB Rating/Description Tables (should all be NULL):
PROMPT
SELECT
TABLE_ID,
ARCHIVAL_STRATEGY,
MINIMUM_AGE_MONTHS,
FILES_COUNT_OVER_ARCHIVE_THRESHOLD AS FILE_THR,
ROWS_COUNT_OVER_ARCHIVE_THRESHOLD AS ROW_THR,
BYTES_SUM_OVER_ARCHIVE_THRESHOLD AS BYTE_THR,
HOURS_TO_EXPIRE_STATISTICS AS STATS_HRS,
CASE
WHEN ARCHIVAL_STRATEGY IS NULL
AND MINIMUM_AGE_MONTHS IS NULL
AND FILES_COUNT_OVER_ARCHIVE_THRESHOLD IS NULL
AND ROWS_COUNT_OVER_ARCHIVE_THRESHOLD IS NULL
AND BYTES_SUM_OVER_ARCHIVE_THRESHOLD IS NULL
AND HOURS_TO_EXPIRE_STATISTICS IS NULL
THEN 'OK'
ELSE 'ERROR - Still configured'
END AS STATUS
FROM CT_MRDS.A_SOURCE_FILE_CONFIG
WHERE A_SOURCE_KEY = 'CSDB'
AND SOURCE_FILE_TYPE = 'INPUT'
AND TABLE_ID IN ('CSDB_INSTR_RAT_FULL', 'CSDB_INSTR_DESC_FULL', 'CSDB_ISSUER_RAT_FULL', 'CSDB_ISSUER_DESC_FULL')
ORDER BY TABLE_ID;
PROMPT PROMPT
PROMPT ===================================================================== PROMPT =====================================================================
PROMPT Summary: Configuration Removal Status PROMPT Summary: Total Tables with Rollback Applied
PROMPT ===================================================================== PROMPT =====================================================================
SELECT SELECT
COUNT(*) AS TOTAL_TABLES, COUNT(*) AS TOTAL_TABLES,
SUM(CASE WHEN ARCHIVAL_STRATEGY IS NULL AND MINIMUM_AGE_MONTHS IS NULL THEN 1 ELSE 0 END) AS REMOVED, SUM(CASE WHEN ARCHIVAL_STRATEGY IS NULL THEN 1 ELSE 0 END) AS STRATEGY_NULL,
SUM(CASE WHEN ARCHIVAL_STRATEGY IS NOT NULL OR MINIMUM_AGE_MONTHS IS NOT NULL THEN 1 ELSE 0 END) AS STILL_CONFIGURED SUM(CASE WHEN MINIMUM_AGE_MONTHS IS NULL THEN 1 ELSE 0 END) AS MIN_AGE_NULL,
SUM(CASE WHEN FILES_COUNT_OVER_ARCHIVE_THRESHOLD IS NULL THEN 1 ELSE 0 END) AS FILE_THR_NULL,
SUM(CASE WHEN ROWS_COUNT_OVER_ARCHIVE_THRESHOLD IS NULL THEN 1 ELSE 0 END) AS ROWS_THR_NULL,
SUM(CASE WHEN BYTES_SUM_OVER_ARCHIVE_THRESHOLD IS NULL THEN 1 ELSE 0 END) AS BYTES_THR_NULL,
SUM(CASE WHEN HOURS_TO_EXPIRE_STATISTICS IS NULL THEN 1 ELSE 0 END) AS STATS_NULL
FROM CT_MRDS.A_SOURCE_FILE_CONFIG FROM CT_MRDS.A_SOURCE_FILE_CONFIG
WHERE SOURCE_FILE_TYPE = 'INPUT' WHERE SOURCE_FILE_TYPE = 'INPUT'
AND ((A_SOURCE_KEY = 'LM' AND TABLE_ID IN ( AND ((A_SOURCE_KEY = 'LM' AND TABLE_ID LIKE 'LM_%')
'LM_ADHOC_ADJUSTMENTS_HEADER', 'LM_ADHOC_ADJUSTMENTS_ITEM', 'LM_ADHOC_ADJUSTMENTS_ITEM_HEADER', OR (A_SOURCE_KEY = 'CSDB' AND TABLE_ID IN (
'LM_BALANCESHEET_HEADER', 'LM_BALANCESHEET_ITEM',
'LM_CSM_ADJUSTMENTS_HEADER', 'LM_CSM_ADJUSTMENTS_ITEM', 'LM_CSM_ADJUSTMENTS_ITEM_HEADER',
'LM_CURRENT_ACCOUNTS_HEADER', 'LM_CURRENT_ACCOUNTS_ITEM',
'LM_FORECAST_HEADER', 'LM_FORECAST_ITEM',
'LM_QRE_ADJUSTMENTS_HEADER', 'LM_QRE_ADJUSTMENTS_ITEM', 'LM_QRE_ADJUSTMENTS_ITEM_HEADER',
'LM_STANDING_FACILITIES', 'LM_STANDING_FACILITIES_HEADER',
'LM_TTS_HEADER', 'LM_TTS_ITEM'
))
OR (A_SOURCE_KEY = 'CSDB' AND TABLE_ID IN (
'CSDB_DEBT', 'CSDB_DEBT_DAILY', 'CSDB_DEBT', 'CSDB_DEBT_DAILY',
'CSDB_INSTR_RAT_FULL', 'CSDB_INSTR_DESC_FULL', 'CSDB_INSTR_RAT_FULL', 'CSDB_INSTR_DESC_FULL',
'CSDB_ISSUER_RAT_FULL', 'CSDB_ISSUER_DESC_FULL' 'CSDB_ISSUER_RAT_FULL', 'CSDB_ISSUER_DESC_FULL'
))); )));
PROMPT PROMPT
PROMPT Expected: TOTAL_TABLES = 25, REMOVED = 25, STILL_CONFIGURED = 0 PROMPT Expected: All counts should be 25 (all parameters NULL for all tables)
PROMPT - TOTAL_TABLES = 25
PROMPT - STRATEGY_NULL = 25
PROMPT - MIN_AGE_NULL = 25
PROMPT - FILE_THR_NULL = 25
PROMPT - ROWS_THR_NULL = 25
PROMPT - BYTES_THR_NULL = 25
PROMPT - STATS_NULL = 25
PROMPT PROMPT
PROMPT ===================================================================== PROMPT =====================================================================
PROMPT Rollback Complete PROMPT Rollback Complete
PROMPT ===================================================================== PROMPT =====================================================================
PROMPT PROMPT
PROMPT Configuration has been removed from all 25 Release 01 tables. PROMPT Next Steps:
PROMPT Archival automation is now disabled for these tables. PROMPT 1. Review verification results above
PROMPT 2. All 25 tables should show STATUS = 'OK'
PROMPT 3. All archival parameters should be NULL
PROMPT 4. Tables are now in unconfigured state (no archival strategy)
PROMPT PROMPT
PROMPT To re-enable configuration, run: PROMPT To restore configuration, re-run:
PROMPT 06_MARS_828_configure_release01_tables.sql PROMPT @06_MARS_828_configure_release01_tables.sql
PROMPT PROMPT
PROMPT Log file: 96_MARS_828_rollback_release01_configuration.log PROMPT Log file: 96_MARS_828_rollback_release01_configuration.log
PROMPT ===================================================================== PROMPT =====================================================================

View File

@@ -17,7 +17,7 @@ WHERE extract(day from (systimestamp - workflow_start)) > DAYS_FOR_ARCHIVE_THRES
**Solution**: Introduce ARCHIVAL_STRATEGY configuration column with four strategies: **Solution**: Introduce ARCHIVAL_STRATEGY configuration column with four strategies:
- `THRESHOLD_BASED` - Days-based threshold (backward compatible) - `THRESHOLD_BASED` - Days-based threshold (backward compatible)
- `CURRENT_MONTH_ONLY` - Keep only current month data - `MINIMUM_AGE_MONTHS` - Retain data for specified months (0 = current month only)
- `MINIMUM_AGE_MONTHS` - Archive data older than X months - `MINIMUM_AGE_MONTHS` - Archive data older than X months
- `HYBRID` - Combination of current month and minimum age - `HYBRID` - Combination of current month and minimum age
@@ -38,7 +38,7 @@ DAYS_FOR_ARCHIVE_THRESHOLD NUMBER DEFAULT 30
ARCHIVAL_STRATEGY VARCHAR2(30) DEFAULT 'THRESHOLD_BASED' NOT NULL, ARCHIVAL_STRATEGY VARCHAR2(30) DEFAULT 'THRESHOLD_BASED' NOT NULL,
MINIMUM_AGE_MONTHS NUMBER(3), MINIMUM_AGE_MONTHS NUMBER(3),
DAYS_FOR_ARCHIVE_THRESHOLD NUMBER DEFAULT 30, DAYS_FOR_ARCHIVE_THRESHOLD NUMBER DEFAULT 30,
CONSTRAINT CHK_ARCHIVAL_STRATEGY CHECK (ARCHIVAL_STRATEGY IN ('THRESHOLD_BASED', 'CURRENT_MONTH_ONLY', 'MINIMUM_AGE_MONTHS', 'HYBRID')) CONSTRAINT CHK_ARCHIVAL_STRATEGY CHECK (ARCHIVAL_STRATEGY IN ('THRESHOLD_BASED', 'MINIMUM_AGE_MONTHS', 'HYBRID'))
``` ```
**New Trigger**: TRG_BI_ARCHIVAL_STRATEGY_VAL **New Trigger**: TRG_BI_ARCHIVAL_STRATEGY_VAL
@@ -69,17 +69,17 @@ CONSTRAINT CHK_ARCHIVAL_STRATEGY CHECK (ARCHIVAL_STRATEGY IN ('THRESHOLD_BASED',
| Strategy | WHERE Clause Logic | Configuration Required | Use Case | | Strategy | WHERE Clause Logic | Configuration Required | Use Case |
|----------|-------------------|----------------------|----------| |----------|-------------------|----------------------|----------|
| `THRESHOLD_BASED` | `extract(day from (systimestamp - workflow_start)) > DAYS_FOR_ARCHIVE_THRESHOLD` | DAYS_FOR_ARCHIVE_THRESHOLD | Legacy compatibility | | `THRESHOLD_BASED` | `extract(day from (systimestamp - workflow_start)) > DAYS_FOR_ARCHIVE_THRESHOLD` | DAYS_FOR_ARCHIVE_THRESHOLD | Legacy compatibility |
| `CURRENT_MONTH_ONLY` | `TRUNC(workflow_start, 'MM') < TRUNC(SYSDATE, 'MM')` | None | General sources (LM, TOP) | | `MINIMUM_AGE_MONTHS` | `workflow_start < ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -N)` | MINIMUM_AGE_MONTHS (0=current month) | All sources |
| `MINIMUM_AGE_MONTHS` | `workflow_start < ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -X)` | MINIMUM_AGE_MONTHS | CSDB (6 months retention) | | `MINIMUM_AGE_MONTHS` | `workflow_start < ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -X)` | MINIMUM_AGE_MONTHS | CSDB (6 months retention) |
| `HYBRID` | Both CURRENT_MONTH_ONLY AND MINIMUM_AGE_MONTHS | MINIMUM_AGE_MONTHS | Advanced scenarios | | `HYBRID` | Combines month truncation AND minimum age | MINIMUM_AGE_MONTHS | Advanced scenarios |
## Configuration Examples ## Configuration Examples
```sql ```sql
-- LM/TOP sources: Archive everything except current month -- LM/TOP sources: Archive everything except current month
UPDATE A_SOURCE_FILE_CONFIG UPDATE A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = 'CURRENT_MONTH_ONLY', SET ARCHIVAL_STRATEGY = 'MINIMUM_AGE_MONTHS',
MINIMUM_AGE_MONTHS = NULL MINIMUM_AGE_MONTHS = 0, -- 0 = current month only
WHERE A_SOURCE_KEY IN ('LM', 'TOP'); WHERE A_SOURCE_KEY IN ('LM', 'TOP');
-- CSDB: Archive only data older than 6 months -- CSDB: Archive only data older than 6 months
@@ -189,7 +189,7 @@ sql "ADMIN/Cloudpass#34@ggmichalski_high" "@rollback_mars828.sql"
**Main Test Script**: test/test_archival_strategies.sql **Main Test Script**: test/test_archival_strategies.sql
```sql ```sql
-- Test 1: CURRENT_MONTH_ONLY strategy -- Test 1: MINIMUM_AGE_MONTHS=0 strategy (current month only)
-- Expected: Archives data from previous months only -- Expected: Archives data from previous months only
SELECT COUNT(*) FROM table WHERE TRUNC(workflow_start, 'MM') < TRUNC(SYSDATE, 'MM'); SELECT COUNT(*) FROM table WHERE TRUNC(workflow_start, 'MM') < TRUNC(SYSDATE, 'MM');
@@ -249,7 +249,7 @@ No automatic migration required. New columns have sensible defaults:
- MINIMUM_AGE_MONTHS = NULL (not required for THRESHOLD_BASED) - MINIMUM_AGE_MONTHS = NULL (not required for THRESHOLD_BASED)
## Version History ## Version History
- **v3.0.0** (2026-01-27): Added flexible archival strategies (CURRENT_MONTH_ONLY, MINIMUM_AGE_MONTHS, HYBRID) via ARCHIVAL_STRATEGY configuration - **v3.0.0** (2026-01-27): Added flexible archival strategies (MINIMUM_AGE_MONTHS with 0=current month, HYBRID) via ARCHIVAL_STRATEGY configuration
- **v2.0.0** (2025-10-01): Initial FILE_ARCHIVER package with threshold-based archival - **v2.0.0** (2025-10-01): Initial FILE_ARCHIVER package with threshold-based archival
## Related JIRA Issues ## Related JIRA Issues

View File

@@ -35,7 +35,7 @@ PROMPT =========================================================================
PROMPT MARS-828 Installation Starting PROMPT MARS-828 Installation Starting
PROMPT ============================================================================ PROMPT ============================================================================
PROMPT Package: CT_MRDS.FILE_ARCHIVER PROMPT Package: CT_MRDS.FILE_ARCHIVER
PROMPT Change: Enhanced archival strategies (CURRENT_MONTH_ONLY, MINIMUM_AGE_MONTHS, HYBRID) PROMPT Change: Enhanced archival strategies (MINIMUM_AGE_MONTHS, HYBRID)
PROMPT Purpose: Flexible archival policies per data source PROMPT Purpose: Flexible archival policies per data source
PROMPT Steps: 8 (DDL, Trigger, Packages, Verify, Track, Verify, Configure) PROMPT Steps: 8 (DDL, Trigger, Packages, Verify, Track, Verify, Configure)
PROMPT Timestamp: PROMPT Timestamp:
@@ -60,27 +60,27 @@ PROMPT ===================================================================
@@01_MARS_828_install_add_archival_strategy_columns.sql @@01_MARS_828_install_add_archival_strategy_columns.sql
PROMPT PROMPT
PROMPT Step 2/7: Creating validation trigger PROMPT Step 2/8: Creating validation trigger
PROMPT ====================================== PROMPT ======================================
@@02_MARS_828_install_archival_strategy_trigger.sql @@02_MARS_828_install_archival_strategy_trigger.sql
PROMPT PROMPT
PROMPT Step 3/7: Deploying FILE_ARCHIVER Package Specification v3.0.0 PROMPT Step 3/8: Deploying FILE_ARCHIVER Package Specification v3.1.0
PROMPT =============================================================== PROMPT ===============================================================
@@03_MARS_828_install_CT_MRDS_FILE_ARCHIVER_SPEC.sql @@03_MARS_828_install_CT_MRDS_FILE_ARCHIVER_SPEC.sql
PROMPT PROMPT
PROMPT Step 4/7: Deploying FILE_ARCHIVER Package Body v3.0.0 PROMPT Step 4/8: Deploying FILE_ARCHIVER Package Body v3.1.0
PROMPT ====================================================== PROMPT ======================================================
@@04_MARS_828_install_CT_MRDS_FILE_ARCHIVER_BODY.sql @@04_MARS_828_install_CT_MRDS_FILE_ARCHIVER_BODY.sql
PROMPT PROMPT
PROMPT Step 5/7: Verifying installation PROMPT Step 5/8: Verifying installation
PROMPT ================================= PROMPT =================================
@@05_MARS_828_verify_installation.sql @@05_MARS_828_verify_installation.sql
PROMPT PROMPT
PROMPT Step 6/7: Tracking package versions PROMPT Step 6/8: Tracking package versions
PROMPT ==================================== PROMPT ====================================
@@track_package_versions.sql @@track_package_versions.sql
@@ -103,9 +103,9 @@ SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS install_end FROM DUAL;
PROMPT PROMPT
PROMPT Installation Summary: PROMPT Installation Summary:
PROMPT - Package: CT_MRDS.FILE_ARCHIVER PROMPT - Package: CT_MRDS.FILE_ARCHIVER
PROMPT - Version: 2.0.0 -> 3.0.0 (MAJOR) PROMPT - Version: 3.1.0 (BREAKING CHANGE - CURRENT_MONTH_ONLY removed)
PROMPT - New Strategies: CURRENT_MONTH_ONLY, MINIMUM_AGE_MONTHS, HYBRID PROMPT - Strategies: THRESHOLD_BASED (default), MINIMUM_AGE_MONTHS (0=current month), HYBRID
PROMPT - Backward Compatible: THRESHOLD_BASED (default) PROMPT - Backward Compatible: Yes (default THRESHOLD_BASED preserved)
PROMPT - Configured Tables: 25 Release 01 tables (19 LM + 6 CSDB) PROMPT - Configured Tables: 25 Release 01 tables (19 LM + 6 CSDB)
PROMPT PROMPT
PROMPT Log file: &_filename PROMPT Log file: &_filename

View File

@@ -23,11 +23,7 @@ AS
WHEN 'THRESHOLD_BASED' THEN WHEN 'THRESHOLD_BASED' THEN
vWhereClause := 'extract(day from (systimestamp - workflow_start)) > ' || pSourceFileConfig.DAYS_FOR_ARCHIVE_THRESHOLD; vWhereClause := 'extract(day from (systimestamp - workflow_start)) > ' || pSourceFileConfig.DAYS_FOR_ARCHIVE_THRESHOLD;
-- Archive all data except current month -- Archive data older than X months (0 = current month only)
WHEN 'CURRENT_MONTH_ONLY' THEN
vWhereClause := 'TRUNC(workflow_start, ''MM'') < TRUNC(SYSDATE, ''MM'')';
-- Archive only data older than X months
WHEN 'MINIMUM_AGE_MONTHS' THEN WHEN 'MINIMUM_AGE_MONTHS' THEN
IF pSourceFileConfig.MINIMUM_AGE_MONTHS IS NULL THEN IF pSourceFileConfig.MINIMUM_AGE_MONTHS IS NULL THEN
RAISE_APPLICATION_ERROR(-20001, 'MINIMUM_AGE_MONTHS must be configured for MINIMUM_AGE_MONTHS strategy'); RAISE_APPLICATION_ERROR(-20001, 'MINIMUM_AGE_MONTHS must be configured for MINIMUM_AGE_MONTHS strategy');

View File

@@ -24,7 +24,7 @@ AS
-- Version History (Latest changes first) -- Version History (Latest changes first)
VERSION_HISTORY CONSTANT VARCHAR2(4000) := VERSION_HISTORY CONSTANT VARCHAR2(4000) :=
'3.1.0 (2026-01-29): Added function overloads for ARCHIVE_TABLE_DATA and GATHER_TABLE_STAT returning SQLCODE for Python library integration' || CHR(13)||CHR(10) || '3.1.0 (2026-01-29): Added function overloads for ARCHIVE_TABLE_DATA and GATHER_TABLE_STAT returning SQLCODE for Python library integration' || CHR(13)||CHR(10) ||
'3.0.0 (2026-01-27): MARS-828 - Added flexible archival strategies (CURRENT_MONTH_ONLY, MINIMUM_AGE_MONTHS, HYBRID) via ARCHIVAL_STRATEGY configuration' || CHR(13)||CHR(10) || '3.0.0 (2026-01-27): MARS-828 - Added flexible archival strategies (MINIMUM_AGE_MONTHS with 0=current month, HYBRID) via ARCHIVAL_STRATEGY configuration' || CHR(13)||CHR(10) ||
'2.0.0 (2025-10-22): Added package versioning system using centralized ENV_MANAGER functions' || CHR(13)||CHR(10) || '2.0.0 (2025-10-22): Added package versioning system using centralized ENV_MANAGER functions' || CHR(13)||CHR(10) ||
'1.5.0 (2025-10-18): Enhanced ARCHIVE_TABLE_DATA with Hive-style partitioning support' || CHR(13)||CHR(10) || '1.5.0 (2025-10-18): Enhanced ARCHIVE_TABLE_DATA with Hive-style partitioning support' || CHR(13)||CHR(10) ||
'1.0.0 (2025-09-15): Initial release with table archival and statistics gathering'; '1.0.0 (2025-09-15): Initial release with table archival and statistics gathering';

View File

@@ -20,10 +20,10 @@ BEGIN
RAISE_APPLICATION_ERROR(-20999, vErrorMsg); RAISE_APPLICATION_ERROR(-20999, vErrorMsg);
END IF; END IF;
-- Validate MINIMUM_AGE_MONTHS is positive -- Validate MINIMUM_AGE_MONTHS is non-negative (0 = current month only)
IF :NEW.MINIMUM_AGE_MONTHS IS NOT NULL IF :NEW.MINIMUM_AGE_MONTHS IS NOT NULL
AND :NEW.MINIMUM_AGE_MONTHS < 1 THEN AND :NEW.MINIMUM_AGE_MONTHS < 0 THEN
RAISE_APPLICATION_ERROR(-20998, 'MINIMUM_AGE_MONTHS must be greater than 0'); RAISE_APPLICATION_ERROR(-20998, 'MINIMUM_AGE_MONTHS must be greater than or equal to 0');
END IF; END IF;
-- Warn if MINIMUM_AGE_MONTHS set but strategy doesn't use it -- Warn if MINIMUM_AGE_MONTHS set but strategy doesn't use it

View File

@@ -8,7 +8,7 @@ The FILE_ARCHIVER package provides flexible archival strategies that accommodate
### Key Features ### Key Features
- **Four Archival Strategies**: THRESHOLD_BASED, CURRENT_MONTH_ONLY, MINIMUM_AGE_MONTHS, HYBRID - **Three Archival Strategies**: THRESHOLD_BASED, MINIMUM_AGE_MONTHS (with 0=current month only), HYBRID
- **Flexible Configuration**: Per-table archival strategy configuration via A_SOURCE_FILE_CONFIG - **Flexible Configuration**: Per-table archival strategy configuration via A_SOURCE_FILE_CONFIG
- **Backward Compatible**: Default THRESHOLD_BASED strategy maintains existing behavior - **Backward Compatible**: Default THRESHOLD_BASED strategy maintains existing behavior
- **Validation**: Automatic validation of strategy-specific configuration requirements - **Validation**: Automatic validation of strategy-specific configuration requirements
@@ -39,9 +39,8 @@ The FILE_ARCHIVER package provides flexible archival strategies that accommodate
| Strategy | WHERE Clause Logic | Configuration Required | Primary Use Case | | Strategy | WHERE Clause Logic | Configuration Required | Primary Use Case |
|----------|-------------------|----------------------|------------------| |----------|-------------------|----------------------|------------------|
| `THRESHOLD_BASED` | Days since workflow start > threshold | DAYS_FOR_ARCHIVE_THRESHOLD | Legacy compatibility, simple time-based archival | | `THRESHOLD_BASED` | Days since workflow start > threshold | DAYS_FOR_ARCHIVE_THRESHOLD | Legacy compatibility, simple time-based archival |
| `CURRENT_MONTH_ONLY` | Archive all data from previous months | None | LM/TOP sources - keep only current month active | | `MINIMUM_AGE_MONTHS` | Archive data older than X months (0=current month only) | MINIMUM_AGE_MONTHS (≥0) | All sources - flexible retention (0 for LM, 6 for CSDB) |
| `MINIMUM_AGE_MONTHS` | Archive data older than X months | MINIMUM_AGE_MONTHS | CSDB sources - retain data for specific period | | `HYBRID` | Combines month boundary + minimum age | MINIMUM_AGE_MONTHS | Advanced retention scenarios |
| `HYBRID` | Combines CURRENT_MONTH_ONLY + MINIMUM_AGE_MONTHS | MINIMUM_AGE_MONTHS | Advanced retention scenarios |
### 1. THRESHOLD_BASED (Default) ### 1. THRESHOLD_BASED (Default)
@@ -65,48 +64,27 @@ WHERE SOURCE_FILE_TYPE = 'INPUT'
**Use Case**: Simple time-based archival, backward compatible with FILE_ARCHIVER v2.0.0 behavior. **Use Case**: Simple time-based archival, backward compatible with FILE_ARCHIVER v2.0.0 behavior.
### 2. CURRENT_MONTH_ONLY ### 2. MINIMUM_AGE_MONTHS
Archives all data from previous months, keeping only current month data in ODS bucket. Archives data older than specified number of months. **Special case**: MINIMUM_AGE_MONTHS = 0 archives all data before current month (replaces deprecated CURRENT_MONTH_ONLY strategy).
**WHERE Clause**:
```sql
TRUNC(workflow_start, 'MM') < TRUNC(SYSDATE, 'MM')
```
**Configuration**:
```sql
-- LM/TOP sources: Archive everything except current month
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = 'CURRENT_MONTH_ONLY',
MINIMUM_AGE_MONTHS = NULL
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'DistributeStandingFacilities'
AND TABLE_ID = 'LM_STANDING_FACILITIES';
```
**Use Case**:
- LM dissemination feeds (daily/intraday updates)
- TOP operational data requiring current month access
- Sources where historical data is rarely accessed
**Behavior**:
- January data: Archived on February 1st
- February data: Remains in ODS bucket during February
- March 1st: February data archived, March data active
### 3. MINIMUM_AGE_MONTHS
Archives only data older than specified number of months, allowing multi-month retention in ODS bucket.
**WHERE Clause**: **WHERE Clause**:
```sql ```sql
workflow_start < ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -MINIMUM_AGE_MONTHS) workflow_start < ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -MINIMUM_AGE_MONTHS)
-- When MINIMUM_AGE_MONTHS = 0: workflow_start < TRUNC(SYSDATE, 'MM')
``` ```
**Configuration**: **Configuration Examples**:
```sql ```sql
-- CSDB: Archive only data older than 6 months -- LM: Keep only current month data (MINIMUM_AGE_MONTHS = 0)
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = 'MINIMUM_AGE_MONTHS',
MINIMUM_AGE_MONTHS = 0
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'DistributeStandingFacilities'
AND TABLE_ID = 'LM_STANDING_FACILITIES';
-- CSDB: Retain 6 months of data (MINIMUM_AGE_MONTHS = 6)
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = 'MINIMUM_AGE_MONTHS', SET ARCHIVAL_STRATEGY = 'MINIMUM_AGE_MONTHS',
MINIMUM_AGE_MONTHS = 6 MINIMUM_AGE_MONTHS = 6
@@ -115,19 +93,25 @@ WHERE SOURCE_FILE_TYPE = 'INPUT'
AND TABLE_ID IN ('CSDB_DEBT', 'CSDB_DEBT_DAILY'); AND TABLE_ID IN ('CSDB_DEBT', 'CSDB_DEBT_DAILY');
``` ```
**Use Case**: **Use Cases**:
- CSDB securities/ratings data requiring 6-month retention - **MINIMUM_AGE_MONTHS = 0**: LM dissemination feeds requiring current month only (daily/intraday updates)
- Regulatory compliance with specific retention periods - **MINIMUM_AGE_MONTHS = 6**: CSDB securities/ratings data requiring 6-month retention
- Analytical workloads needing multi-month historical access - **MINIMUM_AGE_MONTHS = N**: Regulatory compliance with specific N-month retention periods
**Behavior** (with MINIMUM_AGE_MONTHS = 6): **Behavior Examples**:
- February 2026: Archives data from July 2025 and earlier - **With MINIMUM_AGE_MONTHS = 0**:
- March 2026: Archives data from August 2025 and earlier - January data: Archived on February 1st
- Keeps 6 months of data always available in ODS bucket - February data: Remains in ODS bucket during February
- March 1st: February data archived, March data active
- **With MINIMUM_AGE_MONTHS = 6**:
- February 2026: Archives data from July 2025 and earlier
- March 2026: Archives data from August 2025 and earlier
- Keeps current month + 6 previous months (7 months total) in ODS bucket
### 4. HYBRID ### 3. HYBRID
Combines CURRENT_MONTH_ONLY and MINIMUM_AGE_MONTHS logic - archives data from previous months AND older than minimum age. Combines month boundary check with minimum age threshold - archives data from previous months AND older than minimum age.
**WHERE Clause**: **WHERE Clause**:
```sql ```sql
@@ -157,13 +141,10 @@ WHERE SOURCE_FILE_TYPE = 'INPUT'
Automatically validates archival configuration on INSERT/UPDATE to A_SOURCE_FILE_CONFIG: Automatically validates archival configuration on INSERT/UPDATE to A_SOURCE_FILE_CONFIG:
**Validation Rules**: **Validation Rules**:
1. **CURRENT_MONTH_ONLY**: Requires `MINIMUM_AGE_MONTHS IS NULL` 1. **MINIMUM_AGE_MONTHS**: Requires `MINIMUM_AGE_MONTHS IS NOT NULL AND MINIMUM_AGE_MONTHS >= 0`
- Error: "Strategy CURRENT_MONTH_ONLY requires MINIMUM_AGE_MONTHS to be NULL" - Error: "Strategy MINIMUM_AGE_MONTHS requires MINIMUM_AGE_MONTHS to be set (≥0)"
2. **MINIMUM_AGE_MONTHS**: Requires `MINIMUM_AGE_MONTHS IS NOT NULL` 2. **HYBRID**: Requires `MINIMUM_AGE_MONTHS IS NOT NULL`
- Error: "Strategy MINIMUM_AGE_MONTHS requires MINIMUM_AGE_MONTHS to be set"
3. **HYBRID**: Requires `MINIMUM_AGE_MONTHS IS NOT NULL`
- Error: "Strategy HYBRID requires MINIMUM_AGE_MONTHS to be set" - Error: "Strategy HYBRID requires MINIMUM_AGE_MONTHS to be set"
**Example Validation Error**: **Example Validation Error**:
@@ -233,13 +214,13 @@ END;
## Configuration Examples ## Configuration Examples
### Example 1: Configure LM Standing Facilities (CURRENT_MONTH_ONLY) ### Example 1: Configure LM Standing Facilities (Current Month Only)
```sql ```sql
-- Keep only current month data in ODS bucket -- Keep only current month data in ODS bucket (MINIMUM_AGE_MONTHS = 0)
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = 'CURRENT_MONTH_ONLY', SET ARCHIVAL_STRATEGY = 'MINIMUM_AGE_MONTHS',
MINIMUM_AGE_MONTHS = NULL MINIMUM_AGE_MONTHS = 0 -- 0 = archives all data before current month
WHERE SOURCE_FILE_TYPE = 'INPUT' WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID = 'DistributeStandingFacilities' AND SOURCE_FILE_ID = 'DistributeStandingFacilities'
AND TABLE_ID = 'LM_STANDING_FACILITIES'; AND TABLE_ID = 'LM_STANDING_FACILITIES';
@@ -280,10 +261,10 @@ WHERE TABLE_ID = 'CSDB_DEBT';
### Example 3: Bulk Configuration for LM Source ### Example 3: Bulk Configuration for LM Source
```sql ```sql
-- Configure all 19 LM tables with CURRENT_MONTH_ONLY strategy -- Configure all 19 LM tables with MINIMUM_AGE_MONTHS = 0 (current month only)
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = 'CURRENT_MONTH_ONLY', SET ARCHIVAL_STRATEGY = 'MINIMUM_AGE_MONTHS',
MINIMUM_AGE_MONTHS = NULL MINIMUM_AGE_MONTHS = 0 -- 0 = keep only current month
WHERE SOURCE_FILE_TYPE = 'INPUT' WHERE SOURCE_FILE_TYPE = 'INPUT'
AND SOURCE_FILE_ID IN ( AND SOURCE_FILE_ID IN (
'DistributeStandingFacilities', 'DistributeStandingFacilities',
@@ -342,7 +323,7 @@ ORDER BY ARCHIVAL_STRATEGY;
The following 25 Release 01 tables were configured with archival strategies: The following 25 Release 01 tables were configured with archival strategies:
**LM Tables (19 total) - CURRENT_MONTH_ONLY**: **LM Tables (19 total) - MINIMUM_AGE_MONTHS = 0 (current month only)**:
- LM_STANDING_FACILITIES - LM_STANDING_FACILITIES
- LM_STANDING_FACILITIES_HEADER - LM_STANDING_FACILITIES_HEADER
- LM_TTS_HEADER - LM_TTS_HEADER
@@ -365,11 +346,11 @@ The following 25 Release 01 tables were configured with archival strategies:
**CSDB Tables (6 total)**: **CSDB Tables (6 total)**:
*MINIMUM_AGE_MONTHS = 6*: *MINIMUM_AGE_MONTHS = 6 (6-month retention)*:
- CSDB_DEBT - CSDB_DEBT
- CSDB_DEBT_DAILY - CSDB_DEBT_DAILY
*CURRENT_MONTH_ONLY*: *MINIMUM_AGE_MONTHS = 0 (current month only)*:
- CSDB_INSTR_RAT_FULL - CSDB_INSTR_RAT_FULL
- CSDB_INSTR_DESC_FULL - CSDB_INSTR_DESC_FULL
- CSDB_ISSUER_RAT_FULL - CSDB_ISSUER_RAT_FULL
@@ -426,25 +407,7 @@ SET ARCHIVAL_STRATEGY = 'MINIMUM_AGE_MONTHS',
WHERE ...; WHERE ...;
``` ```
#### Issue 2: Validation Error on CURRENT_MONTH_ONLY #### Issue 2: Archival Not Working as Expected
**Error**:
```
ORA-20001: Strategy CURRENT_MONTH_ONLY requires MINIMUM_AGE_MONTHS to be NULL
```
**Cause**: MINIMUM_AGE_MONTHS has value but strategy doesn't use it
**Solution**:
```sql
-- Set MINIMUM_AGE_MONTHS to NULL for CURRENT_MONTH_ONLY
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = 'CURRENT_MONTH_ONLY',
MINIMUM_AGE_MONTHS = NULL -- Required to be NULL
WHERE ...;
```
#### Issue 3: Archival Not Working as Expected
**Symptoms**: Data not being archived according to strategy **Symptoms**: Data not being archived according to strategy
@@ -492,7 +455,7 @@ END;
/ /
``` ```
#### Issue 4: Package Compilation Errors After Upgrade #### Issue 3: Package Compilation Errors After Upgrade
**Symptoms**: FILE_ARCHIVER package shows INVALID status **Symptoms**: FILE_ARCHIVER package shows INVALID status
@@ -516,16 +479,19 @@ WHERE object_name = 'FILE_ARCHIVER';
## Version History ## Version History
### v3.1.0 (Current) ### v3.1.0 (Current - 2026-02-05)
- Enhanced archival strategies - **BREAKING CHANGE**: Removed CURRENT_MONTH_ONLY strategy (replaced by MINIMUM_AGE_MONTHS = 0)
- Improved error handling - Mathematical equivalence: CURRENT_MONTH_ONLY ≡ MINIMUM_AGE_MONTHS = 0
- Additional validation features - Updated trigger validation to allow MINIMUM_AGE_MONTHS >= 0 (previously >= 1)
- Simplified architecture from 4 strategies to 3
- Enhanced error handling
- All 25 Release 01 tables migrated to MINIMUM_AGE_MONTHS (23 with value 0, 2 with value 6)
### v3.0.0 (MARS-828) ### v3.0.0 (MARS-828 - 2026-02-04)
- Added ARCHIVAL_STRATEGY configuration column - Added ARCHIVAL_STRATEGY configuration column
- Implemented four archival strategies: - Implemented four archival strategies (later reduced to three in v3.1.0):
- THRESHOLD_BASED (backward compatible) - THRESHOLD_BASED (backward compatible)
- CURRENT_MONTH_ONLY - CURRENT_MONTH_ONLY (deprecated in v3.1.0, use MINIMUM_AGE_MONTHS = 0)
- MINIMUM_AGE_MONTHS - MINIMUM_AGE_MONTHS
- HYBRID - HYBRID
- Added GET_ARCHIVAL_WHERE_CLAUSE function - Added GET_ARCHIVAL_WHERE_CLAUSE function
@@ -567,26 +533,26 @@ WHERE object_name = 'FILE_ARCHIVER';
### Strategy Selection Guidelines ### Strategy Selection Guidelines
1. **Use CURRENT_MONTH_ONLY when**: 1. **Use MINIMUM_AGE_MONTHS when**:
- Data is updated frequently (daily/intraday) - **MINIMUM_AGE_MONTHS = 0**: Current month only retention
- Historical data access is rare - Data updated frequently (daily/intraday)
- ODS bucket space is limited - Historical data access is rare
- Example: LM dissemination feeds - ODS bucket space is limited
- Example: LM dissemination feeds
- **MINIMUM_AGE_MONTHS = N (N > 0)**: Multi-month retention
- Regulatory compliance requires specific retention period
- Analytical workloads need N-month access
- Data updates are infrequent
- Example: CSDB securities data (MINIMUM_AGE_MONTHS = 6)
2. **Use MINIMUM_AGE_MONTHS when**: 2. **Use THRESHOLD_BASED when**:
- Regulatory compliance requires specific retention period
- Analytical workloads need multi-month access
- Data updates are infrequent
- Example: CSDB securities data (6-month retention)
3. **Use THRESHOLD_BASED when**:
- Maintaining backward compatibility with legacy behavior - Maintaining backward compatibility with legacy behavior
- Simple time-based archival is sufficient - Simple time-based archival is sufficient
- Migration from FILE_ARCHIVER v2.0.0 - Migration from FILE_ARCHIVER v2.0.0
4. **Use HYBRID when**: 3. **Use HYBRID when**:
- Complex retention requirements - Complex retention requirements
- Combining current month access with minimum age threshold - Combining month boundary check with minimum age threshold
- Advanced scenarios not covered by other strategies - Advanced scenarios not covered by other strategies
### Configuration Best Practices ### Configuration Best Practices
@@ -595,8 +561,8 @@ WHERE object_name = 'FILE_ARCHIVER';
```sql ```sql
-- Test on single table first -- Test on single table first
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = 'CURRENT_MONTH_ONLY', SET ARCHIVAL_STRATEGY = 'MINIMUM_AGE_MONTHS',
MINIMUM_AGE_MONTHS = NULL MINIMUM_AGE_MONTHS = 0 -- 0 = current month only
WHERE SOURCE_FILE_ID = 'TEST_FILE' WHERE SOURCE_FILE_ID = 'TEST_FILE'
AND TABLE_ID = 'TEST_TABLE'; AND TABLE_ID = 'TEST_TABLE';
@@ -610,8 +576,8 @@ WHERE object_name = 'FILE_ARCHIVER';
SELECT SELECT
SOURCE_FILE_ID, SOURCE_FILE_ID,
TABLE_ID, TABLE_ID,
'CURRENT_MONTH_ONLY' AS NEW_STRATEGY, 'MINIMUM_AGE_MONTHS' AS NEW_STRATEGY,
NULL AS NEW_MIN_AGE, 0 AS NEW_MIN_AGE, -- 0 = current month only
ARCHIVAL_STRATEGY AS OLD_STRATEGY, ARCHIVAL_STRATEGY AS OLD_STRATEGY,
MINIMUM_AGE_MONTHS AS OLD_MIN_AGE MINIMUM_AGE_MONTHS AS OLD_MIN_AGE
FROM CT_MRDS.A_SOURCE_FILE_CONFIG FROM CT_MRDS.A_SOURCE_FILE_CONFIG