Refactor MARS-1409: Rollback changes to A_SOURCE_FILE_RECEIVED and related tables
- Dropped A_WORKFLOW_HISTORY_KEY column from A_SOURCE_FILE_RECEIVED with data preservation. - Removed unnecessary checks for column existence during rollback. - Updated A_SOURCE_FILE_CONFIG, A_TABLE_STAT, and A_TABLE_STAT_HIST to their pre-MARS-1409 structures, excluding new columns added in MARS-1409. - Adjusted FILE_ARCHIVER package to reflect changes in statistics handling and archival triggers. - Revised rollback script to ensure proper order of operations for restoring previous versions of packages and tables.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -5,34 +5,52 @@
|
||||
-- ====================================================================
|
||||
|
||||
CREATE TABLE CT_MRDS.A_TABLE_STAT (
|
||||
-- === 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";
|
||||
-- Note: A_TABLE_STAT_UK1 index is auto-created by the UNIQUE constraint definition above.
|
||||
@@ -5,28 +5,49 @@
|
||||
-- ====================================================================
|
||||
|
||||
CREATE TABLE CT_MRDS.A_TABLE_STAT_HIST (
|
||||
-- === 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';
|
||||
-- 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.';
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
@@ -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.
|
||||
@@ -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";
|
||||
Reference in New Issue
Block a user