diff --git a/MARS_Packages/REL02_POST/MARS-1409/01_MARS_1409_add_workflow_history_key_column.sql b/MARS_Packages/REL02_POST/MARS-1409/01_MARS_1409_add_workflow_history_key_column.sql index db00601..96092d6 100644 --- a/MARS_Packages/REL02_POST/MARS-1409/01_MARS_1409_add_workflow_history_key_column.sql +++ b/MARS_Packages/REL02_POST/MARS-1409/01_MARS_1409_add_workflow_history_key_column.sql @@ -1,45 +1,39 @@ -- ============================================================================ --- MARS-1409 Step 01: Add A_WORKFLOW_HISTORY_KEY column +-- MARS-1409 Step 01: Add A_WORKFLOW_HISTORY_KEY column to A_SOURCE_FILE_RECEIVED -- ============================================================================ --- Purpose: Add A_WORKFLOW_HISTORY_KEY column to A_SOURCE_FILE_RECEIVED table --- Prerequisites: Table A_SOURCE_FILE_RECEIVED exists, A_WORKFLOW_HISTORY table exists +-- Purpose: Add A_WORKFLOW_HISTORY_KEY column to A_SOURCE_FILE_RECEIVED +-- using ALTER TABLE to preserve existing data. +-- Prerequisites: A_SOURCE_FILE_CONFIG table exists (FK dependency) -- ============================================================================ SET SERVEROUTPUT ON SIZE UNLIMITED WHENEVER SQLERROR EXIT SQL.SQLCODE PROMPT -PROMPT Adding A_WORKFLOW_HISTORY_KEY column to A_SOURCE_FILE_RECEIVED... +PROMPT Adding A_WORKFLOW_HISTORY_KEY to A_SOURCE_FILE_RECEIVED... -DECLARE - vColumnExists NUMBER := 0; BEGIN - SELECT COUNT(*) INTO vColumnExists - FROM ALL_TAB_COLUMNS - WHERE OWNER = 'CT_MRDS' - AND TABLE_NAME = 'A_SOURCE_FILE_RECEIVED' - AND COLUMN_NAME = 'A_WORKFLOW_HISTORY_KEY'; - - IF vColumnExists > 0 THEN - DBMS_OUTPUT.PUT_LINE('SKIP: Column A_WORKFLOW_HISTORY_KEY already exists.'); - RETURN; - END IF; - - EXECUTE IMMEDIATE ' - ALTER TABLE CT_MRDS.A_SOURCE_FILE_RECEIVED ADD ( - A_WORKFLOW_HISTORY_KEY NUMBER - )'; - - EXECUTE IMMEDIATE ' - COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.A_WORKFLOW_HISTORY_KEY IS - ''Direct link to workflow history - each file has exactly one workflow execution. Populated during VALIDATE_SOURCE_FILE_RECEIVED (MARS-1409)'''; - - DBMS_OUTPUT.PUT_LINE('A_WORKFLOW_HISTORY_KEY column added successfully!'); + EXECUTE IMMEDIATE 'ALTER TABLE CT_MRDS.A_SOURCE_FILE_RECEIVED ADD (A_WORKFLOW_HISTORY_KEY NUMBER)'; + DBMS_OUTPUT.PUT_LINE('Column A_WORKFLOW_HISTORY_KEY added to A_SOURCE_FILE_RECEIVED.'); EXCEPTION WHEN OTHERS THEN - DBMS_OUTPUT.PUT_LINE('ERROR adding column: ' || SQLERRM); - RAISE; + IF SQLCODE = -1430 THEN + DBMS_OUTPUT.PUT_LINE('SKIP: Column A_WORKFLOW_HISTORY_KEY already exists in A_SOURCE_FILE_RECEIVED.'); + ELSE + RAISE; + END IF; END; / PROMPT +PROMPT Adding comment on A_WORKFLOW_HISTORY_KEY... + +BEGIN + EXECUTE IMMEDIATE q'[COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.A_WORKFLOW_HISTORY_KEY IS 'Direct link to workflow history - each file has exactly one workflow execution. Populated during VALIDATE_SOURCE_FILE_RECEIVED (MARS-1409)']'; + DBMS_OUTPUT.PUT_LINE('Comment on A_WORKFLOW_HISTORY_KEY added.'); +END; +/ + +PROMPT +PROMPT Step 01 completed: A_WORKFLOW_HISTORY_KEY column added to A_SOURCE_FILE_RECEIVED. +PROMPT diff --git a/MARS_Packages/REL02_POST/MARS-1409/02_MARS_1409_add_archival_strategy_column.sql b/MARS_Packages/REL02_POST/MARS-1409/02_MARS_1409_add_archival_strategy_column.sql index f4511d1..21009c3 100644 --- a/MARS_Packages/REL02_POST/MARS-1409/02_MARS_1409_add_archival_strategy_column.sql +++ b/MARS_Packages/REL02_POST/MARS-1409/02_MARS_1409_add_archival_strategy_column.sql @@ -1,348 +1,104 @@ -- ============================================================================ --- MARS-1409 Step 10: Add ARCHIVAL_STRATEGY and ARCH_MINIMUM_AGE_MONTHS columns --- to A_TABLE_STAT and A_TABLE_STAT_HIST tables; --- add IS_WORKFLOW_SUCCESS_REQUIRED to A_SOURCE_FILE_CONFIG +-- MARS-1409 Step 10: Update A_TABLE_STAT, A_TABLE_STAT_HIST, A_SOURCE_FILE_CONFIG -- ============================================================================ --- 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 +-- Purpose: Apply MARS-1409 table changes: +-- - A_TABLE_STAT and A_TABLE_STAT_HIST: DROP and recreate from new_version +-- (stats tables with no critical persistent data) +-- - A_SOURCE_FILE_CONFIG: ALTER TABLE ADD IS_WORKFLOW_SUCCESS_REQUIRED column +-- (preserves existing configuration data) +-- - A_SOURCE_FILE_RECEIVED: no changes in this step +-- Prerequisites: A_SOURCE table exists (FK parent of A_SOURCE_FILE_CONFIG) -- ============================================================================ SET SERVEROUTPUT ON SIZE UNLIMITED WHENEVER SQLERROR EXIT SQL.SQLCODE -- ---------------------------------------------------------------------------- --- ARCHIVAL_STRATEGY +-- DROP A_TABLE_STAT -- ---------------------------------------------------------------------------- PROMPT -PROMPT Adding ARCHIVAL_STRATEGY column to A_TABLE_STAT... +PROMPT Dropping 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; + EXECUTE IMMEDIATE 'DROP TABLE CT_MRDS.A_TABLE_STAT'; + DBMS_OUTPUT.PUT_LINE('Table A_TABLE_STAT dropped.'); 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; + IF SQLCODE = -942 THEN + DBMS_OUTPUT.PUT_LINE('SKIP: Table A_TABLE_STAT does not exist.'); + ELSE + RAISE; + END IF; END; / -- ---------------------------------------------------------------------------- --- ARCH_MINIMUM_AGE_MONTHS +-- DROP A_TABLE_STAT_HIST -- ---------------------------------------------------------------------------- PROMPT -PROMPT Adding ARCH_MINIMUM_AGE_MONTHS column to A_TABLE_STAT... +PROMPT Dropping 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' - 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; + EXECUTE IMMEDIATE 'DROP TABLE CT_MRDS.A_TABLE_STAT_HIST'; + DBMS_OUTPUT.PUT_LINE('Table A_TABLE_STAT_HIST dropped.'); 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; + IF SQLCODE = -942 THEN + DBMS_OUTPUT.PUT_LINE('SKIP: Table A_TABLE_STAT_HIST does not exist.'); + ELSE + RAISE; + END IF; END; / -- ---------------------------------------------------------------------------- --- IS_WORKFLOW_SUCCESS_REQUIRED (A_TABLE_STAT, A_TABLE_STAT_HIST) +-- ADD IS_WORKFLOW_SUCCESS_REQUIRED to A_SOURCE_FILE_CONFIG -- ---------------------------------------------------------------------------- PROMPT -PROMPT Adding IS_WORKFLOW_SUCCESS_REQUIRED column to A_TABLE_STAT... +PROMPT Adding IS_WORKFLOW_SUCCESS_REQUIRED to A_SOURCE_FILE_CONFIG... -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 = 'IS_WORKFLOW_SUCCESS_REQUIRED'; - - IF vColumnExists > 0 THEN - DBMS_OUTPUT.PUT_LINE('SKIP: Column IS_WORKFLOW_SUCCESS_REQUIRED already exists in A_TABLE_STAT.'); - ELSE - EXECUTE IMMEDIATE ' - ALTER TABLE CT_MRDS.A_TABLE_STAT ADD ( - IS_WORKFLOW_SUCCESS_REQUIRED CHAR(1) - )'; - EXECUTE IMMEDIATE ' - COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT.IS_WORKFLOW_SUCCESS_REQUIRED IS - ''Reflects IS_WORKFLOW_SUCCESS_REQUIRED value from A_SOURCE_FILE_CONFIG at time statistics were gathered. Y=counts include only WORKFLOW_SUCCESSFUL=Y rows, N=all rows regardless. Added MARS-1409'''; - DBMS_OUTPUT.PUT_LINE('Column IS_WORKFLOW_SUCCESS_REQUIRED added to A_TABLE_STAT successfully.'); - END IF; + EXECUTE IMMEDIATE + 'ALTER TABLE CT_MRDS.A_SOURCE_FILE_CONFIG ADD (' + || ' IS_WORKFLOW_SUCCESS_REQUIRED CHAR(1) DEFAULT ''Y'' NOT NULL ' + || ' CONSTRAINT CHK_IS_WORKFLOW_SUCCESS_REQUIRED CHECK (IS_WORKFLOW_SUCCESS_REQUIRED IN (''Y'', ''N''))' + || ')'; + DBMS_OUTPUT.PUT_LINE('Column IS_WORKFLOW_SUCCESS_REQUIRED added to A_SOURCE_FILE_CONFIG.'); EXCEPTION WHEN OTHERS THEN - DBMS_OUTPUT.PUT_LINE('ERROR adding IS_WORKFLOW_SUCCESS_REQUIRED to A_TABLE_STAT: ' || SQLERRM); - RAISE; + IF SQLCODE = -1430 THEN + DBMS_OUTPUT.PUT_LINE('SKIP: Column IS_WORKFLOW_SUCCESS_REQUIRED already exists in A_SOURCE_FILE_CONFIG.'); + ELSE + RAISE; + END IF; END; / PROMPT -PROMPT Adding IS_WORKFLOW_SUCCESS_REQUIRED column to A_TABLE_STAT_HIST... +PROMPT Adding comment on IS_WORKFLOW_SUCCESS_REQUIRED... -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 = 'IS_WORKFLOW_SUCCESS_REQUIRED'; - - IF vColumnExists > 0 THEN - DBMS_OUTPUT.PUT_LINE('SKIP: Column IS_WORKFLOW_SUCCESS_REQUIRED already exists in A_TABLE_STAT_HIST.'); - ELSE - EXECUTE IMMEDIATE ' - ALTER TABLE CT_MRDS.A_TABLE_STAT_HIST ADD ( - IS_WORKFLOW_SUCCESS_REQUIRED CHAR(1) - )'; - EXECUTE IMMEDIATE ' - COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT_HIST.IS_WORKFLOW_SUCCESS_REQUIRED IS - ''Reflects IS_WORKFLOW_SUCCESS_REQUIRED value from A_SOURCE_FILE_CONFIG at time statistics were gathered. Y=counts include only WORKFLOW_SUCCESSFUL=Y rows, N=all rows regardless. Added MARS-1409'''; - DBMS_OUTPUT.PUT_LINE('Column IS_WORKFLOW_SUCCESS_REQUIRED added to A_TABLE_STAT_HIST successfully.'); - END IF; -EXCEPTION - WHEN OTHERS THEN - DBMS_OUTPUT.PUT_LINE('ERROR adding IS_WORKFLOW_SUCCESS_REQUIRED to A_TABLE_STAT_HIST: ' || SQLERRM); - RAISE; + EXECUTE IMMEDIATE q'[COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_CONFIG.IS_WORKFLOW_SUCCESS_REQUIRED IS 'Y=Archivization requires WORKFLOW_SUCCESSFUL=Y (standard DBT flow), N=Archive regardless of workflow completion status (bypass for manual/non-DBT sources). Added MARS-1409']'; + DBMS_OUTPUT.PUT_LINE('Comment on IS_WORKFLOW_SUCCESS_REQUIRED added.'); END; / -- ---------------------------------------------------------------------------- --- IS_WORKFLOW_SUCCESS_REQUIRED (A_SOURCE_FILE_CONFIG) +-- RECREATE A_TABLE_STAT and A_TABLE_STAT_HIST from new_version -- ---------------------------------------------------------------------------- PROMPT -PROMPT Adding IS_WORKFLOW_SUCCESS_REQUIRED column to A_SOURCE_FILE_CONFIG... - -DECLARE - vColumnExists NUMBER := 0; -BEGIN - SELECT COUNT(*) INTO vColumnExists - FROM ALL_TAB_COLUMNS - WHERE OWNER = 'CT_MRDS' - AND TABLE_NAME = 'A_SOURCE_FILE_CONFIG' - AND COLUMN_NAME = 'IS_WORKFLOW_SUCCESS_REQUIRED'; - - IF vColumnExists > 0 THEN - DBMS_OUTPUT.PUT_LINE('SKIP: Column IS_WORKFLOW_SUCCESS_REQUIRED already exists in A_SOURCE_FILE_CONFIG.'); - ELSE - EXECUTE IMMEDIATE ' - ALTER TABLE CT_MRDS.A_SOURCE_FILE_CONFIG ADD ( - IS_WORKFLOW_SUCCESS_REQUIRED CHAR(1) DEFAULT ''Y'' NOT NULL - )'; - EXECUTE IMMEDIATE ' - ALTER TABLE CT_MRDS.A_SOURCE_FILE_CONFIG ADD CONSTRAINT - CHK_IS_WORKFLOW_SUCCESS_REQUIRED CHECK (IS_WORKFLOW_SUCCESS_REQUIRED IN (''Y'', ''N''))'; - EXECUTE IMMEDIATE ' - COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_CONFIG.IS_WORKFLOW_SUCCESS_REQUIRED IS - ''Y=Archivization requires WORKFLOW_SUCCESSFUL=Y (standard DBT flow), N=Archive regardless of workflow completion status (bypass for manual/non-DBT sources). Added MARS-1409'''; - DBMS_OUTPUT.PUT_LINE('Column IS_WORKFLOW_SUCCESS_REQUIRED added to A_SOURCE_FILE_CONFIG successfully.'); - END IF; -EXCEPTION - WHEN OTHERS THEN - DBMS_OUTPUT.PUT_LINE('ERROR adding IS_WORKFLOW_SUCCESS_REQUIRED to A_SOURCE_FILE_CONFIG: ' || SQLERRM); - RAISE; -END; -/ - --- ---------------------------------------------------------------------------- --- WORKFLOW_SUCCESS_FILE_COUNT, WORKFLOW_SUCCESS_ROW_COUNT, WORKFLOW_SUCCESS_SIZE --- (A_TABLE_STAT) --- ---------------------------------------------------------------------------- +PROMPT Creating A_TABLE_STAT (new_version)... +@@new_version/A_TABLE_STAT.sql PROMPT -PROMPT Adding WORKFLOW_SUCCESS_FILE_COUNT, WORKFLOW_SUCCESS_ROW_COUNT, WORKFLOW_SUCCESS_SIZE columns 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 = 'WORKFLOW_SUCCESS_FILE_COUNT'; - - IF vColumnExists > 0 THEN - DBMS_OUTPUT.PUT_LINE('SKIP: Column WORKFLOW_SUCCESS_FILE_COUNT already exists in A_TABLE_STAT.'); - ELSE - EXECUTE IMMEDIATE ' - ALTER TABLE CT_MRDS.A_TABLE_STAT ADD ( - WORKFLOW_SUCCESS_FILE_COUNT NUMBER(38,0), - WORKFLOW_SUCCESS_ROW_COUNT NUMBER(38,0), - WORKFLOW_SUCCESS_SIZE NUMBER(38,0) - )'; - EXECUTE IMMEDIATE ' - COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT.WORKFLOW_SUCCESS_FILE_COUNT IS - ''Count of files with WORKFLOW_SUCCESSFUL=Y. Always populated regardless of IS_WORKFLOW_SUCCESS_REQUIRED flag. Added MARS-1409'''; - EXECUTE IMMEDIATE ' - COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT.WORKFLOW_SUCCESS_ROW_COUNT IS - ''Row count for files with WORKFLOW_SUCCESSFUL=Y. Always populated regardless of IS_WORKFLOW_SUCCESS_REQUIRED flag. Added MARS-1409'''; - EXECUTE IMMEDIATE ' - COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT.WORKFLOW_SUCCESS_SIZE IS - ''Size in bytes for files with WORKFLOW_SUCCESSFUL=Y. Always populated regardless of IS_WORKFLOW_SUCCESS_REQUIRED flag. Added MARS-1409'''; - DBMS_OUTPUT.PUT_LINE('Columns WORKFLOW_SUCCESS_FILE_COUNT, WORKFLOW_SUCCESS_ROW_COUNT, WORKFLOW_SUCCESS_SIZE added to A_TABLE_STAT successfully.'); - END IF; -EXCEPTION - WHEN OTHERS THEN - DBMS_OUTPUT.PUT_LINE('ERROR adding WORKFLOW_SUCCESS_* columns to A_TABLE_STAT: ' || SQLERRM); - RAISE; -END; -/ - --- ---------------------------------------------------------------------------- --- WORKFLOW_SUCCESS_FILE_COUNT, WORKFLOW_SUCCESS_ROW_COUNT, WORKFLOW_SUCCESS_SIZE --- (A_TABLE_STAT_HIST) --- ---------------------------------------------------------------------------- +PROMPT Creating A_TABLE_STAT_HIST (new_version)... +@@new_version/A_TABLE_STAT_HIST.sql PROMPT -PROMPT Adding WORKFLOW_SUCCESS_FILE_COUNT, WORKFLOW_SUCCESS_ROW_COUNT, WORKFLOW_SUCCESS_SIZE columns 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 = 'WORKFLOW_SUCCESS_FILE_COUNT'; - - IF vColumnExists > 0 THEN - DBMS_OUTPUT.PUT_LINE('SKIP: Column WORKFLOW_SUCCESS_FILE_COUNT already exists in A_TABLE_STAT_HIST.'); - ELSE - EXECUTE IMMEDIATE ' - ALTER TABLE CT_MRDS.A_TABLE_STAT_HIST ADD ( - WORKFLOW_SUCCESS_FILE_COUNT NUMBER(38,0), - WORKFLOW_SUCCESS_ROW_COUNT NUMBER(38,0), - WORKFLOW_SUCCESS_SIZE NUMBER(38,0) - )'; - EXECUTE IMMEDIATE ' - COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT_HIST.WORKFLOW_SUCCESS_FILE_COUNT IS - ''Count of files with WORKFLOW_SUCCESSFUL=Y. Always populated regardless of IS_WORKFLOW_SUCCESS_REQUIRED flag. Added MARS-1409'''; - EXECUTE IMMEDIATE ' - COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT_HIST.WORKFLOW_SUCCESS_ROW_COUNT IS - ''Row count for files with WORKFLOW_SUCCESSFUL=Y. Always populated regardless of IS_WORKFLOW_SUCCESS_REQUIRED flag. Added MARS-1409'''; - EXECUTE IMMEDIATE ' - COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT_HIST.WORKFLOW_SUCCESS_SIZE IS - ''Size in bytes for files with WORKFLOW_SUCCESSFUL=Y. Always populated regardless of IS_WORKFLOW_SUCCESS_REQUIRED flag. Added MARS-1409'''; - DBMS_OUTPUT.PUT_LINE('Columns WORKFLOW_SUCCESS_FILE_COUNT, WORKFLOW_SUCCESS_ROW_COUNT, WORKFLOW_SUCCESS_SIZE added to A_TABLE_STAT_HIST successfully.'); - END IF; -EXCEPTION - WHEN OTHERS THEN - DBMS_OUTPUT.PUT_LINE('ERROR adding WORKFLOW_SUCCESS_* columns 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 IS_WORKFLOW_SUCCESS_REQUIRED added to A_SOURCE_FILE_CONFIG, A_TABLE_STAT and A_TABLE_STAT_HIST. -PROMPT WORKFLOW_SUCCESS_FILE_COUNT, WORKFLOW_SUCCESS_ROW_COUNT, WORKFLOW_SUCCESS_SIZE added to A_TABLE_STAT and A_TABLE_STAT_HIST. +PROMPT Step 10 completed: A_TABLE_STAT and A_TABLE_STAT_HIST recreated from new_version scripts, +PROMPT IS_WORKFLOW_SUCCESS_REQUIRED column added to A_SOURCE_FILE_CONFIG (MARS-1409). PROMPT diff --git a/MARS_Packages/REL02_POST/MARS-1409/98_MARS_1409_rollback_archival_strategy_column.sql b/MARS_Packages/REL02_POST/MARS-1409/98_MARS_1409_rollback_archival_strategy_column.sql index f7f3487..7b003d9 100644 --- a/MARS_Packages/REL02_POST/MARS-1409/98_MARS_1409_rollback_archival_strategy_column.sql +++ b/MARS_Packages/REL02_POST/MARS-1409/98_MARS_1409_rollback_archival_strategy_column.sql @@ -1,9 +1,12 @@ -- ============================================================================ --- MARS-1409 Rollback Step 100: Drop ARCHIVAL_STRATEGY and ARCH_MINIMUM_AGE_MONTHS --- columns from A_TABLE_STAT and A_TABLE_STAT_HIST; --- drop IS_WORKFLOW_SUCCESS_REQUIRED from A_SOURCE_FILE_CONFIG +-- MARS-1409 Rollback Step 100: Restore A_TABLE_STAT, A_TABLE_STAT_HIST, +-- remove IS_WORKFLOW_SUCCESS_REQUIRED from A_SOURCE_FILE_CONFIG -- ============================================================================ --- Purpose: Rollback of step 10 - remove both stat self-documentation columns +-- Purpose: Rollback of step 10: +-- - A_TABLE_STAT and A_TABLE_STAT_HIST: DROP and recreate from rollback_version +-- - A_SOURCE_FILE_CONFIG: ALTER TABLE DROP COLUMN IS_WORKFLOW_SUCCESS_REQUIRED +-- (preserves existing configuration data) +-- - A_SOURCE_FILE_RECEIVED: no changes in this step -- Prerequisites: Step 10 was applied -- ============================================================================ @@ -11,254 +14,79 @@ SET SERVEROUTPUT ON SIZE UNLIMITED WHENEVER SQLERROR EXIT SQL.SQLCODE -- ---------------------------------------------------------------------------- --- ARCH_MINIMUM_AGE_MONTHS (drop first - added second) +-- DROP A_TABLE_STAT -- ---------------------------------------------------------------------------- PROMPT -PROMPT Dropping ARCH_MINIMUM_AGE_MONTHS column from A_TABLE_STAT... +PROMPT Dropping 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; + EXECUTE IMMEDIATE 'DROP TABLE CT_MRDS.A_TABLE_STAT'; + DBMS_OUTPUT.PUT_LINE('Table A_TABLE_STAT dropped.'); 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; + IF SQLCODE = -942 THEN + DBMS_OUTPUT.PUT_LINE('SKIP: Table A_TABLE_STAT does not exist.'); + ELSE + RAISE; + END IF; END; / -- ---------------------------------------------------------------------------- --- ARCHIVAL_STRATEGY +-- DROP A_TABLE_STAT_HIST -- ---------------------------------------------------------------------------- PROMPT -PROMPT Dropping ARCHIVAL_STRATEGY column from A_TABLE_STAT... +PROMPT Dropping 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' - 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; + EXECUTE IMMEDIATE 'DROP TABLE CT_MRDS.A_TABLE_STAT_HIST'; + DBMS_OUTPUT.PUT_LINE('Table A_TABLE_STAT_HIST dropped.'); 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; + IF SQLCODE = -942 THEN + DBMS_OUTPUT.PUT_LINE('SKIP: Table A_TABLE_STAT_HIST does not exist.'); + ELSE + RAISE; + END IF; END; / -- ---------------------------------------------------------------------------- --- IS_WORKFLOW_SUCCESS_REQUIRED (A_TABLE_STAT, A_TABLE_STAT_HIST) +-- DROP IS_WORKFLOW_SUCCESS_REQUIRED from A_SOURCE_FILE_CONFIG -- ---------------------------------------------------------------------------- PROMPT -PROMPT Dropping IS_WORKFLOW_SUCCESS_REQUIRED column from A_TABLE_STAT... +PROMPT Dropping IS_WORKFLOW_SUCCESS_REQUIRED from A_SOURCE_FILE_CONFIG... -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 = 'IS_WORKFLOW_SUCCESS_REQUIRED'; - - IF vColumnExists = 0 THEN - DBMS_OUTPUT.PUT_LINE('SKIP: Column IS_WORKFLOW_SUCCESS_REQUIRED does not exist in A_TABLE_STAT.'); - ELSE - EXECUTE IMMEDIATE 'ALTER TABLE CT_MRDS.A_TABLE_STAT DROP COLUMN IS_WORKFLOW_SUCCESS_REQUIRED'; - DBMS_OUTPUT.PUT_LINE('Column IS_WORKFLOW_SUCCESS_REQUIRED dropped from A_TABLE_STAT successfully.'); - END IF; + EXECUTE IMMEDIATE 'ALTER TABLE CT_MRDS.A_SOURCE_FILE_CONFIG DROP COLUMN IS_WORKFLOW_SUCCESS_REQUIRED'; + DBMS_OUTPUT.PUT_LINE('Column IS_WORKFLOW_SUCCESS_REQUIRED dropped from A_SOURCE_FILE_CONFIG (CHK_IS_WORKFLOW_SUCCESS_REQUIRED constraint dropped automatically).'); EXCEPTION WHEN OTHERS THEN - DBMS_OUTPUT.PUT_LINE('ERROR dropping IS_WORKFLOW_SUCCESS_REQUIRED from A_TABLE_STAT: ' || SQLERRM); - RAISE; -END; -/ - -PROMPT -PROMPT Dropping IS_WORKFLOW_SUCCESS_REQUIRED 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 = 'IS_WORKFLOW_SUCCESS_REQUIRED'; - - IF vColumnExists = 0 THEN - DBMS_OUTPUT.PUT_LINE('SKIP: Column IS_WORKFLOW_SUCCESS_REQUIRED does not exist in A_TABLE_STAT_HIST.'); - ELSE - EXECUTE IMMEDIATE 'ALTER TABLE CT_MRDS.A_TABLE_STAT_HIST DROP COLUMN IS_WORKFLOW_SUCCESS_REQUIRED'; - DBMS_OUTPUT.PUT_LINE('Column IS_WORKFLOW_SUCCESS_REQUIRED dropped from A_TABLE_STAT_HIST successfully.'); - END IF; -EXCEPTION - WHEN OTHERS THEN - DBMS_OUTPUT.PUT_LINE('ERROR dropping IS_WORKFLOW_SUCCESS_REQUIRED from A_TABLE_STAT_HIST: ' || SQLERRM); - RAISE; + IF SQLCODE = -904 THEN + DBMS_OUTPUT.PUT_LINE('SKIP: Column IS_WORKFLOW_SUCCESS_REQUIRED does not exist in A_SOURCE_FILE_CONFIG.'); + ELSE + RAISE; + END IF; END; / -- ---------------------------------------------------------------------------- --- IS_WORKFLOW_SUCCESS_REQUIRED (A_SOURCE_FILE_CONFIG) +-- RECREATE A_TABLE_STAT and A_TABLE_STAT_HIST from rollback_version -- ---------------------------------------------------------------------------- PROMPT -PROMPT Dropping IS_WORKFLOW_SUCCESS_REQUIRED column from A_SOURCE_FILE_CONFIG... - -DECLARE - vColumnExists NUMBER := 0; -BEGIN - SELECT COUNT(*) INTO vColumnExists - FROM ALL_TAB_COLUMNS - WHERE OWNER = 'CT_MRDS' - AND TABLE_NAME = 'A_SOURCE_FILE_CONFIG' - AND COLUMN_NAME = 'IS_WORKFLOW_SUCCESS_REQUIRED'; - - IF vColumnExists = 0 THEN - DBMS_OUTPUT.PUT_LINE('SKIP: Column IS_WORKFLOW_SUCCESS_REQUIRED does not exist in A_SOURCE_FILE_CONFIG.'); - ELSE - EXECUTE IMMEDIATE 'ALTER TABLE CT_MRDS.A_SOURCE_FILE_CONFIG DROP CONSTRAINT CHK_IS_WORKFLOW_SUCCESS_REQUIRED'; - EXECUTE IMMEDIATE 'ALTER TABLE CT_MRDS.A_SOURCE_FILE_CONFIG DROP COLUMN IS_WORKFLOW_SUCCESS_REQUIRED'; - DBMS_OUTPUT.PUT_LINE('Column IS_WORKFLOW_SUCCESS_REQUIRED dropped from A_SOURCE_FILE_CONFIG successfully.'); - END IF; -EXCEPTION - WHEN OTHERS THEN - DBMS_OUTPUT.PUT_LINE('ERROR dropping IS_WORKFLOW_SUCCESS_REQUIRED from A_SOURCE_FILE_CONFIG: ' || SQLERRM); - RAISE; -END; -/ - --- ---------------------------------------------------------------------------- --- WORKFLOW_SUCCESS_FILE_COUNT, WORKFLOW_SUCCESS_ROW_COUNT, WORKFLOW_SUCCESS_SIZE --- (drop from A_TABLE_STAT and A_TABLE_STAT_HIST) --- ---------------------------------------------------------------------------- +PROMPT Creating A_TABLE_STAT (rollback_version - pre-MARS-1409 structure)... +@@rollback_version/A_TABLE_STAT.sql PROMPT -PROMPT Dropping WORKFLOW_SUCCESS_FILE_COUNT, WORKFLOW_SUCCESS_ROW_COUNT, WORKFLOW_SUCCESS_SIZE 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 = 'WORKFLOW_SUCCESS_FILE_COUNT'; - - IF vColumnExists = 0 THEN - DBMS_OUTPUT.PUT_LINE('SKIP: Column WORKFLOW_SUCCESS_FILE_COUNT does not exist in A_TABLE_STAT.'); - ELSE - EXECUTE IMMEDIATE 'ALTER TABLE CT_MRDS.A_TABLE_STAT DROP (WORKFLOW_SUCCESS_FILE_COUNT, WORKFLOW_SUCCESS_ROW_COUNT, WORKFLOW_SUCCESS_SIZE)'; - DBMS_OUTPUT.PUT_LINE('Columns WORKFLOW_SUCCESS_FILE_COUNT, WORKFLOW_SUCCESS_ROW_COUNT, WORKFLOW_SUCCESS_SIZE dropped from A_TABLE_STAT successfully.'); - END IF; -EXCEPTION - WHEN OTHERS THEN - DBMS_OUTPUT.PUT_LINE('ERROR dropping WORKFLOW_SUCCESS_* columns from A_TABLE_STAT: ' || SQLERRM); - RAISE; -END; -/ +PROMPT Creating A_TABLE_STAT_HIST (rollback_version - pre-MARS-1409 structure)... +@@rollback_version/A_TABLE_STAT_HIST.sql PROMPT -PROMPT Dropping WORKFLOW_SUCCESS_FILE_COUNT, WORKFLOW_SUCCESS_ROW_COUNT, WORKFLOW_SUCCESS_SIZE 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 = 'WORKFLOW_SUCCESS_FILE_COUNT'; - - IF vColumnExists = 0 THEN - DBMS_OUTPUT.PUT_LINE('SKIP: Column WORKFLOW_SUCCESS_FILE_COUNT does not exist in A_TABLE_STAT_HIST.'); - ELSE - EXECUTE IMMEDIATE 'ALTER TABLE CT_MRDS.A_TABLE_STAT_HIST DROP (WORKFLOW_SUCCESS_FILE_COUNT, WORKFLOW_SUCCESS_ROW_COUNT, WORKFLOW_SUCCESS_SIZE)'; - DBMS_OUTPUT.PUT_LINE('Columns WORKFLOW_SUCCESS_FILE_COUNT, WORKFLOW_SUCCESS_ROW_COUNT, WORKFLOW_SUCCESS_SIZE dropped from A_TABLE_STAT_HIST successfully.'); - END IF; -EXCEPTION - WHEN OTHERS THEN - DBMS_OUTPUT.PUT_LINE('ERROR dropping WORKFLOW_SUCCESS_* columns 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 IS_WORKFLOW_SUCCESS_REQUIRED removed from A_SOURCE_FILE_CONFIG, A_TABLE_STAT and A_TABLE_STAT_HIST. -PROMPT WORKFLOW_SUCCESS_FILE_COUNT, WORKFLOW_SUCCESS_ROW_COUNT, WORKFLOW_SUCCESS_SIZE removed from A_TABLE_STAT and A_TABLE_STAT_HIST. +PROMPT Rollback Step 100 completed: A_TABLE_STAT and A_TABLE_STAT_HIST restored to pre-MARS-1409 +PROMPT structure, IS_WORKFLOW_SUCCESS_REQUIRED column removed from A_SOURCE_FILE_CONFIG. PROMPT + diff --git a/MARS_Packages/REL02_POST/MARS-1409/99_MARS_1409_rollback_workflow_history_key_column.sql b/MARS_Packages/REL02_POST/MARS-1409/99_MARS_1409_rollback_workflow_history_key_column.sql index e6ca4e3..fe169c0 100644 --- a/MARS_Packages/REL02_POST/MARS-1409/99_MARS_1409_rollback_workflow_history_key_column.sql +++ b/MARS_Packages/REL02_POST/MARS-1409/99_MARS_1409_rollback_workflow_history_key_column.sql @@ -1,44 +1,30 @@ -- ============================================================================ --- MARS-1409 Rollback 91: Drop A_WORKFLOW_HISTORY_KEY column +-- MARS-1409 Rollback 99: Remove A_WORKFLOW_HISTORY_KEY column from A_SOURCE_FILE_RECEIVED -- ============================================================================ --- Purpose: Remove A_WORKFLOW_HISTORY_KEY column from A_SOURCE_FILE_RECEIVED +-- Purpose: Drop A_WORKFLOW_HISTORY_KEY column from A_SOURCE_FILE_RECEIVED +-- using ALTER TABLE to preserve existing data. +-- Prerequisites: A_SOURCE_FILE_CONFIG table exists (FK dependency) -- ============================================================================ SET SERVEROUTPUT ON SIZE UNLIMITED WHENEVER SQLERROR EXIT SQL.SQLCODE PROMPT -PROMPT Dropping A_WORKFLOW_HISTORY_KEY column from A_SOURCE_FILE_RECEIVED... +PROMPT Dropping A_WORKFLOW_HISTORY_KEY from A_SOURCE_FILE_RECEIVED... -DECLARE - vColumnExists NUMBER := 0; BEGIN - SELECT COUNT(*) INTO vColumnExists - FROM ALL_TAB_COLUMNS - WHERE OWNER = 'CT_MRDS' - AND TABLE_NAME = 'A_SOURCE_FILE_RECEIVED' - AND COLUMN_NAME = 'A_WORKFLOW_HISTORY_KEY'; - - IF vColumnExists = 0 THEN - DBMS_OUTPUT.PUT_LINE('SKIP: Column A_WORKFLOW_HISTORY_KEY does not exist (already dropped).'); - RETURN; - END IF; - EXECUTE IMMEDIATE 'ALTER TABLE CT_MRDS.A_SOURCE_FILE_RECEIVED DROP COLUMN A_WORKFLOW_HISTORY_KEY'; - DBMS_OUTPUT.PUT_LINE('A_WORKFLOW_HISTORY_KEY column dropped successfully!'); - - -- Recompile packages invalidated by column drop - EXECUTE IMMEDIATE 'ALTER PACKAGE CT_MRDS.ENV_MANAGER COMPILE BODY'; - EXECUTE IMMEDIATE 'ALTER PACKAGE CT_MRDS.FILE_MANAGER COMPILE'; - EXECUTE IMMEDIATE 'ALTER PACKAGE CT_MRDS.FILE_MANAGER COMPILE BODY'; - EXECUTE IMMEDIATE 'ALTER PACKAGE CT_MRDS.FILE_ARCHIVER COMPILE'; - EXECUTE IMMEDIATE 'ALTER PACKAGE CT_MRDS.FILE_ARCHIVER COMPILE BODY'; - DBMS_OUTPUT.PUT_LINE('Dependent packages recompiled.'); + DBMS_OUTPUT.PUT_LINE('Column A_WORKFLOW_HISTORY_KEY dropped from A_SOURCE_FILE_RECEIVED.'); EXCEPTION WHEN OTHERS THEN - DBMS_OUTPUT.PUT_LINE('ERROR dropping column: ' || SQLERRM); - RAISE; + IF SQLCODE = -904 THEN + DBMS_OUTPUT.PUT_LINE('SKIP: Column A_WORKFLOW_HISTORY_KEY does not exist in A_SOURCE_FILE_RECEIVED.'); + ELSE + RAISE; + END IF; END; / PROMPT +PROMPT Rollback 99 completed: A_WORKFLOW_HISTORY_KEY column removed from A_SOURCE_FILE_RECEIVED. +PROMPT diff --git a/MARS_Packages/REL02_POST/MARS-1409/new_version/A_SOURCE_FILE_CONFIG.sql b/MARS_Packages/REL02_POST/MARS-1409/new_version/A_SOURCE_FILE_CONFIG.sql index 08f32e5..74f7ea6 100644 --- a/MARS_Packages/REL02_POST/MARS-1409/new_version/A_SOURCE_FILE_CONFIG.sql +++ b/MARS_Packages/REL02_POST/MARS-1409/new_version/A_SOURCE_FILE_CONFIG.sql @@ -39,16 +39,6 @@ CREATE TABLE CT_MRDS.A_SOURCE_FILE_CONFIG ( CONSTRAINT A_SOURCE_FILE_CONFIG_UQ1 UNIQUE(SOURCE_FILE_TYPE, SOURCE_FILE_ID, TABLE_ID) ) TABLESPACE "DATA"; --- Primary key index (from production export) -CREATE UNIQUE INDEX "CT_MRDS"."A_SOURCE_FILE_CONFIG_PK" -ON "CT_MRDS"."A_SOURCE_FILE_CONFIG" ("A_SOURCE_FILE_CONFIG_KEY") -TABLESPACE "DATA"; - --- Unique constraint index (from production export) -CREATE UNIQUE INDEX "CT_MRDS"."A_SOURCE_FILE_CONFIG_UQ1" -ON "CT_MRDS"."A_SOURCE_FILE_CONFIG" ("SOURCE_FILE_TYPE", "SOURCE_FILE_ID", "TABLE_ID") -TABLESPACE "DATA"; - -- Column comments COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY IS 'Primary key - unique identifier for source file configuration record'; 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 index c99835b..7262276 100644 --- 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 @@ -5,34 +5,52 @@ -- ==================================================================== CREATE TABLE CT_MRDS.A_TABLE_STAT ( - A_TABLE_STAT_KEY NUMBER(38,0) PRIMARY KEY, + -- === Identity / metadata === + 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 configuration snapshot (values at gather time) === ARCHIVAL_STRATEGY VARCHAR2(30), ARCH_MINIMUM_AGE_MONTHS NUMBER(4,0), + ARCH_THRESHOLD_DAYS NUMBER(4,0), IS_WORKFLOW_SUCCESS_REQUIRED CHAR(1), + -- === Total statistics (all files, no workflow filter) === + FILE_COUNT NUMBER(38,0), + ROW_COUNT NUMBER(38,0), + TOTAL_SIZE NUMBER(38,0), + -- === Over-archival-threshold statistics === + OVER_ARCH_THRESOLD_FILE_COUNT NUMBER(38,0), + OVER_ARCH_THRESOLD_ROW_COUNT NUMBER(38,0), + OVER_ARCH_THRESOLD_TOTAL_SIZE NUMBER(38,0), + -- === Workflow-success statistics (WORKFLOW_SUCCESSFUL='Y' files only) === WORKFLOW_SUCCESS_FILE_COUNT NUMBER(38,0), WORKFLOW_SUCCESS_ROW_COUNT NUMBER(38,0), - WORKFLOW_SUCCESS_SIZE NUMBER(38,0), + WORKFLOW_SUCCESS_TOTAL_SIZE NUMBER(38,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)'; -COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT.IS_WORKFLOW_SUCCESS_REQUIRED IS 'Reflects IS_WORKFLOW_SUCCESS_REQUIRED value from A_SOURCE_FILE_CONFIG when statistics were gathered. Y=OVER_ARCH_THRESOLD counts include only WORKFLOW_SUCCESSFUL=Y rows. Added MARS-1409'; -COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT.WORKFLOW_SUCCESS_FILE_COUNT IS 'Count of files with WORKFLOW_SUCCESSFUL=Y. Always populated regardless of IS_WORKFLOW_SUCCESS_REQUIRED flag. Added MARS-1409'; -COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT.WORKFLOW_SUCCESS_ROW_COUNT IS 'Row count for files with WORKFLOW_SUCCESSFUL=Y. Always populated regardless of IS_WORKFLOW_SUCCESS_REQUIRED flag. Added MARS-1409'; -COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT.WORKFLOW_SUCCESS_SIZE IS 'Size in bytes for files with WORKFLOW_SUCCESSFUL=Y. Always populated regardless of IS_WORKFLOW_SUCCESS_REQUIRED flag. Added MARS-1409'; +-- Identity / metadata +COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT.A_TABLE_STAT_KEY IS 'Primary key, populated from A_TABLE_STAT_KEY_SEQ sequence.'; +COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT.A_SOURCE_FILE_CONFIG_KEY IS 'Foreign key to A_SOURCE_FILE_CONFIG; one current-stat row per config entry (unique constraint A_TABLE_STAT_UK1).'; +COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT.TABLE_NAME IS 'Fully qualified ODS external table name (SCHEMA.TABLE) for which statistics were gathered.'; +COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT.CREATED IS 'Timestamp when the statistics were gathered by FILE_ARCHIVER.GATHER_TABLE_STAT.'; +-- Archival configuration snapshot +COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT.ARCHIVAL_STRATEGY IS 'Archival strategy active 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 copied from A_SOURCE_FILE_CONFIG.MINIMUM_AGE_MONTHS. Populated for MINIMUM_AGE_MONTHS and HYBRID strategies; NULL for THRESHOLD_BASED. Populated by FILE_ARCHIVER.GATHER_TABLE_STAT (MARS-1409).'; +COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT.ARCH_THRESHOLD_DAYS IS 'Archive threshold in days copied from A_SOURCE_FILE_CONFIG.ARCHIVE_THRESHOLD_DAYS. Used by THRESHOLD_BASED and HYBRID strategies.'; +COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT.IS_WORKFLOW_SUCCESS_REQUIRED IS 'Snapshot of A_SOURCE_FILE_CONFIG.IS_WORKFLOW_SUCCESS_REQUIRED at gather time. Y = OVER_ARCH_THRESOLD counts include only files with WORKFLOW_SUCCESSFUL=Y. Added MARS-1409.'; +-- Total statistics +COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT.FILE_COUNT IS 'Total number of files present in the ODS external table, regardless of workflow success status.'; +COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT.ROW_COUNT IS 'Total row count across all files in the ODS external table.'; +COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT.TOTAL_SIZE IS 'Total size in bytes of all files in the ODS bucket location.'; +-- Over-threshold statistics +COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT.OVER_ARCH_THRESOLD_FILE_COUNT IS 'Number of files that satisfy the archival threshold condition. When IS_WORKFLOW_SUCCESS_REQUIRED=Y, also requires WORKFLOW_SUCCESSFUL=Y.'; +COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT.OVER_ARCH_THRESOLD_ROW_COUNT IS 'Row count for files that satisfy the archival threshold condition.'; +COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT.OVER_ARCH_THRESOLD_TOTAL_SIZE IS 'Size in bytes for files that satisfy the archival threshold condition.'; +-- Workflow-success statistics +COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT.WORKFLOW_SUCCESS_FILE_COUNT IS 'Count of files with WORKFLOW_SUCCESSFUL=Y. Always populated regardless of IS_WORKFLOW_SUCCESS_REQUIRED flag. Added MARS-1409.'; +COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT.WORKFLOW_SUCCESS_ROW_COUNT IS 'Row count for files with WORKFLOW_SUCCESSFUL=Y. Always populated regardless of IS_WORKFLOW_SUCCESS_REQUIRED flag. Added MARS-1409.'; +COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT.WORKFLOW_SUCCESS_TOTAL_SIZE IS 'Size in bytes for files with WORKFLOW_SUCCESSFUL=Y. Always populated regardless of IS_WORKFLOW_SUCCESS_REQUIRED flag. Added 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 +-- Note: A_TABLE_STAT_UK1 index is auto-created by the UNIQUE constraint definition above. \ 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 index 825e0be..f713bcc 100644 --- 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 @@ -5,28 +5,49 @@ -- ==================================================================== CREATE TABLE CT_MRDS.A_TABLE_STAT_HIST ( - A_TABLE_STAT_HIST_KEY NUMBER(38,0) PRIMARY KEY, + -- === Identity / metadata === + 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 configuration snapshot (values at gather time) === ARCHIVAL_STRATEGY VARCHAR2(30), ARCH_MINIMUM_AGE_MONTHS NUMBER(4,0), + ARCH_THRESHOLD_DAYS NUMBER(4,0), IS_WORKFLOW_SUCCESS_REQUIRED CHAR(1), + -- === Total statistics (all files, no workflow filter) === + FILE_COUNT NUMBER(38,0), + ROW_COUNT NUMBER(38,0), + TOTAL_SIZE NUMBER(38,0), + -- === Over-archival-threshold statistics === + OVER_ARCH_THRESOLD_FILE_COUNT NUMBER(38,0), + OVER_ARCH_THRESOLD_ROW_COUNT NUMBER(38,0), + OVER_ARCH_THRESOLD_TOTAL_SIZE NUMBER(38,0), + -- === Workflow-success statistics (WORKFLOW_SUCCESSFUL='Y' files only) === WORKFLOW_SUCCESS_FILE_COUNT NUMBER(38,0), WORKFLOW_SUCCESS_ROW_COUNT NUMBER(38,0), - WORKFLOW_SUCCESS_SIZE NUMBER(38,0) + WORKFLOW_SUCCESS_TOTAL_SIZE NUMBER(38,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)'; -COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT_HIST.IS_WORKFLOW_SUCCESS_REQUIRED IS 'Reflects IS_WORKFLOW_SUCCESS_REQUIRED value from A_SOURCE_FILE_CONFIG when statistics were gathered. Y=OVER_ARCH_THRESOLD counts include only WORKFLOW_SUCCESSFUL=Y rows. Added MARS-1409'; -COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT_HIST.WORKFLOW_SUCCESS_FILE_COUNT IS 'Count of files with WORKFLOW_SUCCESSFUL=Y. Always populated regardless of IS_WORKFLOW_SUCCESS_REQUIRED flag. Added MARS-1409'; -COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT_HIST.WORKFLOW_SUCCESS_ROW_COUNT IS 'Row count for files with WORKFLOW_SUCCESSFUL=Y. Always populated regardless of IS_WORKFLOW_SUCCESS_REQUIRED flag. Added MARS-1409'; -COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT_HIST.WORKFLOW_SUCCESS_SIZE IS 'Size in bytes for files with WORKFLOW_SUCCESSFUL=Y. Always populated regardless of IS_WORKFLOW_SUCCESS_REQUIRED flag. Added MARS-1409'; \ No newline at end of file +-- Identity / metadata +COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT_HIST.A_TABLE_STAT_HIST_KEY IS 'Primary key, populated from A_TABLE_STAT_KEY_SEQ sequence (shared with A_TABLE_STAT).'; +COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT_HIST.A_SOURCE_FILE_CONFIG_KEY IS 'Foreign key to A_SOURCE_FILE_CONFIG. Multiple history rows per config entry (no unique constraint).'; +COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT_HIST.TABLE_NAME IS 'Fully qualified ODS external table name (SCHEMA.TABLE) for which statistics were gathered.'; +COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT_HIST.CREATED IS 'Timestamp when the statistics snapshot was taken by FILE_ARCHIVER.GATHER_TABLE_STAT.'; +-- Archival configuration snapshot +COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT_HIST.ARCHIVAL_STRATEGY IS 'Archival strategy active 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 copied from A_SOURCE_FILE_CONFIG.MINIMUM_AGE_MONTHS. Populated for MINIMUM_AGE_MONTHS and HYBRID strategies; NULL for THRESHOLD_BASED. Populated by FILE_ARCHIVER.GATHER_TABLE_STAT (MARS-1409).'; +COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT_HIST.ARCH_THRESHOLD_DAYS IS 'Archive threshold in days copied from A_SOURCE_FILE_CONFIG.ARCHIVE_THRESHOLD_DAYS. Used by THRESHOLD_BASED and HYBRID strategies.'; +COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT_HIST.IS_WORKFLOW_SUCCESS_REQUIRED IS 'Snapshot of A_SOURCE_FILE_CONFIG.IS_WORKFLOW_SUCCESS_REQUIRED at gather time. Y = OVER_ARCH_THRESOLD counts include only files with WORKFLOW_SUCCESSFUL=Y. Added MARS-1409.'; +-- Total statistics +COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT_HIST.FILE_COUNT IS 'Total number of files present in the ODS external table at gather time, regardless of workflow success status.'; +COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT_HIST.ROW_COUNT IS 'Total row count across all files in the ODS external table at gather time.'; +COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT_HIST.TOTAL_SIZE IS 'Total size in bytes of all files in the ODS bucket location at gather time.'; +-- Over-threshold statistics +COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT_HIST.OVER_ARCH_THRESOLD_FILE_COUNT IS 'Number of files that satisfied the archival threshold condition. When IS_WORKFLOW_SUCCESS_REQUIRED=Y, also required WORKFLOW_SUCCESSFUL=Y.'; +COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT_HIST.OVER_ARCH_THRESOLD_ROW_COUNT IS 'Row count for files that satisfied the archival threshold condition.'; +COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT_HIST.OVER_ARCH_THRESOLD_TOTAL_SIZE IS 'Size in bytes for files that satisfied the archival threshold condition.'; +-- Workflow-success statistics +COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT_HIST.WORKFLOW_SUCCESS_FILE_COUNT IS 'Count of files with WORKFLOW_SUCCESSFUL=Y. Always populated regardless of IS_WORKFLOW_SUCCESS_REQUIRED flag. Added MARS-1409.'; +COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT_HIST.WORKFLOW_SUCCESS_ROW_COUNT IS 'Row count for files with WORKFLOW_SUCCESSFUL=Y. Always populated regardless of IS_WORKFLOW_SUCCESS_REQUIRED flag. Added MARS-1409.'; +COMMENT ON COLUMN CT_MRDS.A_TABLE_STAT_HIST.WORKFLOW_SUCCESS_TOTAL_SIZE IS 'Size in bytes for files with WORKFLOW_SUCCESSFUL=Y. Always populated regardless of IS_WORKFLOW_SUCCESS_REQUIRED flag. Added 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 b009ed7..5d0bf61 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 @@ -143,8 +143,8 @@ AS ELSE -- THRESHOLD_BASED and HYBRID: Check thresholds if vTableStat.OVER_ARCH_THRESOLD_FILE_COUNT >= vSourceFileConfig.ARCHIVE_THRESHOLD_FILES_COUNT then vArchivalTriggeredBy := 'FILES_COUNT'; - elsif vTableStat.OVER_ARCH_THRESOLD_ROW_COUNT >= vSourceFileConfig.ARCHIVE_THRESHOLD_ROWS_COUNT then vArchivalTriggeredBy := vArchivalTriggeredBy||', ROWS_COUNT'; - elsif vTableStat.OVER_ARCH_THRESOLD_SIZE >= vSourceFileConfig.ARCHIVE_THRESHOLD_BYTES_SUM then vArchivalTriggeredBy := vArchivalTriggeredBy||', BYTES_SUM'; + elsif vTableStat.OVER_ARCH_THRESOLD_ROW_COUNT >= vSourceFileConfig.ARCHIVE_THRESHOLD_ROWS_COUNT then vArchivalTriggeredBy := vArchivalTriggeredBy||', ROWS_COUNT'; + elsif vTableStat.OVER_ARCH_THRESOLD_TOTAL_SIZE >= vSourceFileConfig.ARCHIVE_THRESHOLD_BYTES_SUM then vArchivalTriggeredBy := vArchivalTriggeredBy||', BYTES_SUM'; else CT_MRDS.ENV_MANAGER.LOG_PROCESS_EVENT('Non of archival triggers reached','INFO'); end if; END IF; @@ -480,7 +480,7 @@ AS CT_MRDS.ENV_MANAGER.LOG_PROCESS_EVENT('vOverThresholdWhereClause','DEBUG',vOverThresholdWhereClause); -- Use strategy-based WHERE clause for statistics (MARS-828) - -- FILE_COUNT, ROW_COUNT, SIZE: all files regardless of workflow success (never zero due to workflow filter) + -- FILE_COUNT, ROW_COUNT, TOTAL_SIZE: all files regardless of workflow success (never zero due to workflow filter) -- OVER_ARCH_THRESOLD_*: IS_WORKFLOW_SUCCESS_REQUIRED-aware count of eligible files -- WORKFLOW_SUCCESS_*: informational count of files with WORKFLOW_SUCCESSFUL='Y' vQuery := @@ -513,7 +513,7 @@ AS ,nvl(sum(case when ' || vOverThresholdWhereClause || ' then 1 else 0 end), 0) as OLD_FILE_COUNT ,nvl(sum(row_count_per_file), 0) as ROW_COUNT ,nvl(sum(case when ' || vOverThresholdWhereClause || ' then row_count_per_file else 0 end), 0) as OLD_ROW_COUNT - ,nvl(sum(r.bytes), 0) as BYTES + ,nvl(sum(r.bytes), 0) as TOTAL_SIZE ,nvl(sum(case when ' || vOverThresholdWhereClause || ' 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 @@ -522,7 +522,7 @@ AS ,'''||vSourceFileConfig.IS_WORKFLOW_SUCCESS_REQUIRED||''' as IS_WORKFLOW_SUCCESS_REQUIRED ,nvl(sum(case when workflow_successful = ''Y'' then 1 else 0 end), 0) as WORKFLOW_SUCCESS_FILE_COUNT ,nvl(sum(case when workflow_successful = ''Y'' then row_count_per_file else 0 end), 0) as WORKFLOW_SUCCESS_ROW_COUNT - ,nvl(sum(case when workflow_successful = ''Y'' then r.bytes else 0 end), 0) as WORKFLOW_SUCCESS_SIZE + ,nvl(sum(case when workflow_successful = ''Y'' then r.bytes else 0 end), 0) as WORKFLOW_SUCCESS_TOTAL_SIZE from tmp_gr t join (SELECT * from DBMS_CLOUD.LIST_OBJECTS( credential_name => '''||CT_MRDS.ENV_MANAGER.gvCredentialName||''', @@ -545,8 +545,8 @@ AS vStats.OVER_ARCH_THRESOLD_FILE_COUNT := 0; vStats.ROW_COUNT := 0; vStats.OVER_ARCH_THRESOLD_ROW_COUNT := 0; - vStats."SIZE" := 0; - vStats.OVER_ARCH_THRESOLD_SIZE := 0; + vStats.TOTAL_SIZE := 0; + vStats.OVER_ARCH_THRESOLD_TOTAL_SIZE := 0; vStats.ARCH_THRESHOLD_DAYS := vSourceFileConfig.ARCHIVE_THRESHOLD_DAYS; vStats.CREATED := SYSTIMESTAMP; vStats.ARCHIVAL_STRATEGY := vSourceFileConfig.ARCHIVAL_STRATEGY; @@ -554,7 +554,7 @@ AS vStats.IS_WORKFLOW_SUCCESS_REQUIRED := vSourceFileConfig.IS_WORKFLOW_SUCCESS_REQUIRED; vStats.WORKFLOW_SUCCESS_FILE_COUNT := 0; vStats.WORKFLOW_SUCCESS_ROW_COUNT := 0; - vStats.WORKFLOW_SUCCESS_SIZE := 0; + vStats.WORKFLOW_SUCCESS_TOTAL_SIZE := 0; ELSE RAISE; END IF; diff --git a/MARS_Packages/REL02_POST/MARS-1409/rollback_mars1409.sql b/MARS_Packages/REL02_POST/MARS-1409/rollback_mars1409.sql index bb83fd6..4030f60 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: 11 (Restore FILE_ARCHIVER, Restore FILE_MANAGER, Restore ENV_MANAGER, Restore trigger, Drop ARCHIVAL_STRATEGY/ARCH_MINIMUM_AGE_MONTHS/IS_WORKFLOW_SUCCESS_REQUIRED/WORKFLOW_SUCCESS_* columns, Drop column, Verify) +PROMPT Steps: 11 (Drop tables/columns first, then Restore ENV_MANAGER, FILE_MANAGER, FILE_ARCHIVER (dependency order), Restore trigger, Verify) PROMPT Timestamp: SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS rollback_start FROM DUAL; PROMPT ============================================================================ @@ -49,58 +49,59 @@ END; PROMPT PROMPT ============================================================================ -PROMPT STEP 1: Restore FILE_ARCHIVER package specification (previous version) -PROMPT ============================================================================ -@@91_MARS_1409_rollback_CT_MRDS_FILE_ARCHIVER_SPEC.sql - -PROMPT -PROMPT ============================================================================ -PROMPT STEP 2: Restore FILE_ARCHIVER package body (previous version) -PROMPT ============================================================================ -@@92_MARS_1409_rollback_CT_MRDS_FILE_ARCHIVER_BODY.sql - -PROMPT -PROMPT ============================================================================ -PROMPT STEP 3: Restore FILE_MANAGER package specification (previous version) -PROMPT ============================================================================ -@@93_MARS_1409_rollback_CT_MRDS_FILE_MANAGER_SPEC.sql - -PROMPT -PROMPT ============================================================================ -PROMPT STEP 4: Restore FILE_MANAGER package body (previous version) -PROMPT ============================================================================ -@@94_MARS_1409_rollback_CT_MRDS_FILE_MANAGER_BODY.sql - -PROMPT -PROMPT ============================================================================ -PROMPT STEP 5: Restore ENV_MANAGER package specification (previous version) -PROMPT ============================================================================ -@@95_MARS_1409_rollback_CT_MRDS_ENV_MANAGER_SPEC.sql - -PROMPT -PROMPT ============================================================================ -PROMPT STEP 6: Restore ENV_MANAGER package body (previous version) -PROMPT ============================================================================ -@@96_MARS_1409_rollback_CT_MRDS_ENV_MANAGER_BODY.sql - -PROMPT -PROMPT ============================================================================ -PROMPT STEP 7: Restore A_WORKFLOW_HISTORY trigger (previous version) -PROMPT ============================================================================ -@@97_MARS_1409_rollback_CT_MRDS_A_WORKFLOW_HISTORY.sql - -PROMPT -PROMPT ============================================================================ -PROMPT STEP 8: Drop ARCHIVAL_STRATEGY, ARCH_MINIMUM_AGE_MONTHS, IS_WORKFLOW_SUCCESS_REQUIRED and WORKFLOW_SUCCESS_FILE_COUNT/ROW_COUNT/SIZE columns from A_TABLE_STAT and A_TABLE_STAT_HIST +PROMPT STEP 1: Drop A_TABLE_STAT, A_TABLE_STAT_HIST and IS_WORKFLOW_SUCCESS_REQUIRED column +PROMPT (must be done BEFORE compiling rollback packages so column names match) PROMPT ============================================================================ @@98_MARS_1409_rollback_archival_strategy_column.sql PROMPT PROMPT ============================================================================ -PROMPT STEP 9: Drop A_WORKFLOW_HISTORY_KEY column +PROMPT STEP 2: Drop A_WORKFLOW_HISTORY_KEY column from A_SOURCE_FILE_RECEIVED PROMPT ============================================================================ @@99_MARS_1409_rollback_workflow_history_key_column.sql +PROMPT +PROMPT ============================================================================ +PROMPT STEP 3: Restore ENV_MANAGER package specification (previous version) +PROMPT ============================================================================ +@@95_MARS_1409_rollback_CT_MRDS_ENV_MANAGER_SPEC.sql + +PROMPT +PROMPT ============================================================================ +PROMPT STEP 4: Restore ENV_MANAGER package body (previous version) +PROMPT ============================================================================ +@@96_MARS_1409_rollback_CT_MRDS_ENV_MANAGER_BODY.sql + +PROMPT +PROMPT ============================================================================ +PROMPT STEP 5: Restore FILE_MANAGER package specification (previous version) +PROMPT ============================================================================ +@@93_MARS_1409_rollback_CT_MRDS_FILE_MANAGER_SPEC.sql + +PROMPT +PROMPT ============================================================================ +PROMPT STEP 6: Restore FILE_MANAGER package body (previous version) +PROMPT ============================================================================ +@@94_MARS_1409_rollback_CT_MRDS_FILE_MANAGER_BODY.sql + +PROMPT +PROMPT ============================================================================ +PROMPT STEP 7: Restore FILE_ARCHIVER package specification (previous version) +PROMPT ============================================================================ +@@91_MARS_1409_rollback_CT_MRDS_FILE_ARCHIVER_SPEC.sql + +PROMPT +PROMPT ============================================================================ +PROMPT STEP 8: Restore FILE_ARCHIVER package body (previous version) +PROMPT ============================================================================ +@@92_MARS_1409_rollback_CT_MRDS_FILE_ARCHIVER_BODY.sql + +PROMPT +PROMPT ============================================================================ +PROMPT STEP 9: Restore A_WORKFLOW_HISTORY trigger (previous version) +PROMPT ============================================================================ +@@97_MARS_1409_rollback_CT_MRDS_A_WORKFLOW_HISTORY.sql + PROMPT PROMPT ============================================================================ PROMPT STEP 10: Verify rollback diff --git a/MARS_Packages/REL02_POST/MARS-1409/rollback_version/A_SOURCE_FILE_CONFIG.sql b/MARS_Packages/REL02_POST/MARS-1409/rollback_version/A_SOURCE_FILE_CONFIG.sql new file mode 100644 index 0000000..9b61532 --- /dev/null +++ b/MARS_Packages/REL02_POST/MARS-1409/rollback_version/A_SOURCE_FILE_CONFIG.sql @@ -0,0 +1,101 @@ +-- ==================================================================== +-- A_SOURCE_FILE_CONFIG Table (rollback_version - pre MARS-1409) +-- ==================================================================== +-- Purpose: Store source file configuration and processing rules +-- MARS-1049: Added ENCODING column for CSV character set support +-- MARS-828: Added ARCHIVAL_STRATEGY and MINIMUM_AGE_MONTHS for archival automation +-- NOTE: IS_WORKFLOW_SUCCESS_REQUIRED column NOT included (added by MARS-1409) +-- ==================================================================== + +CREATE TABLE CT_MRDS.A_SOURCE_FILE_CONFIG ( + A_SOURCE_FILE_CONFIG_KEY NUMBER(38,0) NOT NULL ENABLE, + A_SOURCE_KEY VARCHAR2(30) NOT NULL ENABLE, + SOURCE_FILE_TYPE VARCHAR2(200), -- Can be 'INPUT' or 'CONTAINER' or 'LOAD_CONFIG' + SOURCE_FILE_ID VARCHAR2(200), + SOURCE_FILE_DESC VARCHAR2(2000), + SOURCE_FILE_NAME_PATTERN VARCHAR2(200), + TABLE_ID VARCHAR2(200), + TEMPLATE_TABLE_NAME VARCHAR2(200), + CONTAINER_FILE_KEY NUMBER(38,0), + ARCHIVE_THRESHOLD_DAYS NUMBER(4,0), + ARCHIVE_THRESHOLD_FILES_COUNT NUMBER(38,0), + ARCHIVE_THRESHOLD_BYTES_SUM NUMBER(38,0), + ODS_SCHEMA_NAME VARCHAR2(100), + ARCHIVE_THRESHOLD_ROWS_COUNT NUMBER(38,0), + HOURS_TO_EXPIRE_STATISTICS NUMBER(38,3), + ARCHIVAL_STRATEGY VARCHAR2(50), + MINIMUM_AGE_MONTHS NUMBER(3,0), + ENCODING VARCHAR2(50) DEFAULT 'UTF8', + IS_ARCHIVE_ENABLED CHAR(1) DEFAULT 'N' NOT NULL, + IS_KEEP_IN_TRASH CHAR(1) DEFAULT 'N' NOT NULL, + CONSTRAINT A_SOURCE_FILE_CONFIG_PK PRIMARY KEY (A_SOURCE_FILE_CONFIG_KEY), + CONSTRAINT CHK_IS_ARCHIVE_ENABLED CHECK (IS_ARCHIVE_ENABLED IN ('Y', 'N')), + CONSTRAINT CHK_IS_KEEP_IN_TRASH CHECK (IS_KEEP_IN_TRASH IN ('Y', 'N')), + CONSTRAINT SOURCE_FILE_TYPE_CHK CHECK (SOURCE_FILE_TYPE IN ('INPUT', 'CONTAINER', 'LOAD_CONFIG')), + CONSTRAINT ASFC_A_SOURCE_KEY_FK FOREIGN KEY(A_SOURCE_KEY) REFERENCES CT_MRDS.A_SOURCE(A_SOURCE_KEY), + CONSTRAINT ASFC_CONTAINER_FILE_KEY_FK FOREIGN KEY(CONTAINER_FILE_KEY) REFERENCES CT_MRDS.A_SOURCE_FILE_CONFIG(A_SOURCE_FILE_CONFIG_KEY), + CONSTRAINT A_SOURCE_FILE_CONFIG_UQ1 UNIQUE(SOURCE_FILE_TYPE, SOURCE_FILE_ID, TABLE_ID) +) TABLESPACE "DATA"; + +-- Column comments +COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_CONFIG.A_SOURCE_FILE_CONFIG_KEY IS + 'Primary key - unique identifier for source file configuration record'; + +COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_CONFIG.A_SOURCE_KEY IS + 'Foreign key to A_SOURCE table - identifies the source system (e.g., LM, C2D, CSDB)'; + +COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_CONFIG.SOURCE_FILE_TYPE IS + 'Type of file configuration: INPUT (data files), CONTAINER (xml files), or LOAD_CONFIG (configuration files)'; + +COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_CONFIG.SOURCE_FILE_ID IS + 'Unique identifier for the source file within the source system (e.g., UC_DISSEM, STANDING_FACILITIES)'; + +COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_CONFIG.SOURCE_FILE_DESC IS + 'Human-readable description of the source file and its purpose'; + +COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_CONFIG.SOURCE_FILE_NAME_PATTERN IS + 'Filename pattern for matching incoming files (supports wildcards, e.g., UC_NMA_DISSEM-*.csv)'; + +COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_CONFIG.TABLE_ID IS + 'Identifier for the target table where data will be loaded (without schema prefix)'; + +COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_CONFIG.TEMPLATE_TABLE_NAME IS + 'Fully qualified name of template table in CT_ET_TEMPLATES schema used for external table creation'; + +COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_CONFIG.CONTAINER_FILE_KEY IS + 'Foreign key to parent container configuration when this file is part of an xml (NULL for standalone files)'; + +COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_CONFIG.ARCHIVE_THRESHOLD_DAYS IS + 'Threshold for THRESHOLD_BASED strategy: archive data older than N days'; + +COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_CONFIG.ARCHIVE_THRESHOLD_FILES_COUNT IS + 'Trigger archival when file count exceeds this threshold (used in THRESHOLD_BASED and HYBRID strategies)'; + +COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_CONFIG.ARCHIVE_THRESHOLD_BYTES_SUM IS + 'Trigger archival when total size in bytes exceeds this threshold (used in THRESHOLD_BASED and HYBRID strategies)'; + +COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_CONFIG.ARCHIVE_THRESHOLD_ROWS_COUNT IS + 'Trigger archival when total row count exceeds this threshold (used in THRESHOLD_BASED and HYBRID strategies)'; + +COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_CONFIG.ODS_SCHEMA_NAME IS + 'Schema name where ODS external tables are created (typically ODS)'; + +COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_CONFIG.HOURS_TO_EXPIRE_STATISTICS IS + 'Number of hours before table statistics expire and need to be recalculated'; + +COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_CONFIG.ARCHIVAL_STRATEGY IS + 'Archival strategy: THRESHOLD_BASED (days-based), 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 + 'Minimum age in months before archival (required for MINIMUM_AGE_MONTHS and HYBRID strategies, 0=current month only)'; + +COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_CONFIG.ENCODING IS + 'Oracle character set name for CSV files (e.g., UTF8, WE8MSWIN1252, EE8ISO8859P2)'; + +COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_CONFIG.IS_ARCHIVE_ENABLED IS + 'Y=Enable archiving, N=Skip archiving. Controls if table participates in archival process'; + +COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_CONFIG.IS_KEEP_IN_TRASH IS + 'Y=Keep files in TRASH after archiving, N=Delete immediately. Controls TRASH retention policy'; + +GRANT SELECT, INSERT, UPDATE, DELETE ON CT_MRDS.A_SOURCE_FILE_CONFIG TO MRDS_LOADER_ROLE; diff --git a/MARS_Packages/REL02_POST/MARS-1409/rollback_version/A_TABLE_STAT.sql b/MARS_Packages/REL02_POST/MARS-1409/rollback_version/A_TABLE_STAT.sql new file mode 100644 index 0000000..cb77a93 --- /dev/null +++ b/MARS_Packages/REL02_POST/MARS-1409/rollback_version/A_TABLE_STAT.sql @@ -0,0 +1,26 @@ +-- ==================================================================== +-- A_TABLE_STAT Table (rollback_version - pre MARS-1409) +-- ==================================================================== +-- Purpose: Store current table statistics and archival thresholds +-- NOTE: This is the pre-MARS-1409 structure without: +-- ARCHIVAL_STRATEGY, ARCH_MINIMUM_AGE_MONTHS, IS_WORKFLOW_SUCCESS_REQUIRED, +-- WORKFLOW_SUCCESS_FILE_COUNT, WORKFLOW_SUCCESS_ROW_COUNT, WORKFLOW_SUCCESS_TOTAL_SIZE +-- Column names: SIZE (not TOTAL_SIZE), OVER_ARCH_THRESOLD_SIZE (not OVER_ARCH_THRESOLD_TOTAL_SIZE) +-- ==================================================================== + +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, + CREATED TIMESTAMP(6) DEFAULT SYSTIMESTAMP, + ARCH_THRESHOLD_DAYS NUMBER(4,0), + FILE_COUNT NUMBER(38,0), + ROW_COUNT NUMBER(38,0), + "SIZE" NUMBER(38,0), + OVER_ARCH_THRESOLD_FILE_COUNT NUMBER(38,0), + OVER_ARCH_THRESOLD_ROW_COUNT NUMBER(38,0), + OVER_ARCH_THRESOLD_SIZE NUMBER(38,0), + CONSTRAINT A_TABLE_STAT_UK1 UNIQUE(A_SOURCE_FILE_CONFIG_KEY) +) TABLESPACE "DATA"; + +-- Note: A_TABLE_STAT_UK1 index is auto-created by the UNIQUE constraint definition above. diff --git a/MARS_Packages/REL02_POST/MARS-1409/rollback_version/A_TABLE_STAT_HIST.sql b/MARS_Packages/REL02_POST/MARS-1409/rollback_version/A_TABLE_STAT_HIST.sql new file mode 100644 index 0000000..d406001 --- /dev/null +++ b/MARS_Packages/REL02_POST/MARS-1409/rollback_version/A_TABLE_STAT_HIST.sql @@ -0,0 +1,23 @@ +-- ==================================================================== +-- A_TABLE_STAT_HIST Table (rollback_version - pre MARS-1409) +-- ==================================================================== +-- Purpose: Store historical table statistics for trend analysis +-- NOTE: This is the pre-MARS-1409 structure without: +-- ARCHIVAL_STRATEGY, ARCH_MINIMUM_AGE_MONTHS, IS_WORKFLOW_SUCCESS_REQUIRED, +-- WORKFLOW_SUCCESS_FILE_COUNT, WORKFLOW_SUCCESS_ROW_COUNT, WORKFLOW_SUCCESS_TOTAL_SIZE +-- Column names: SIZE (not TOTAL_SIZE), OVER_ARCH_THRESOLD_SIZE (not OVER_ARCH_THRESOLD_TOTAL_SIZE) +-- ==================================================================== + +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, + CREATED TIMESTAMP(6) DEFAULT SYSTIMESTAMP, + ARCH_THRESHOLD_DAYS NUMBER(4,0), + FILE_COUNT NUMBER(38,0), + ROW_COUNT NUMBER(38,0), + "SIZE" NUMBER(38,0), + OVER_ARCH_THRESOLD_FILE_COUNT NUMBER(38,0), + OVER_ARCH_THRESOLD_ROW_COUNT NUMBER(38,0), + OVER_ARCH_THRESOLD_SIZE NUMBER(38,0) +) TABLESPACE "DATA";