diff --git a/MARS_Packages/REL02_POST/MARS-1409/100_MARS_1409_rollback_archival_strategy_column.sql b/MARS_Packages/REL02_POST/MARS-1409/100_MARS_1409_rollback_archival_strategy_column.sql new file mode 100644 index 0000000..d63f59d --- /dev/null +++ b/MARS_Packages/REL02_POST/MARS-1409/100_MARS_1409_rollback_archival_strategy_column.sql @@ -0,0 +1,122 @@ +-- ============================================================================ +-- MARS-1409 Rollback Step 100: Drop ARCHIVAL_STRATEGY and ARCH_MINIMUM_AGE_MONTHS +-- columns from A_TABLE_STAT and A_TABLE_STAT_HIST +-- ============================================================================ +-- Purpose: Rollback of step 10 - remove both stat self-documentation columns +-- Prerequisites: Step 10 was applied +-- ============================================================================ + +SET SERVEROUTPUT ON SIZE UNLIMITED +WHENEVER SQLERROR EXIT SQL.SQLCODE + +-- ---------------------------------------------------------------------------- +-- ARCH_MINIMUM_AGE_MONTHS (drop first - added second) +-- ---------------------------------------------------------------------------- + +PROMPT +PROMPT Dropping ARCH_MINIMUM_AGE_MONTHS column from A_TABLE_STAT... + +DECLARE + vColumnExists NUMBER := 0; +BEGIN + SELECT COUNT(*) INTO vColumnExists + FROM ALL_TAB_COLUMNS + WHERE OWNER = 'CT_MRDS' + AND TABLE_NAME = 'A_TABLE_STAT' + AND COLUMN_NAME = 'ARCH_MINIMUM_AGE_MONTHS'; + + IF vColumnExists = 0 THEN + DBMS_OUTPUT.PUT_LINE('SKIP: Column ARCH_MINIMUM_AGE_MONTHS does not exist in A_TABLE_STAT.'); + ELSE + EXECUTE IMMEDIATE 'ALTER TABLE CT_MRDS.A_TABLE_STAT DROP COLUMN ARCH_MINIMUM_AGE_MONTHS'; + DBMS_OUTPUT.PUT_LINE('Column ARCH_MINIMUM_AGE_MONTHS dropped from A_TABLE_STAT successfully.'); + END IF; +EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('ERROR dropping ARCH_MINIMUM_AGE_MONTHS from A_TABLE_STAT: ' || SQLERRM); + RAISE; +END; +/ + +PROMPT +PROMPT Dropping ARCH_MINIMUM_AGE_MONTHS column from A_TABLE_STAT_HIST... + +DECLARE + vColumnExists NUMBER := 0; +BEGIN + SELECT COUNT(*) INTO vColumnExists + FROM ALL_TAB_COLUMNS + WHERE OWNER = 'CT_MRDS' + AND TABLE_NAME = 'A_TABLE_STAT_HIST' + AND COLUMN_NAME = 'ARCH_MINIMUM_AGE_MONTHS'; + + IF vColumnExists = 0 THEN + DBMS_OUTPUT.PUT_LINE('SKIP: Column ARCH_MINIMUM_AGE_MONTHS does not exist in A_TABLE_STAT_HIST.'); + ELSE + EXECUTE IMMEDIATE 'ALTER TABLE CT_MRDS.A_TABLE_STAT_HIST DROP COLUMN ARCH_MINIMUM_AGE_MONTHS'; + DBMS_OUTPUT.PUT_LINE('Column ARCH_MINIMUM_AGE_MONTHS dropped from A_TABLE_STAT_HIST successfully.'); + END IF; +EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('ERROR dropping ARCH_MINIMUM_AGE_MONTHS from A_TABLE_STAT_HIST: ' || SQLERRM); + RAISE; +END; +/ + +-- ---------------------------------------------------------------------------- +-- ARCHIVAL_STRATEGY +-- ---------------------------------------------------------------------------- + +PROMPT +PROMPT Dropping ARCHIVAL_STRATEGY column from A_TABLE_STAT... + +DECLARE + vColumnExists NUMBER := 0; +BEGIN + SELECT COUNT(*) INTO vColumnExists + FROM ALL_TAB_COLUMNS + WHERE OWNER = 'CT_MRDS' + AND TABLE_NAME = 'A_TABLE_STAT' + AND COLUMN_NAME = 'ARCHIVAL_STRATEGY'; + + IF vColumnExists = 0 THEN + DBMS_OUTPUT.PUT_LINE('SKIP: Column ARCHIVAL_STRATEGY does not exist in A_TABLE_STAT.'); + ELSE + EXECUTE IMMEDIATE 'ALTER TABLE CT_MRDS.A_TABLE_STAT DROP COLUMN ARCHIVAL_STRATEGY'; + DBMS_OUTPUT.PUT_LINE('Column ARCHIVAL_STRATEGY dropped from A_TABLE_STAT successfully.'); + END IF; +EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('ERROR dropping ARCHIVAL_STRATEGY from A_TABLE_STAT: ' || SQLERRM); + RAISE; +END; +/ + +PROMPT +PROMPT Dropping ARCHIVAL_STRATEGY column from A_TABLE_STAT_HIST... + +DECLARE + vColumnExists NUMBER := 0; +BEGIN + SELECT COUNT(*) INTO vColumnExists + FROM ALL_TAB_COLUMNS + WHERE OWNER = 'CT_MRDS' + AND TABLE_NAME = 'A_TABLE_STAT_HIST' + AND COLUMN_NAME = 'ARCHIVAL_STRATEGY'; + + IF vColumnExists = 0 THEN + DBMS_OUTPUT.PUT_LINE('SKIP: Column ARCHIVAL_STRATEGY does not exist in A_TABLE_STAT_HIST.'); + ELSE + EXECUTE IMMEDIATE 'ALTER TABLE CT_MRDS.A_TABLE_STAT_HIST DROP COLUMN ARCHIVAL_STRATEGY'; + DBMS_OUTPUT.PUT_LINE('Column ARCHIVAL_STRATEGY dropped from A_TABLE_STAT_HIST successfully.'); + END IF; +EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('ERROR dropping ARCHIVAL_STRATEGY from A_TABLE_STAT_HIST: ' || SQLERRM); + RAISE; +END; +/ + +PROMPT +PROMPT Rollback step 100 completed: ARCHIVAL_STRATEGY and ARCH_MINIMUM_AGE_MONTHS columns removed from both statistics tables. +PROMPT diff --git a/MARS_Packages/REL02_POST/MARS-1409/10_MARS_1409_add_archival_strategy_column.sql b/MARS_Packages/REL02_POST/MARS-1409/10_MARS_1409_add_archival_strategy_column.sql new file mode 100644 index 0000000..46e0b67 --- /dev/null +++ b/MARS_Packages/REL02_POST/MARS-1409/10_MARS_1409_add_archival_strategy_column.sql @@ -0,0 +1,153 @@ +-- ============================================================================ +-- MARS-1409 Step 10: Add ARCHIVAL_STRATEGY and ARCH_MINIMUM_AGE_MONTHS columns +-- to A_TABLE_STAT and A_TABLE_STAT_HIST tables +-- ============================================================================ +-- Purpose: Make statistics records fully self-documenting: +-- ARCHIVAL_STRATEGY - strategy in effect when stats were gathered +-- (THRESHOLD_BASED, MINIMUM_AGE_MONTHS, HYBRID) +-- ARCH_MINIMUM_AGE_MONTHS - minimum age threshold in months; complements +-- ARCH_THRESHOLD_DAYS: +-- THRESHOLD_BASED -> ARCH_THRESHOLD_DAYS set, ARCH_MINIMUM_AGE_MONTHS NULL +-- MINIMUM_AGE_MONTHS -> ARCH_THRESHOLD_DAYS NULL, ARCH_MINIMUM_AGE_MONTHS set +-- HYBRID -> both columns set +-- Prerequisites: A_TABLE_STAT and A_TABLE_STAT_HIST tables exist +-- ============================================================================ + +SET SERVEROUTPUT ON SIZE UNLIMITED +WHENEVER SQLERROR EXIT SQL.SQLCODE + +-- ---------------------------------------------------------------------------- +-- ARCHIVAL_STRATEGY +-- ---------------------------------------------------------------------------- + +PROMPT +PROMPT Adding ARCHIVAL_STRATEGY column to A_TABLE_STAT... + +DECLARE + vColumnExists NUMBER := 0; +BEGIN + SELECT COUNT(*) INTO vColumnExists + FROM ALL_TAB_COLUMNS + WHERE OWNER = 'CT_MRDS' + AND TABLE_NAME = 'A_TABLE_STAT' + AND COLUMN_NAME = 'ARCHIVAL_STRATEGY'; + + IF vColumnExists > 0 THEN + DBMS_OUTPUT.PUT_LINE('SKIP: Column ARCHIVAL_STRATEGY already exists in A_TABLE_STAT.'); + ELSE + EXECUTE IMMEDIATE ' + ALTER TABLE CT_MRDS.A_TABLE_STAT ADD ( + ARCHIVAL_STRATEGY VARCHAR2(30) + )'; + EXECUTE IMMEDIATE ' + COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT.ARCHIVAL_STRATEGY IS + ''Archival strategy used when statistics were gathered (THRESHOLD_BASED, MINIMUM_AGE_MONTHS, HYBRID). Populated by FILE_ARCHIVER.GATHER_TABLE_STAT (MARS-1409)'''; + DBMS_OUTPUT.PUT_LINE('Column ARCHIVAL_STRATEGY added to A_TABLE_STAT successfully.'); + END IF; +EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('ERROR adding ARCHIVAL_STRATEGY to A_TABLE_STAT: ' || SQLERRM); + RAISE; +END; +/ + +PROMPT +PROMPT Adding ARCHIVAL_STRATEGY column to A_TABLE_STAT_HIST... + +DECLARE + vColumnExists NUMBER := 0; +BEGIN + SELECT COUNT(*) INTO vColumnExists + FROM ALL_TAB_COLUMNS + WHERE OWNER = 'CT_MRDS' + AND TABLE_NAME = 'A_TABLE_STAT_HIST' + AND COLUMN_NAME = 'ARCHIVAL_STRATEGY'; + + IF vColumnExists > 0 THEN + DBMS_OUTPUT.PUT_LINE('SKIP: Column ARCHIVAL_STRATEGY already exists in A_TABLE_STAT_HIST.'); + ELSE + EXECUTE IMMEDIATE ' + ALTER TABLE CT_MRDS.A_TABLE_STAT_HIST ADD ( + ARCHIVAL_STRATEGY VARCHAR2(30) + )'; + EXECUTE IMMEDIATE ' + COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT_HIST.ARCHIVAL_STRATEGY IS + ''Archival strategy used when statistics were gathered (THRESHOLD_BASED, MINIMUM_AGE_MONTHS, HYBRID). Populated by FILE_ARCHIVER.GATHER_TABLE_STAT (MARS-1409)'''; + DBMS_OUTPUT.PUT_LINE('Column ARCHIVAL_STRATEGY added to A_TABLE_STAT_HIST successfully.'); + END IF; +EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('ERROR adding ARCHIVAL_STRATEGY to A_TABLE_STAT_HIST: ' || SQLERRM); + RAISE; +END; +/ + +-- ---------------------------------------------------------------------------- +-- ARCH_MINIMUM_AGE_MONTHS +-- ---------------------------------------------------------------------------- + +PROMPT +PROMPT Adding ARCH_MINIMUM_AGE_MONTHS column to A_TABLE_STAT... + +DECLARE + vColumnExists NUMBER := 0; +BEGIN + SELECT COUNT(*) INTO vColumnExists + FROM ALL_TAB_COLUMNS + WHERE OWNER = 'CT_MRDS' + AND TABLE_NAME = 'A_TABLE_STAT' + AND COLUMN_NAME = 'ARCH_MINIMUM_AGE_MONTHS'; + + IF vColumnExists > 0 THEN + DBMS_OUTPUT.PUT_LINE('SKIP: Column ARCH_MINIMUM_AGE_MONTHS already exists in A_TABLE_STAT.'); + ELSE + EXECUTE IMMEDIATE ' + ALTER TABLE CT_MRDS.A_TABLE_STAT ADD ( + ARCH_MINIMUM_AGE_MONTHS NUMBER(4,0) + )'; + EXECUTE IMMEDIATE ' + COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT.ARCH_MINIMUM_AGE_MONTHS IS + ''Minimum age threshold in months used when statistics were gathered. Populated for MINIMUM_AGE_MONTHS and HYBRID strategies; NULL for THRESHOLD_BASED. Complements ARCH_THRESHOLD_DAYS. Populated by FILE_ARCHIVER.GATHER_TABLE_STAT (MARS-1409)'''; + DBMS_OUTPUT.PUT_LINE('Column ARCH_MINIMUM_AGE_MONTHS added to A_TABLE_STAT successfully.'); + END IF; +EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('ERROR adding ARCH_MINIMUM_AGE_MONTHS to A_TABLE_STAT: ' || SQLERRM); + RAISE; +END; +/ + +PROMPT +PROMPT Adding ARCH_MINIMUM_AGE_MONTHS column to A_TABLE_STAT_HIST... + +DECLARE + vColumnExists NUMBER := 0; +BEGIN + SELECT COUNT(*) INTO vColumnExists + FROM ALL_TAB_COLUMNS + WHERE OWNER = 'CT_MRDS' + AND TABLE_NAME = 'A_TABLE_STAT_HIST' + AND COLUMN_NAME = 'ARCH_MINIMUM_AGE_MONTHS'; + + IF vColumnExists > 0 THEN + DBMS_OUTPUT.PUT_LINE('SKIP: Column ARCH_MINIMUM_AGE_MONTHS already exists in A_TABLE_STAT_HIST.'); + ELSE + EXECUTE IMMEDIATE ' + ALTER TABLE CT_MRDS.A_TABLE_STAT_HIST ADD ( + ARCH_MINIMUM_AGE_MONTHS NUMBER(4,0) + )'; + EXECUTE IMMEDIATE ' + COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT_HIST.ARCH_MINIMUM_AGE_MONTHS IS + ''Minimum age threshold in months used when statistics were gathered. Populated for MINIMUM_AGE_MONTHS and HYBRID strategies; NULL for THRESHOLD_BASED. Complements ARCH_THRESHOLD_DAYS. Populated by FILE_ARCHIVER.GATHER_TABLE_STAT (MARS-1409)'''; + DBMS_OUTPUT.PUT_LINE('Column ARCH_MINIMUM_AGE_MONTHS added to A_TABLE_STAT_HIST successfully.'); + END IF; +EXCEPTION + WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE('ERROR adding ARCH_MINIMUM_AGE_MONTHS to A_TABLE_STAT_HIST: ' || SQLERRM); + RAISE; +END; +/ + +PROMPT +PROMPT Step 10 completed: ARCHIVAL_STRATEGY and ARCH_MINIMUM_AGE_MONTHS columns added to both statistics tables. +PROMPT diff --git a/MARS_Packages/REL02_POST/MARS-1409/install_mars1409.sql b/MARS_Packages/REL02_POST/MARS-1409/install_mars1409.sql index 7280adb..a607171 100644 --- a/MARS_Packages/REL02_POST/MARS-1409/install_mars1409.sql +++ b/MARS_Packages/REL02_POST/MARS-1409/install_mars1409.sql @@ -31,9 +31,9 @@ PROMPT ========================================================================= PROMPT MARS-1409 Installation Starting PROMPT ============================================================================ PROMPT Package: CT_MRDS.FILE_MANAGER v3.X.X -PROMPT Change: Add A_WORKFLOW_HISTORY_KEY to A_SOURCE_FILE_RECEIVED -PROMPT Purpose: Direct tracking of workflow history keys in file registration -PROMPT Steps: 11 (DDL, ENV_MANAGER Update, FILE_MANAGER Update, FILE_ARCHIVER Update, Trigger Update, Verification, Tracking, Version Verification) +PROMPT Change: Add A_WORKFLOW_HISTORY_KEY to A_SOURCE_FILE_RECEIVED, ARCHIVAL_STRATEGY to A_TABLE_STAT/HIST +PROMPT Purpose: Direct tracking of workflow history keys in file registration; self-documenting statistics records +PROMPT Steps: 12 (DDL x2, ENV_MANAGER Update, FILE_MANAGER Update, FILE_ARCHIVER Update, Trigger Update, Verification, Tracking, Version Verification) PROMPT Timestamp: SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS install_start FROM DUAL; PROMPT ============================================================================ @@ -56,61 +56,67 @@ PROMPT ========================================================================= PROMPT PROMPT ============================================================================ -PROMPT STEP 2: Update ENV_MANAGER package specification +PROMPT STEP 2: Add ARCHIVAL_STRATEGY and ARCH_MINIMUM_AGE_MONTHS columns to A_TABLE_STAT and A_TABLE_STAT_HIST +PROMPT ============================================================================ +@@10_MARS_1409_add_archival_strategy_column.sql + +PROMPT +PROMPT ============================================================================ +PROMPT STEP 3: Update ENV_MANAGER package specification PROMPT ============================================================================ @@02_MARS_1409_install_CT_MRDS_ENV_MANAGER_SPEC.sql PROMPT PROMPT ============================================================================ -PROMPT STEP 3: Update ENV_MANAGER package body +PROMPT STEP 4: Update ENV_MANAGER package body PROMPT ============================================================================ @@03_MARS_1409_install_CT_MRDS_ENV_MANAGER_BODY.sql PROMPT PROMPT ============================================================================ -PROMPT STEP 4: Update FILE_MANAGER package specification +PROMPT STEP 5: Update FILE_MANAGER package specification PROMPT ============================================================================ @@04_MARS_1409_install_CT_MRDS_FILE_MANAGER_SPEC.sql PROMPT PROMPT ============================================================================ -PROMPT STEP 5: Update FILE_MANAGER package body +PROMPT STEP 6: Update FILE_MANAGER package body PROMPT ============================================================================ @@05_MARS_1409_install_CT_MRDS_FILE_MANAGER_BODY.sql PROMPT PROMPT ============================================================================ -PROMPT STEP 6: Update FILE_ARCHIVER package specification +PROMPT STEP 7: Update FILE_ARCHIVER package specification PROMPT ============================================================================ @@06_MARS_1409_install_CT_MRDS_FILE_ARCHIVER_SPEC.sql PROMPT PROMPT ============================================================================ -PROMPT STEP 7: Update FILE_ARCHIVER package body +PROMPT STEP 8: Update FILE_ARCHIVER package body PROMPT ============================================================================ @@07_MARS_1409_install_CT_MRDS_FILE_ARCHIVER_BODY.sql PROMPT PROMPT ============================================================================ -PROMPT STEP 8: Update A_WORKFLOW_HISTORY trigger +PROMPT STEP 9: Update A_WORKFLOW_HISTORY trigger PROMPT ============================================================================ @@08_MARS_1409_install_CT_MRDS_A_WORKFLOW_HISTORY.sql PROMPT PROMPT ============================================================================ -PROMPT STEP 9: Verify installation +PROMPT STEP 10: Verify installation PROMPT ============================================================================ @@09_MARS_1409_verify_installation.sql PROMPT PROMPT ============================================================================ -PROMPT STEP 10: Track package versions +PROMPT STEP 11: Track package versions PROMPT ============================================================================ @@track_package_versions.sql PROMPT PROMPT ============================================================================ -PROMPT STEP 11: Verify package versions +PROMPT STEP 12: Verify package versions PROMPT ============================================================================ @@verify_packages_version.sql diff --git a/MARS_Packages/REL02_POST/MARS-1409/new_version/A_TABLE_STAT.sql b/MARS_Packages/REL02_POST/MARS-1409/new_version/A_TABLE_STAT.sql new file mode 100644 index 0000000..74db266 --- /dev/null +++ b/MARS_Packages/REL02_POST/MARS-1409/new_version/A_TABLE_STAT.sql @@ -0,0 +1,30 @@ +-- ==================================================================== +-- A_TABLE_STAT Table +-- ==================================================================== +-- Purpose: Store current table statistics and archival thresholds +-- ==================================================================== + +CREATE TABLE CT_MRDS.A_TABLE_STAT ( + A_TABLE_STAT_KEY NUMBER(38,0) PRIMARY KEY, + A_SOURCE_FILE_CONFIG_KEY NUMBER(38,0) NOT NULL, + TABLE_NAME VARCHAR2(200) NOT NULL, + FILE_COUNT NUMBER(38,0), + OVER_ARCH_THRESOLD_FILE_COUNT NUMBER(38,0), + ROW_COUNT NUMBER(38,0), + OVER_ARCH_THRESOLD_ROW_COUNT NUMBER(38,0), + SIZE NUMBER(38,0), + OVER_ARCH_THRESOLD_SIZE NUMBER(38,0), + ARCH_THRESHOLD_DAYS NUMBER(4,0), + CREATED TIMESTAMP(6) DEFAULT SYSTIMESTAMP, + ARCHIVAL_STRATEGY VARCHAR2(30), + ARCH_MINIMUM_AGE_MONTHS NUMBER(4,0), + CONSTRAINT A_TABLE_STAT_UK1 UNIQUE(A_SOURCE_FILE_CONFIG_KEY) +) TABLESPACE "DATA"; + +COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT.ARCHIVAL_STRATEGY IS 'Archival strategy used when statistics were gathered (THRESHOLD_BASED, MINIMUM_AGE_MONTHS, HYBRID). Populated by FILE_ARCHIVER.GATHER_TABLE_STAT (MARS-1409)'; +COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT.ARCH_MINIMUM_AGE_MONTHS IS 'Minimum age threshold in months used when statistics were gathered. Populated for MINIMUM_AGE_MONTHS and HYBRID strategies; NULL for THRESHOLD_BASED. Complements ARCH_THRESHOLD_DAYS. Populated by FILE_ARCHIVER.GATHER_TABLE_STAT (MARS-1409)'; + +-- Unique constraint index (from production export) +CREATE UNIQUE INDEX "CT_MRDS"."A_TABLE_STAT_UK1" +ON "CT_MRDS"."A_TABLE_STAT" ("A_SOURCE_FILE_CONFIG_KEY") +TABLESPACE "DATA"; \ No newline at end of file diff --git a/MARS_Packages/REL02_POST/MARS-1409/new_version/A_TABLE_STAT_HIST.sql b/MARS_Packages/REL02_POST/MARS-1409/new_version/A_TABLE_STAT_HIST.sql new file mode 100644 index 0000000..71cbbb3 --- /dev/null +++ b/MARS_Packages/REL02_POST/MARS-1409/new_version/A_TABLE_STAT_HIST.sql @@ -0,0 +1,24 @@ +-- ==================================================================== +-- A_TABLE_STAT_HIST Table +-- ==================================================================== +-- Purpose: Store historical table statistics for trend analysis +-- ==================================================================== + +CREATE TABLE CT_MRDS.A_TABLE_STAT_HIST ( + A_TABLE_STAT_HIST_KEY NUMBER(38,0) PRIMARY KEY, + A_SOURCE_FILE_CONFIG_KEY NUMBER(38,0) NOT NULL, + TABLE_NAME VARCHAR2(200) NOT NULL, + FILE_COUNT NUMBER(38,0), + OVER_ARCH_THRESOLD_FILE_COUNT NUMBER(38,0), + ROW_COUNT NUMBER(38,0), + OVER_ARCH_THRESOLD_ROW_COUNT NUMBER(38,0), + SIZE NUMBER(38,0), + OVER_ARCH_THRESOLD_SIZE NUMBER(38,0), + ARCH_THRESHOLD_DAYS NUMBER(4,0), + CREATED TIMESTAMP(6) DEFAULT SYSTIMESTAMP, + ARCHIVAL_STRATEGY VARCHAR2(30), + ARCH_MINIMUM_AGE_MONTHS NUMBER(4,0) +) TABLESPACE "DATA"; + +COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT_HIST.ARCHIVAL_STRATEGY IS 'Archival strategy used when statistics were gathered (THRESHOLD_BASED, MINIMUM_AGE_MONTHS, HYBRID). Populated by FILE_ARCHIVER.GATHER_TABLE_STAT (MARS-1409)'; +COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT_HIST.ARCH_MINIMUM_AGE_MONTHS IS 'Minimum age threshold in months used when statistics were gathered. Populated for MINIMUM_AGE_MONTHS and HYBRID strategies; NULL for THRESHOLD_BASED. Complements ARCH_THRESHOLD_DAYS. Populated by FILE_ARCHIVER.GATHER_TABLE_STAT (MARS-1409)'; \ No newline at end of file diff --git a/MARS_Packages/REL02_POST/MARS-1409/new_version/FILE_ARCHIVER.pkb b/MARS_Packages/REL02_POST/MARS-1409/new_version/FILE_ARCHIVER.pkb index 9e8a2f7..1b56755 100644 --- a/MARS_Packages/REL02_POST/MARS-1409/new_version/FILE_ARCHIVER.pkb +++ b/MARS_Packages/REL02_POST/MARS-1409/new_version/FILE_ARCHIVER.pkb @@ -498,6 +498,8 @@ AS ,nvl(sum(case when ' || vWhereClause || ' then r.bytes else 0 end), 0) as OLD_BYTES ,'||COALESCE(TO_CHAR(vSourceFileConfig.ARCHIVE_THRESHOLD_DAYS), 'NULL')||' as ARCHIVE_THRESHOLD_DAYS ,systimestamp as CREATED + ,'''||vSourceFileConfig.ARCHIVAL_STRATEGY||''' as ARCHIVAL_STRATEGY + ,'||COALESCE(TO_CHAR(vSourceFileConfig.MINIMUM_AGE_MONTHS), 'NULL')||' as ARCH_MINIMUM_AGE_MONTHS from tmp_gr t join (SELECT * from DBMS_CLOUD.LIST_OBJECTS( credential_name => '''||CT_MRDS.ENV_MANAGER.gvCredentialName||''', @@ -524,6 +526,8 @@ AS vStats.OVER_ARCH_THRESOLD_SIZE := 0; vStats.ARCH_THRESHOLD_DAYS := vSourceFileConfig.ARCHIVE_THRESHOLD_DAYS; vStats.CREATED := SYSTIMESTAMP; + vStats.ARCHIVAL_STRATEGY := vSourceFileConfig.ARCHIVAL_STRATEGY; + vStats.ARCH_MINIMUM_AGE_MONTHS := vSourceFileConfig.MINIMUM_AGE_MONTHS; ELSE RAISE; END IF; diff --git a/MARS_Packages/REL02_POST/MARS-1409/new_version/FILE_ARCHIVER.pkg b/MARS_Packages/REL02_POST/MARS-1409/new_version/FILE_ARCHIVER.pkg index 69a09e1..2ec4608 100644 --- a/MARS_Packages/REL02_POST/MARS-1409/new_version/FILE_ARCHIVER.pkg +++ b/MARS_Packages/REL02_POST/MARS-1409/new_version/FILE_ARCHIVER.pkg @@ -23,7 +23,7 @@ AS -- Version History (Latest changes first) VERSION_HISTORY CONSTANT VARCHAR2(4000) := - '3.3.1 (2026-03-13): MARS-1468 - Fixed ORA-29913 handling in ARCHIVE_TABLE_DATA (graceful RETURN when ODS bucket is empty) and GATHER_TABLE_STAT (saves zero statistics instead of raising error)' || CHR(13)||CHR(10) || + '3.3.1 (2026-03-13): Fixed ORA-29913 handling in ARCHIVE_TABLE_DATA (graceful RETURN when ODS bucket is empty) and GATHER_TABLE_STAT (saves zero statistics instead of raising error)' || CHR(13)||CHR(10) || '3.3.0 (2026-02-11): Added IS_ARCHIVE_ENABLED and IS_KEEP_IN_TRASH columns to A_SOURCE_FILE_CONFIG for selective archiving and config-based TRASH policy. Removed pKeepInTrash parameter (now from config). Added ARCHIVE_ALL batch procedure with 3-level granularity (config/source/all). Added GATHER_TABLE_STAT_ALL batch statistics procedure with 3-level granularity. Added RESTORE_FILE_FROM_TRASH and PURGE_TRASH_FOLDER with 3-level granularity' || CHR(13)||CHR(10) || '3.2.1 (2026-02-10): Fixed status update - ARCHIVED → ARCHIVED_AND_TRASHED when moving files to TRASH folder (critical bug fix)' || CHR(13)||CHR(10) || '3.2.0 (2026-02-06): Added pKeepInTrash parameter (DEFAULT TRUE) to ARCHIVE_TABLE_DATA for TRASH folder retention control - files kept in TRASH subfolder (DATA bucket) by default for safety and compliance' || CHR(13)||CHR(10) || diff --git a/MARS_Packages/REL02_POST/MARS-1409/rollback_mars1409.sql b/MARS_Packages/REL02_POST/MARS-1409/rollback_mars1409.sql index ac1092e..9898ad8 100644 --- a/MARS_Packages/REL02_POST/MARS-1409/rollback_mars1409.sql +++ b/MARS_Packages/REL02_POST/MARS-1409/rollback_mars1409.sql @@ -32,7 +32,7 @@ PROMPT MARS-1409 Rollback Starting PROMPT ============================================================================ PROMPT Package: CT_MRDS.FILE_MANAGER PROMPT Change: Remove A_WORKFLOW_HISTORY_KEY column and restore previous version -PROMPT Steps: 10 (Restore FILE_ARCHIVER, Restore FILE_MANAGER, Restore ENV_MANAGER, Restore trigger, Clear data, Drop column, Verify) +PROMPT Steps: 11 (Restore FILE_ARCHIVER, Restore FILE_MANAGER, Restore ENV_MANAGER, Restore trigger, Drop ARCHIVAL_STRATEGY and ARCH_MINIMUM_AGE_MONTHS columns, Clear data, Drop column, Verify) PROMPT Timestamp: SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS rollback_start FROM DUAL; PROMPT ============================================================================ @@ -91,19 +91,25 @@ PROMPT ========================================================================= PROMPT PROMPT ============================================================================ -PROMPT STEP 8: Drop A_WORKFLOW_HISTORY_KEY column +PROMPT STEP 8: Drop ARCHIVAL_STRATEGY and ARCH_MINIMUM_AGE_MONTHS columns from A_TABLE_STAT and A_TABLE_STAT_HIST +PROMPT ============================================================================ +@@100_MARS_1409_rollback_archival_strategy_column.sql + +PROMPT +PROMPT ============================================================================ +PROMPT STEP 9: Drop A_WORKFLOW_HISTORY_KEY column PROMPT ============================================================================ @@99_MARS_1409_rollback_workflow_history_key_column.sql PROMPT PROMPT ============================================================================ -PROMPT STEP 9: Verify rollback +PROMPT STEP 10: Verify rollback PROMPT ============================================================================ @@90_MARS_1409_verify_rollback.sql PROMPT PROMPT ============================================================================ -PROMPT STEP 10: Verify package versions +PROMPT STEP 11: Verify package versions PROMPT ============================================================================ @@verify_packages_version.sql diff --git a/MARS_Packages/mrds_elt-dev-database/mrds_elt-dev-database/database/CT_MRDS/SCHEMA/tables/A_TABLE_STAT.sql b/MARS_Packages/mrds_elt-dev-database/mrds_elt-dev-database/database/CT_MRDS/SCHEMA/tables/A_TABLE_STAT.sql index 1f9574a..74db266 100644 --- a/MARS_Packages/mrds_elt-dev-database/mrds_elt-dev-database/database/CT_MRDS/SCHEMA/tables/A_TABLE_STAT.sql +++ b/MARS_Packages/mrds_elt-dev-database/mrds_elt-dev-database/database/CT_MRDS/SCHEMA/tables/A_TABLE_STAT.sql @@ -16,9 +16,14 @@ CREATE TABLE CT_MRDS.A_TABLE_STAT ( OVER_ARCH_THRESOLD_SIZE NUMBER(38,0), ARCH_THRESHOLD_DAYS NUMBER(4,0), CREATED TIMESTAMP(6) DEFAULT SYSTIMESTAMP, + ARCHIVAL_STRATEGY VARCHAR2(30), + ARCH_MINIMUM_AGE_MONTHS NUMBER(4,0), CONSTRAINT A_TABLE_STAT_UK1 UNIQUE(A_SOURCE_FILE_CONFIG_KEY) ) TABLESPACE "DATA"; +COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT.ARCHIVAL_STRATEGY IS 'Archival strategy used when statistics were gathered (THRESHOLD_BASED, MINIMUM_AGE_MONTHS, HYBRID). Populated by FILE_ARCHIVER.GATHER_TABLE_STAT (MARS-1409)'; +COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT.ARCH_MINIMUM_AGE_MONTHS IS 'Minimum age threshold in months used when statistics were gathered. Populated for MINIMUM_AGE_MONTHS and HYBRID strategies; NULL for THRESHOLD_BASED. Complements ARCH_THRESHOLD_DAYS. Populated by FILE_ARCHIVER.GATHER_TABLE_STAT (MARS-1409)'; + -- Unique constraint index (from production export) CREATE UNIQUE INDEX "CT_MRDS"."A_TABLE_STAT_UK1" ON "CT_MRDS"."A_TABLE_STAT" ("A_SOURCE_FILE_CONFIG_KEY") diff --git a/MARS_Packages/mrds_elt-dev-database/mrds_elt-dev-database/database/CT_MRDS/SCHEMA/tables/A_TABLE_STAT_HIST.sql b/MARS_Packages/mrds_elt-dev-database/mrds_elt-dev-database/database/CT_MRDS/SCHEMA/tables/A_TABLE_STAT_HIST.sql index ac75bd7..71cbbb3 100644 --- a/MARS_Packages/mrds_elt-dev-database/mrds_elt-dev-database/database/CT_MRDS/SCHEMA/tables/A_TABLE_STAT_HIST.sql +++ b/MARS_Packages/mrds_elt-dev-database/mrds_elt-dev-database/database/CT_MRDS/SCHEMA/tables/A_TABLE_STAT_HIST.sql @@ -15,5 +15,10 @@ CREATE TABLE CT_MRDS.A_TABLE_STAT_HIST ( SIZE NUMBER(38,0), OVER_ARCH_THRESOLD_SIZE NUMBER(38,0), ARCH_THRESHOLD_DAYS NUMBER(4,0), - CREATED TIMESTAMP(6) DEFAULT SYSTIMESTAMP -) TABLESPACE "DATA"; \ No newline at end of file + CREATED TIMESTAMP(6) DEFAULT SYSTIMESTAMP, + ARCHIVAL_STRATEGY VARCHAR2(30), + ARCH_MINIMUM_AGE_MONTHS NUMBER(4,0) +) TABLESPACE "DATA"; + +COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT_HIST.ARCHIVAL_STRATEGY IS 'Archival strategy used when statistics were gathered (THRESHOLD_BASED, MINIMUM_AGE_MONTHS, HYBRID). Populated by FILE_ARCHIVER.GATHER_TABLE_STAT (MARS-1409)'; +COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT_HIST.ARCH_MINIMUM_AGE_MONTHS IS 'Minimum age threshold in months used when statistics were gathered. Populated for MINIMUM_AGE_MONTHS and HYBRID strategies; NULL for THRESHOLD_BASED. Complements ARCH_THRESHOLD_DAYS. Populated by FILE_ARCHIVER.GATHER_TABLE_STAT (MARS-1409)'; \ No newline at end of file