MARS-1409
This commit is contained in:
@@ -10,13 +10,14 @@ SET SERVEROUTPUT ON SIZE UNLIMITED
|
|||||||
PROMPT
|
PROMPT
|
||||||
PROMPT Adding A_WORKFLOW_HISTORY_KEY column to A_SOURCE_FILE_RECEIVED...
|
PROMPT Adding A_WORKFLOW_HISTORY_KEY column to A_SOURCE_FILE_RECEIVED...
|
||||||
|
|
||||||
-- TODO: Implementation
|
-- Add A_WORKFLOW_HISTORY_KEY column (no FK constraint - workflow history record created later)
|
||||||
-- ALTER TABLE CT_MRDS.A_SOURCE_FILE_RECEIVED ADD (
|
ALTER TABLE CT_MRDS.A_SOURCE_FILE_RECEIVED ADD (
|
||||||
-- A_WORKFLOW_HISTORY_KEY NUMBER,
|
A_WORKFLOW_HISTORY_KEY NUMBER
|
||||||
-- CONSTRAINT FK_SFR_WORKFLOW_HISTORY
|
);
|
||||||
-- FOREIGN KEY (A_WORKFLOW_HISTORY_KEY)
|
|
||||||
-- REFERENCES CT_MRDS.A_WORKFLOW_HISTORY(A_WORKFLOW_HISTORY_KEY)
|
|
||||||
-- );
|
|
||||||
|
|
||||||
PROMPT Column addition placeholder - TO BE IMPLEMENTED
|
-- Add column comment
|
||||||
|
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)';
|
||||||
|
|
||||||
|
PROMPT A_WORKFLOW_HISTORY_KEY column added successfully!
|
||||||
PROMPT
|
PROMPT
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
-- ============================================================================
|
||||||
|
-- MARS-1409 Installation Script
|
||||||
|
-- ============================================================================
|
||||||
|
-- Script: 01B_MARS_1409_install_CT_MRDS_ENV_MANAGER_SPEC.sql
|
||||||
|
-- Description: Install ENV_MANAGER v3.3.0 package specification
|
||||||
|
-- Author: Grzegorz Michalski
|
||||||
|
-- Date: 2026-02-27
|
||||||
|
-- Dependencies: 01A_MARS_1409_update_existing_workflow_keys.sql
|
||||||
|
-- ============================================================================
|
||||||
|
|
||||||
|
PROMPT ============================================================================
|
||||||
|
PROMPT STEP 1B: Update ENV_MANAGER package specification
|
||||||
|
PROMPT ============================================================================
|
||||||
|
|
||||||
|
PROMPT Installing ENV_MANAGER package specification...
|
||||||
|
|
||||||
|
@@new_version/ENV_MANAGER.pkg
|
||||||
|
|
||||||
|
PROMPT ENV_MANAGER specification installed
|
||||||
|
|
||||||
|
/
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
-- ============================================================================
|
||||||
|
-- MARS-1409 Installation Script
|
||||||
|
-- ============================================================================
|
||||||
|
-- Script: 01C_MARS_1409_install_CT_MRDS_ENV_MANAGER_BODY.sql
|
||||||
|
-- Description: Install ENV_MANAGER v3.3.0 package body
|
||||||
|
-- Author: Grzegorz Michalski
|
||||||
|
-- Date: 2026-02-27
|
||||||
|
-- Dependencies: 01B_MARS_1409_install_CT_MRDS_ENV_MANAGER_SPEC.sql
|
||||||
|
-- ============================================================================
|
||||||
|
|
||||||
|
PROMPT ============================================================================
|
||||||
|
PROMPT STEP 1C: Update ENV_MANAGER package body
|
||||||
|
PROMPT ============================================================================
|
||||||
|
|
||||||
|
PROMPT Installing ENV_MANAGER package body...
|
||||||
|
|
||||||
|
@@new_version/ENV_MANAGER.pkb
|
||||||
|
|
||||||
|
PROMPT ENV_MANAGER body installed
|
||||||
|
|
||||||
|
/
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
-- ============================================================================
|
||||||
|
-- MARS-1409 Installation Script
|
||||||
|
-- ============================================================================
|
||||||
|
-- Script: 03A_MARS_1409_install_CT_MRDS_FILE_ARCHIVER_SPEC.sql
|
||||||
|
-- Description: Install FILE_ARCHIVER package specification
|
||||||
|
-- Author: Grzegorz Michalski
|
||||||
|
-- Date: 2026-02-27
|
||||||
|
-- Dependencies: 03_MARS_1409_install_CT_MRDS_FILE_MANAGER_BODY.sql
|
||||||
|
-- ============================================================================
|
||||||
|
|
||||||
|
PROMPT ============================================================================
|
||||||
|
PROMPT STEP 3A: Update FILE_ARCHIVER package specification
|
||||||
|
PROMPT ============================================================================
|
||||||
|
|
||||||
|
PROMPT Installing FILE_ARCHIVER package specification...
|
||||||
|
|
||||||
|
@@new_version/FILE_ARCHIVER.pkg
|
||||||
|
|
||||||
|
PROMPT FILE_ARCHIVER specification installed
|
||||||
|
|
||||||
|
/
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
-- ============================================================================
|
||||||
|
-- MARS-1409 Installation Script
|
||||||
|
-- ============================================================================
|
||||||
|
-- Script: 03B_MARS_1409_install_CT_MRDS_FILE_ARCHIVER_BODY.sql
|
||||||
|
-- Description: Install FILE_ARCHIVER package body
|
||||||
|
-- Author: Grzegorz Michalski
|
||||||
|
-- Date: 2026-02-27
|
||||||
|
-- Dependencies: 03A_MARS_1409_install_CT_MRDS_FILE_ARCHIVER_SPEC.sql
|
||||||
|
-- ============================================================================
|
||||||
|
|
||||||
|
PROMPT ============================================================================
|
||||||
|
PROMPT STEP 3B: Update FILE_ARCHIVER package body
|
||||||
|
PROMPT ============================================================================
|
||||||
|
|
||||||
|
PROMPT Installing FILE_ARCHIVER package body...
|
||||||
|
|
||||||
|
@@new_version/FILE_ARCHIVER.pkb
|
||||||
|
|
||||||
|
PROMPT FILE_ARCHIVER body installed
|
||||||
|
|
||||||
|
/
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
-- ============================================================================
|
||||||
|
-- MARS-1409 Step 08: Install TRG_A_WORKFLOW_HISTORY trigger
|
||||||
|
-- ============================================================================
|
||||||
|
-- Purpose: Update trigger to mark A_SOURCE_FILE_RECEIVED as INGESTED
|
||||||
|
-- when WORKFLOW_SUCCESSFUL is set to 'Y'
|
||||||
|
-- ============================================================================
|
||||||
|
|
||||||
|
PROMPT Installing TRG_A_WORKFLOW_HISTORY (new_version)...
|
||||||
|
@@new_version/TRG_A_WORKFLOW_HISTORY.sql
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
DECLARE
|
||||||
|
v_status VARCHAR2(20);
|
||||||
|
BEGIN
|
||||||
|
SELECT status INTO v_status
|
||||||
|
FROM all_objects
|
||||||
|
WHERE owner = 'CT_MRDS'
|
||||||
|
AND object_name = 'TRG_A_WORKFLOW_HISTORY'
|
||||||
|
AND object_type = 'TRIGGER';
|
||||||
|
DBMS_OUTPUT.PUT_LINE('TRG_A_WORKFLOW_HISTORY status: ' || v_status);
|
||||||
|
EXCEPTION
|
||||||
|
WHEN NO_DATA_FOUND THEN
|
||||||
|
RAISE_APPLICATION_ERROR(-20001, 'ERROR: TRG_A_WORKFLOW_HISTORY not found after installation');
|
||||||
|
END;
|
||||||
|
/
|
||||||
@@ -0,0 +1,150 @@
|
|||||||
|
-- ============================================================================
|
||||||
|
-- MARS-1409 Step 09: Update A_WORKFLOW_HISTORY_KEY for existing records
|
||||||
|
-- ============================================================================
|
||||||
|
-- Purpose: Populate A_WORKFLOW_HISTORY_KEY for existing A_SOURCE_FILE_RECEIVED records
|
||||||
|
-- by extracting values from corresponding ODS tables
|
||||||
|
-- Prerequisites:
|
||||||
|
-- - A_WORKFLOW_HISTORY_KEY column exists in A_SOURCE_FILE_RECEIVED
|
||||||
|
-- - ODS tables contain A_WORKFLOW_HISTORY_KEY and file$name columns
|
||||||
|
-- ============================================================================
|
||||||
|
|
||||||
|
SET SERVEROUTPUT ON SIZE UNLIMITED
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT Updating A_WORKFLOW_HISTORY_KEY for existing A_SOURCE_FILE_RECEIVED records...
|
||||||
|
|
||||||
|
DECLARE
|
||||||
|
vUpdatedTotal NUMBER := 0;
|
||||||
|
vUpdatedCurrent NUMBER := 0;
|
||||||
|
vFailedConfigs NUMBER := 0;
|
||||||
|
vSkippedConfigs NUMBER := 0;
|
||||||
|
vTableName VARCHAR2(200);
|
||||||
|
vSQL VARCHAR2(4000);
|
||||||
|
vRecordsToUpdate NUMBER := 0;
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
-- Count total records to update
|
||||||
|
SELECT COUNT(*) INTO vRecordsToUpdate
|
||||||
|
FROM CT_MRDS.A_SOURCE_FILE_RECEIVED
|
||||||
|
WHERE A_WORKFLOW_HISTORY_KEY IS NULL
|
||||||
|
AND PROCESSING_STATUS IN ('VALIDATED', 'READY_FOR_INGESTION', 'INGESTED', 'ARCHIVED', 'ARCHIVED_AND_TRASHED', 'ARCHIVED_AND_PURGED');
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Found ' || vRecordsToUpdate || ' records with NULL A_WORKFLOW_HISTORY_KEY');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('----------------------------------------');
|
||||||
|
|
||||||
|
-- Process each INPUT configuration
|
||||||
|
FOR config_rec IN (
|
||||||
|
SELECT DISTINCT
|
||||||
|
sfc.A_SOURCE_FILE_CONFIG_KEY,
|
||||||
|
sfc.A_SOURCE_KEY,
|
||||||
|
sfc.SOURCE_FILE_ID,
|
||||||
|
sfc.TABLE_ID,
|
||||||
|
sfc.TEMPLATE_TABLE_NAME,
|
||||||
|
(SELECT COUNT(*)
|
||||||
|
FROM CT_MRDS.A_SOURCE_FILE_RECEIVED sfr
|
||||||
|
WHERE sfr.A_SOURCE_FILE_CONFIG_KEY = sfc.A_SOURCE_FILE_CONFIG_KEY
|
||||||
|
AND sfr.A_WORKFLOW_HISTORY_KEY IS NULL
|
||||||
|
AND sfr.PROCESSING_STATUS IN ('VALIDATED', 'READY_FOR_INGESTION', 'INGESTED', 'ARCHIVED', 'ARCHIVED_AND_TRASHED', 'ARCHIVED_AND_PURGED')
|
||||||
|
) as NULL_COUNT
|
||||||
|
FROM CT_MRDS.A_SOURCE_FILE_CONFIG sfc
|
||||||
|
WHERE sfc.SOURCE_FILE_TYPE = 'INPUT'
|
||||||
|
AND sfc.TABLE_ID IS NOT NULL
|
||||||
|
ORDER BY sfc.A_SOURCE_KEY, sfc.SOURCE_FILE_ID, sfc.TABLE_ID
|
||||||
|
) LOOP
|
||||||
|
|
||||||
|
IF config_rec.NULL_COUNT = 0 THEN
|
||||||
|
vSkippedConfigs := vSkippedConfigs + 1;
|
||||||
|
DBMS_OUTPUT.PUT_LINE('SKIP: Config ' || config_rec.A_SOURCE_FILE_CONFIG_KEY ||
|
||||||
|
' (' || config_rec.A_SOURCE_KEY || '/' || config_rec.SOURCE_FILE_ID || '/' || config_rec.TABLE_ID ||
|
||||||
|
') - no records to update');
|
||||||
|
CONTINUE;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
-- Construct ODS table name from TABLE_ID (ODS tables have _ODS suffix)
|
||||||
|
vTableName := 'ODS.' || config_rec.TABLE_ID || '_ODS';
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Processing config ' || config_rec.A_SOURCE_FILE_CONFIG_KEY ||
|
||||||
|
' (' || config_rec.A_SOURCE_KEY || '/' || config_rec.SOURCE_FILE_ID || '/' || config_rec.TABLE_ID || ')...');
|
||||||
|
|
||||||
|
-- Try to update using ODS table
|
||||||
|
-- Uses MIN to handle edge case of multiple workflow keys (shouldn't happen, but defensive)
|
||||||
|
vSQL :=
|
||||||
|
'UPDATE CT_MRDS.A_SOURCE_FILE_RECEIVED sfr ' ||
|
||||||
|
'SET A_WORKFLOW_HISTORY_KEY = ( ' ||
|
||||||
|
' SELECT MIN(t.A_WORKFLOW_HISTORY_KEY) ' ||
|
||||||
|
' FROM ' || vTableName || ' t ' ||
|
||||||
|
' WHERE t.file$name = sfr.SOURCE_FILE_NAME ' ||
|
||||||
|
' AND t.A_WORKFLOW_HISTORY_KEY IS NOT NULL ' ||
|
||||||
|
') ' ||
|
||||||
|
'WHERE sfr.A_SOURCE_FILE_CONFIG_KEY = :config_key ' ||
|
||||||
|
' AND sfr.A_WORKFLOW_HISTORY_KEY IS NULL ' ||
|
||||||
|
' AND sfr.PROCESSING_STATUS IN (''VALIDATED'', ''READY_FOR_INGESTION'', ''INGESTED'', ''ARCHIVED'', ''ARCHIVED_AND_TRASHED'', ''ARCHIVED_AND_PURGED'') ' ||
|
||||||
|
' AND EXISTS ( ' ||
|
||||||
|
' SELECT 1 FROM ' || vTableName || ' t ' ||
|
||||||
|
' WHERE t.file$name = sfr.SOURCE_FILE_NAME ' ||
|
||||||
|
' AND t.A_WORKFLOW_HISTORY_KEY IS NOT NULL ' ||
|
||||||
|
' )';
|
||||||
|
|
||||||
|
EXECUTE IMMEDIATE vSQL USING config_rec.A_SOURCE_FILE_CONFIG_KEY;
|
||||||
|
|
||||||
|
vUpdatedCurrent := SQL%ROWCOUNT;
|
||||||
|
vUpdatedTotal := vUpdatedTotal + vUpdatedCurrent;
|
||||||
|
|
||||||
|
IF vUpdatedCurrent > 0 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' SUCCESS: Updated ' || vUpdatedCurrent || ' record(s)');
|
||||||
|
ELSE
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' INFO: No matching records found in ODS table (files may not be ingested yet)');
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
EXCEPTION
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
vFailedConfigs := vFailedConfigs + 1;
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' ERROR: Failed for config ' || config_rec.A_SOURCE_FILE_CONFIG_KEY ||
|
||||||
|
' (table: ' || vTableName || ')');
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' Reason: ' || SQLERRM);
|
||||||
|
-- Continue processing other configurations despite this failure
|
||||||
|
END;
|
||||||
|
END LOOP;
|
||||||
|
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('----------------------------------------');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Update Summary:');
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' Total records updated: ' || vUpdatedTotal);
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' Configurations skipped (no NULL records): ' || vSkippedConfigs);
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' Configurations failed: ' || vFailedConfigs);
|
||||||
|
|
||||||
|
-- Check remaining NULL records
|
||||||
|
SELECT COUNT(*) INTO vRecordsToUpdate
|
||||||
|
FROM CT_MRDS.A_SOURCE_FILE_RECEIVED
|
||||||
|
WHERE A_WORKFLOW_HISTORY_KEY IS NULL
|
||||||
|
-- AND PROCESSING_STATUS IN ('VALIDATED', 'READY_FOR_INGESTION', 'INGESTED', 'ARCHIVED', 'ARCHIVED_AND_TRASHED', 'ARCHIVED_AND_PURGED')
|
||||||
|
;
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' Remaining NULL records: ' || vRecordsToUpdate);
|
||||||
|
|
||||||
|
IF vRecordsToUpdate > 0 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('NOTE: Some records still have NULL A_WORKFLOW_HISTORY_KEY.');
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' This is expected for:');
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' - Files not yet ingested into ODS tables');
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' - Files with status RECEIVED or VALIDATION_FAILED');
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' - ODS tables that do not exist or have different structure');
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' These records will be populated when files are processed through VALIDATE_SOURCE_FILE_RECEIVED');
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('----------------------------------------');
|
||||||
|
|
||||||
|
EXCEPTION
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
ROLLBACK;
|
||||||
|
DBMS_OUTPUT.PUT_LINE('FATAL ERROR: ' || SQLERRM);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Transaction rolled back');
|
||||||
|
RAISE;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT Existing workflow keys update completed!
|
||||||
|
PROMPT
|
||||||
@@ -21,8 +21,9 @@ SELECT
|
|||||||
data_type,
|
data_type,
|
||||||
data_length,
|
data_length,
|
||||||
nullable
|
nullable
|
||||||
FROM user_tab_columns
|
FROM all_tab_columns
|
||||||
WHERE table_name = 'A_SOURCE_FILE_RECEIVED'
|
WHERE owner = 'CT_MRDS'
|
||||||
|
AND table_name = 'A_SOURCE_FILE_RECEIVED'
|
||||||
AND column_name = 'A_WORKFLOW_HISTORY_KEY';
|
AND column_name = 'A_WORKFLOW_HISTORY_KEY';
|
||||||
|
|
||||||
-- Check foreign key constraint
|
-- Check foreign key constraint
|
||||||
@@ -33,8 +34,9 @@ SELECT
|
|||||||
constraint_type,
|
constraint_type,
|
||||||
r_constraint_name,
|
r_constraint_name,
|
||||||
status
|
status
|
||||||
FROM user_constraints
|
FROM all_constraints
|
||||||
WHERE table_name = 'A_SOURCE_FILE_RECEIVED'
|
WHERE owner = 'CT_MRDS'
|
||||||
|
AND table_name = 'A_SOURCE_FILE_RECEIVED'
|
||||||
AND constraint_type = 'R'
|
AND constraint_type = 'R'
|
||||||
AND constraint_name LIKE '%WORKFLOW_HISTORY%';
|
AND constraint_name LIKE '%WORKFLOW_HISTORY%';
|
||||||
|
|
||||||
@@ -46,8 +48,9 @@ SELECT
|
|||||||
object_type,
|
object_type,
|
||||||
status,
|
status,
|
||||||
last_ddl_time
|
last_ddl_time
|
||||||
FROM user_objects
|
FROM all_objects
|
||||||
WHERE object_name = 'FILE_MANAGER'
|
WHERE owner = 'CT_MRDS'
|
||||||
|
AND object_name = 'FILE_MANAGER'
|
||||||
AND object_type IN ('PACKAGE', 'PACKAGE BODY')
|
AND object_type IN ('PACKAGE', 'PACKAGE BODY')
|
||||||
ORDER BY object_type;
|
ORDER BY object_type;
|
||||||
|
|
||||||
@@ -60,15 +63,56 @@ SELECT
|
|||||||
line,
|
line,
|
||||||
position,
|
position,
|
||||||
text
|
text
|
||||||
FROM user_errors
|
FROM all_errors
|
||||||
WHERE name = 'FILE_MANAGER'
|
WHERE owner = 'CT_MRDS'
|
||||||
|
AND name = 'FILE_MANAGER'
|
||||||
ORDER BY type, line, position;
|
ORDER BY type, line, position;
|
||||||
|
|
||||||
-- Verify package version
|
-- Check FILE_ARCHIVER compilation status
|
||||||
PROMPT
|
PROMPT
|
||||||
PROMPT 5. Verifying package version...
|
PROMPT 5. Checking FILE_ARCHIVER package compilation...
|
||||||
SELECT CT_MRDS.FILE_MANAGER.GET_VERSION() AS VERSION FROM DUAL;
|
SELECT
|
||||||
SELECT CT_MRDS.FILE_MANAGER.GET_BUILD_INFO() AS BUILD_INFO FROM DUAL;
|
object_name,
|
||||||
|
object_type,
|
||||||
|
status,
|
||||||
|
last_ddl_time
|
||||||
|
FROM all_objects
|
||||||
|
WHERE owner = 'CT_MRDS'
|
||||||
|
AND object_name = 'FILE_ARCHIVER'
|
||||||
|
AND object_type IN ('PACKAGE', 'PACKAGE BODY')
|
||||||
|
ORDER BY object_type;
|
||||||
|
|
||||||
|
SELECT
|
||||||
|
name,
|
||||||
|
type,
|
||||||
|
line,
|
||||||
|
position,
|
||||||
|
text
|
||||||
|
FROM all_errors
|
||||||
|
WHERE owner = 'CT_MRDS'
|
||||||
|
AND name = 'FILE_ARCHIVER'
|
||||||
|
ORDER BY type, line, position;
|
||||||
|
|
||||||
|
-- Check trigger status
|
||||||
|
PROMPT
|
||||||
|
PROMPT 5B. Checking TRG_A_WORKFLOW_HISTORY trigger...
|
||||||
|
SELECT
|
||||||
|
trigger_name,
|
||||||
|
trigger_type,
|
||||||
|
triggering_event,
|
||||||
|
status
|
||||||
|
FROM all_triggers
|
||||||
|
WHERE owner = 'CT_MRDS'
|
||||||
|
AND trigger_name = 'TRG_A_WORKFLOW_HISTORY';
|
||||||
|
|
||||||
|
-- Verify package versions
|
||||||
|
PROMPT
|
||||||
|
PROMPT 6. Verifying package versions...
|
||||||
|
SELECT 'FILE_MANAGER' AS PACKAGE_NAME, CT_MRDS.FILE_MANAGER.GET_VERSION() AS VERSION FROM DUAL
|
||||||
|
UNION ALL
|
||||||
|
SELECT 'ENV_MANAGER' AS PACKAGE_NAME, CT_MRDS.ENV_MANAGER.GET_VERSION() AS VERSION FROM DUAL
|
||||||
|
UNION ALL
|
||||||
|
SELECT 'FILE_ARCHIVER' AS PACKAGE_NAME, CT_MRDS.FILE_ARCHIVER.GET_VERSION() AS VERSION FROM DUAL;
|
||||||
|
|
||||||
PROMPT
|
PROMPT
|
||||||
PROMPT ============================================================================
|
PROMPT ============================================================================
|
||||||
@@ -19,8 +19,9 @@ DECLARE
|
|||||||
BEGIN
|
BEGIN
|
||||||
SELECT COUNT(*)
|
SELECT COUNT(*)
|
||||||
INTO v_count
|
INTO v_count
|
||||||
FROM user_tab_columns
|
FROM all_tab_columns
|
||||||
WHERE table_name = 'A_SOURCE_FILE_RECEIVED'
|
WHERE owner = 'CT_MRDS'
|
||||||
|
AND table_name = 'A_SOURCE_FILE_RECEIVED'
|
||||||
AND column_name = 'A_WORKFLOW_HISTORY_KEY';
|
AND column_name = 'A_WORKFLOW_HISTORY_KEY';
|
||||||
|
|
||||||
IF v_count = 0 THEN
|
IF v_count = 0 THEN
|
||||||
@@ -31,21 +32,55 @@ BEGIN
|
|||||||
END;
|
END;
|
||||||
/
|
/
|
||||||
|
|
||||||
-- Check package versions
|
-- Check trigger was restored
|
||||||
PROMPT
|
PROMPT
|
||||||
PROMPT 2. Verifying FILE_MANAGER package version...
|
PROMPT 1B. Checking TRG_A_WORKFLOW_HISTORY trigger status...
|
||||||
SELECT CT_MRDS.FILE_MANAGER.GET_VERSION() AS VERSION FROM DUAL;
|
DECLARE
|
||||||
|
v_status VARCHAR2(20);
|
||||||
|
BEGIN
|
||||||
|
SELECT status INTO v_status
|
||||||
|
FROM all_objects
|
||||||
|
WHERE owner = 'CT_MRDS'
|
||||||
|
AND object_name = 'TRG_A_WORKFLOW_HISTORY'
|
||||||
|
AND object_type = 'TRIGGER';
|
||||||
|
DBMS_OUTPUT.PUT_LINE('TRG_A_WORKFLOW_HISTORY status: ' || v_status);
|
||||||
|
EXCEPTION
|
||||||
|
WHEN NO_DATA_FOUND THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('WARNING: TRG_A_WORKFLOW_HISTORY not found');
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
-- Check compilation status
|
-- Check compilation status
|
||||||
PROMPT
|
PROMPT
|
||||||
PROMPT 3. Checking package compilation status...
|
PROMPT 2. Checking package compilation status...
|
||||||
SELECT
|
SELECT
|
||||||
object_name,
|
object_name,
|
||||||
object_type,
|
object_type,
|
||||||
status
|
status,
|
||||||
FROM user_objects
|
last_ddl_time
|
||||||
WHERE object_name = 'FILE_MANAGER'
|
FROM all_objects
|
||||||
AND object_type IN ('PACKAGE', 'PACKAGE BODY');
|
WHERE owner = 'CT_MRDS'
|
||||||
|
AND object_name IN ('FILE_MANAGER', 'ENV_MANAGER', 'FILE_ARCHIVER')
|
||||||
|
AND object_type IN ('PACKAGE', 'PACKAGE BODY')
|
||||||
|
ORDER BY object_name, object_type;
|
||||||
|
|
||||||
|
-- Check for compilation errors
|
||||||
|
PROMPT
|
||||||
|
PROMPT 3. Checking for compilation errors...
|
||||||
|
SELECT name, type, line, position, text
|
||||||
|
FROM all_errors
|
||||||
|
WHERE owner = 'CT_MRDS'
|
||||||
|
AND name IN ('FILE_MANAGER', 'ENV_MANAGER', 'FILE_ARCHIVER')
|
||||||
|
ORDER BY name, type, line, position;
|
||||||
|
|
||||||
|
-- Verify package versions
|
||||||
|
PROMPT
|
||||||
|
PROMPT 4. Verifying package versions after rollback...
|
||||||
|
SELECT 'FILE_MANAGER' AS PACKAGE_NAME, CT_MRDS.FILE_MANAGER.GET_VERSION() AS VERSION FROM DUAL
|
||||||
|
UNION ALL
|
||||||
|
SELECT 'ENV_MANAGER' AS PACKAGE_NAME, CT_MRDS.ENV_MANAGER.GET_VERSION() AS VERSION FROM DUAL
|
||||||
|
UNION ALL
|
||||||
|
SELECT 'FILE_ARCHIVER' AS PACKAGE_NAME, CT_MRDS.FILE_ARCHIVER.GET_VERSION() AS VERSION FROM DUAL;
|
||||||
|
|
||||||
PROMPT
|
PROMPT
|
||||||
PROMPT ============================================================================
|
PROMPT ============================================================================
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
-- ============================================================================
|
||||||
|
-- MARS-1409 Rollback Script
|
||||||
|
-- ============================================================================
|
||||||
|
-- Script: 93B_MARS_1409_rollback_FILE_ARCHIVER_SPEC.sql
|
||||||
|
-- Description: Restore FILE_ARCHIVER package specification (previous version)
|
||||||
|
-- Author: Grzegorz Michalski
|
||||||
|
-- Date: 2026-02-27
|
||||||
|
-- ============================================================================
|
||||||
|
|
||||||
|
PROMPT ============================================================================
|
||||||
|
PROMPT Restoring FILE_ARCHIVER package specification...
|
||||||
|
PROMPT ============================================================================
|
||||||
|
|
||||||
|
@@rollback_version/FILE_ARCHIVER.pkg
|
||||||
|
|
||||||
|
PROMPT FILE_ARCHIVER specification restored
|
||||||
|
|
||||||
|
/
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
-- ============================================================================
|
||||||
|
-- MARS-1409 Rollback Script
|
||||||
|
-- ============================================================================
|
||||||
|
-- Script: 93A_MARS_1409_rollback_FILE_ARCHIVER_BODY.sql
|
||||||
|
-- Description: Restore FILE_ARCHIVER package body (previous version)
|
||||||
|
-- Author: Grzegorz Michalski
|
||||||
|
-- Date: 2026-02-27
|
||||||
|
-- ============================================================================
|
||||||
|
|
||||||
|
PROMPT ============================================================================
|
||||||
|
PROMPT Restoring FILE_ARCHIVER package body...
|
||||||
|
PROMPT ============================================================================
|
||||||
|
|
||||||
|
@@rollback_version/FILE_ARCHIVER.pkb
|
||||||
|
|
||||||
|
PROMPT FILE_ARCHIVER body restored
|
||||||
|
|
||||||
|
/
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
-- ============================================================================
|
||||||
|
-- MARS-1409 Rollback Script
|
||||||
|
-- ============================================================================
|
||||||
|
-- Script: 92A_MARS_1409_rollback_ENV_MANAGER_SPEC.sql
|
||||||
|
-- Description: Restore ENV_MANAGER v3.2.0 package specification (previous version)
|
||||||
|
-- Author: Grzegorz Michalski
|
||||||
|
-- Date: 2026-02-27
|
||||||
|
-- ============================================================================
|
||||||
|
|
||||||
|
PROMPT ============================================================================
|
||||||
|
PROMPT Restoring ENV_MANAGER package specification...
|
||||||
|
PROMPT ============================================================================
|
||||||
|
|
||||||
|
@@rollback_version/ENV_MANAGER.pkg
|
||||||
|
|
||||||
|
PROMPT ENV_MANAGER specification restored
|
||||||
|
|
||||||
|
/
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
-- ============================================================================
|
||||||
|
-- MARS-1409 Rollback Script
|
||||||
|
-- ============================================================================
|
||||||
|
-- Script: 92B_MARS_1409_rollback_ENV_MANAGER_BODY.sql
|
||||||
|
-- Description: Restore ENV_MANAGER v3.2.0 package body (previous version)
|
||||||
|
-- Author: Grzegorz Michalski
|
||||||
|
-- Date: 2026-02-27
|
||||||
|
-- ============================================================================
|
||||||
|
|
||||||
|
PROMPT ============================================================================
|
||||||
|
PROMPT Restoring ENV_MANAGER package body...
|
||||||
|
PROMPT ============================================================================
|
||||||
|
|
||||||
|
@@rollback_version/ENV_MANAGER.pkb
|
||||||
|
|
||||||
|
PROMPT ENV_MANAGER body restored
|
||||||
|
|
||||||
|
/
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
-- ============================================================================
|
||||||
|
-- MARS-1409 Rollback 93C: Restore TRG_A_WORKFLOW_HISTORY trigger
|
||||||
|
-- ============================================================================
|
||||||
|
-- Purpose: Restore trigger to pre-MARS-1409 state
|
||||||
|
-- Removes INGESTED status update logic from A_SOURCE_FILE_RECEIVED
|
||||||
|
-- ============================================================================
|
||||||
|
|
||||||
|
PROMPT Restoring TRG_A_WORKFLOW_HISTORY (rollback_version)...
|
||||||
|
@@rollback_version/TRG_A_WORKFLOW_HISTORY.sql
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
DECLARE
|
||||||
|
v_status VARCHAR2(20);
|
||||||
|
BEGIN
|
||||||
|
SELECT status INTO v_status
|
||||||
|
FROM all_objects
|
||||||
|
WHERE owner = 'CT_MRDS'
|
||||||
|
AND object_name = 'TRG_A_WORKFLOW_HISTORY'
|
||||||
|
AND object_type = 'TRIGGER';
|
||||||
|
DBMS_OUTPUT.PUT_LINE('TRG_A_WORKFLOW_HISTORY restored, status: ' || v_status);
|
||||||
|
EXCEPTION
|
||||||
|
WHEN NO_DATA_FOUND THEN
|
||||||
|
RAISE_APPLICATION_ERROR(-20001, 'ERROR: TRG_A_WORKFLOW_HISTORY not found after rollback');
|
||||||
|
END;
|
||||||
|
/
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
-- ============================================================================
|
||||||
|
-- MARS-1409 Rollback 91A: Clear A_WORKFLOW_HISTORY_KEY for existing records
|
||||||
|
-- ============================================================================
|
||||||
|
-- Purpose: Set A_WORKFLOW_HISTORY_KEY to NULL for all existing records
|
||||||
|
-- This is part of rollback process - restores state before migration
|
||||||
|
-- Note: Cannot restore exact previous values (we don't track which were NULL)
|
||||||
|
-- This script sets ALL values to NULL to ensure clean rollback state
|
||||||
|
-- ============================================================================
|
||||||
|
|
||||||
|
SET SERVEROUTPUT ON SIZE UNLIMITED
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT Clearing A_WORKFLOW_HISTORY_KEY for all A_SOURCE_FILE_RECEIVED records...
|
||||||
|
|
||||||
|
DECLARE
|
||||||
|
vTotalRecords NUMBER := 0;
|
||||||
|
vClearedRecords NUMBER := 0;
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
-- Count total records
|
||||||
|
SELECT COUNT(*) INTO vTotalRecords
|
||||||
|
FROM CT_MRDS.A_SOURCE_FILE_RECEIVED;
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Total records in A_SOURCE_FILE_RECEIVED: ' || vTotalRecords);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('----------------------------------------');
|
||||||
|
|
||||||
|
-- Clear A_WORKFLOW_HISTORY_KEY for all records
|
||||||
|
UPDATE CT_MRDS.A_SOURCE_FILE_RECEIVED
|
||||||
|
SET A_WORKFLOW_HISTORY_KEY = NULL
|
||||||
|
WHERE A_WORKFLOW_HISTORY_KEY IS NOT NULL;
|
||||||
|
|
||||||
|
vClearedRecords := SQL%ROWCOUNT;
|
||||||
|
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Rollback Summary:');
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' Records with A_WORKFLOW_HISTORY_KEY cleared: ' || vClearedRecords);
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' Records already NULL: ' || (vTotalRecords - vClearedRecords));
|
||||||
|
DBMS_OUTPUT.PUT_LINE('----------------------------------------');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('NOTE: All A_WORKFLOW_HISTORY_KEY values set to NULL');
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' Original values cannot be restored (not tracked before migration)');
|
||||||
|
|
||||||
|
EXCEPTION
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
ROLLBACK;
|
||||||
|
DBMS_OUTPUT.PUT_LINE('ERROR: ' || SQLERRM);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Transaction rolled back');
|
||||||
|
RAISE;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT Workflow keys cleared successfully!
|
||||||
|
PROMPT
|
||||||
@@ -9,9 +9,9 @@ SET SERVEROUTPUT ON SIZE UNLIMITED
|
|||||||
PROMPT
|
PROMPT
|
||||||
PROMPT Dropping A_WORKFLOW_HISTORY_KEY column from A_SOURCE_FILE_RECEIVED...
|
PROMPT Dropping A_WORKFLOW_HISTORY_KEY column from A_SOURCE_FILE_RECEIVED...
|
||||||
|
|
||||||
-- TODO: Implementation
|
-- Drop A_WORKFLOW_HISTORY_KEY column (no FK constraint to drop first)
|
||||||
-- ALTER TABLE CT_MRDS.A_SOURCE_FILE_RECEIVED
|
ALTER TABLE CT_MRDS.A_SOURCE_FILE_RECEIVED
|
||||||
-- DROP COLUMN A_WORKFLOW_HISTORY_KEY;
|
DROP COLUMN A_WORKFLOW_HISTORY_KEY;
|
||||||
|
|
||||||
PROMPT Column drop placeholder - TO BE IMPLEMENTED
|
PROMPT A_WORKFLOW_HISTORY_KEY column dropped successfully!
|
||||||
PROMPT
|
PROMPT
|
||||||
@@ -10,37 +10,201 @@ Direct tracking of workflow history keys in file registration for improved diagn
|
|||||||
```
|
```
|
||||||
MARS-1409/
|
MARS-1409/
|
||||||
├── .gitignore
|
├── .gitignore
|
||||||
├── install_mars1409.sql # Master installation script
|
├── install_mars1409.sql # Master installation script (8 steps)
|
||||||
├── rollback_mars1409.sql # Master rollback script
|
├── rollback_mars1409.sql # Master rollback script (5 steps)
|
||||||
├── verify_packages_version.sql # Version verification
|
├── verify_packages_version.sql # Version verification
|
||||||
├── track_package_versions.sql # Version tracking
|
├── track_package_versions.sql # Version tracking
|
||||||
├── 01_MARS_1409_add_workflow_history_key_column.sql
|
├── 01_MARS_1409_add_workflow_history_key_column.sql
|
||||||
|
├── 01A_MARS_1409_update_existing_workflow_keys.sql # Update existing records
|
||||||
|
├── 01B_MARS_1409_install_CT_MRDS_ENV_MANAGER_SPEC.sql # ENV_MANAGER v3.3.0 spec
|
||||||
|
├── 01C_MARS_1409_install_CT_MRDS_ENV_MANAGER_BODY.sql # ENV_MANAGER v3.3.0 body
|
||||||
├── 02_MARS_1409_install_CT_MRDS_FILE_MANAGER_SPEC.sql
|
├── 02_MARS_1409_install_CT_MRDS_FILE_MANAGER_SPEC.sql
|
||||||
├── 03_MARS_1409_install_CT_MRDS_FILE_MANAGER_BODY.sql
|
├── 03_MARS_1409_install_CT_MRDS_FILE_MANAGER_BODY.sql
|
||||||
├── 04_MARS_1409_verify_installation.sql
|
├── 04_MARS_1409_verify_installation.sql
|
||||||
├── 90_MARS_1409_verify_rollback.sql
|
├── 90_MARS_1409_verify_rollback.sql
|
||||||
├── 91_MARS_1409_rollback_workflow_history_key_column.sql
|
├── 91_MARS_1409_rollback_workflow_history_key_column.sql
|
||||||
|
├── 91A_MARS_1409_rollback_existing_workflow_keys.sql # Clear existing values
|
||||||
├── 92_MARS_1409_rollback_FILE_MANAGER_SPEC.sql
|
├── 92_MARS_1409_rollback_FILE_MANAGER_SPEC.sql
|
||||||
|
├── 92A_MARS_1409_rollback_ENV_MANAGER_SPEC.sql # ENV_MANAGER v3.2.0 spec
|
||||||
|
├── 92B_MARS_1409_rollback_ENV_MANAGER_BODY.sql # ENV_MANAGER v3.2.0 body
|
||||||
├── 93_MARS_1409_rollback_FILE_MANAGER_BODY.sql
|
├── 93_MARS_1409_rollback_FILE_MANAGER_BODY.sql
|
||||||
├── new_version/ # Updated packages
|
├── new_version/ # Updated packages
|
||||||
│ ├── FILE_MANAGER.pkg # TO BE COPIED
|
│ ├── A_SOURCE_FILE_RECEIVED.sql # Updated table definition
|
||||||
│ └── FILE_MANAGER.pkb # TO BE COPIED
|
│ ├── ENV_MANAGER.pkg # v3.3.0
|
||||||
|
│ ├── ENV_MANAGER.pkb # v3.3.0
|
||||||
|
│ ├── FILE_MANAGER.pkg # v3.6.0
|
||||||
|
│ ├── FILE_MANAGER.pkb # v3.6.0
|
||||||
|
│ └── FILE_ARCHIVER.pkb # Current version
|
||||||
├── rollback_version/ # Previous versions
|
├── rollback_version/ # Previous versions
|
||||||
│ ├── FILE_MANAGER.pkg # TO BE COPIED
|
│ ├── A_SOURCE_FILE_RECEIVED.sql # Original table definition
|
||||||
│ └── FILE_MANAGER.pkb # TO BE COPIED
|
│ ├── ENV_MANAGER.pkg # v3.2.0
|
||||||
|
│ ├── ENV_MANAGER.pkb # v3.2.0
|
||||||
|
│ ├── FILE_MANAGER.pkg # v3.5.1
|
||||||
|
│ ├── FILE_MANAGER.pkb # v3.5.1
|
||||||
|
│ └── FILE_ARCHIVER.pkb # Previous version
|
||||||
└── log/ # Installation logs
|
└── log/ # Installation logs
|
||||||
```
|
```
|
||||||
|
|
||||||
## Status
|
## Status
|
||||||
**SCAFFOLD CREATED** - Ready for implementation
|
**TESTED & VERIFIED** - Installation and rollback validated in DEV environment (2026-02-27)
|
||||||
|
- ✅ Installation: SUCCESS (8 steps)
|
||||||
|
- ✅ Rollback: SUCCESS (5 steps)
|
||||||
|
- ✅ Package compilation: ALL VALID
|
||||||
|
- ✅ Version tracking: Working correctly
|
||||||
|
- ⚠️ Prerequisite: MARS-828 column rename must be applied first
|
||||||
|
|
||||||
|
## Implementation Details
|
||||||
|
|
||||||
|
### Database Changes
|
||||||
|
- Added `A_WORKFLOW_HISTORY_KEY NUMBER` column to `CT_MRDS.A_SOURCE_FILE_RECEIVED`
|
||||||
|
- No FK constraint (workflow history record created later in processing)
|
||||||
|
- Column populated during VALIDATE_SOURCE_FILE_RECEIVED procedure
|
||||||
|
- **Migration script** (01A): Updates A_WORKFLOW_HISTORY_KEY for existing records by extracting values from ODS tables
|
||||||
|
|
||||||
|
### Package Changes
|
||||||
|
- **ENV_MANAGER v3.3.0**: Added error codes CODE_WORKFLOW_KEY_NULL (-20035) and CODE_MULTIPLE_WORKFLOW_KEYS (-20036)
|
||||||
|
- **FILE_MANAGER v3.6.0**: Enhanced VALIDATE_SOURCE_FILE_RECEIVED to extract and validate A_WORKFLOW_HISTORY_KEY from external tables
|
||||||
|
|
||||||
|
### Validation Rules
|
||||||
|
- **NULL values**: Fatal error - file must contain A_WORKFLOW_HISTORY_KEY
|
||||||
|
- **Multiple values**: Fatal error - each file must have exactly one workflow execution key
|
||||||
|
- **Single value**: Value extracted and stored in A_SOURCE_FILE_RECEIVED
|
||||||
|
|
||||||
|
### Migration of Existing Data (01A Script)
|
||||||
|
The installation includes automatic migration of A_WORKFLOW_HISTORY_KEY for existing records:
|
||||||
|
- **Scope**: Updates records with status VALIDATED, READY_FOR_INGESTION, INGESTED, ARCHIVED*
|
||||||
|
- **Method**: Extracts A_WORKFLOW_HISTORY_KEY from ODS tables by matching file$name with SOURCE_FILE_NAME
|
||||||
|
- **Safety**: Uses TRY-CATCH for each configuration - continues if ODS table doesn't exist
|
||||||
|
- **Logging**: Detailed output showing success/failure for each configuration
|
||||||
|
- **Expected behavior**: Some records may remain NULL if:
|
||||||
|
- Files not yet ingested into ODS tables
|
||||||
|
- Files with status RECEIVED or VALIDATION_FAILED
|
||||||
|
- ODS tables don't exist or have different structure
|
||||||
|
- These NULL records will be populated when files are reprocessed
|
||||||
|
|
||||||
## Next Steps
|
## Next Steps
|
||||||
1. Copy current FILE_MANAGER packages to rollback_version/
|
1. **Test installation** in DEV environment:
|
||||||
2. Implement column addition (01_*.sql)
|
```sql
|
||||||
3. Update FILE_MANAGER package to populate A_WORKFLOW_HISTORY_KEY
|
@install_mars1409.sql
|
||||||
4. Test and validate changes
|
```
|
||||||
5. Complete rollback scripts
|
2. **Review migration results**: Check how many existing records were updated
|
||||||
|
3. **Validate new files**: Test with sample files containing A_WORKFLOW_HISTORY_KEY
|
||||||
|
4. **Test rollback** procedure to ensure clean restoration
|
||||||
|
5. **Deploy to higher environments** after successful DEV validation
|
||||||
|
|
||||||
|
## Installation Flow
|
||||||
|
```
|
||||||
|
install_mars1409.sql (MASTER - 8 steps)
|
||||||
|
│
|
||||||
|
├─ 01: Add A_WORKFLOW_HISTORY_KEY column (DDL)
|
||||||
|
├─ 01A: Update existing records (Migration)
|
||||||
|
├─ 01B: Install ENV_MANAGER.pkg (v3.3.0)
|
||||||
|
├─ 01C: Install ENV_MANAGER.pkb (v3.3.0)
|
||||||
|
├─ 02: Install FILE_MANAGER.pkg (v3.6.0)
|
||||||
|
├─ 03: Install FILE_MANAGER.pkb (v3.6.0)
|
||||||
|
├─ 04: Verify installation
|
||||||
|
└─ 05: Track package versions
|
||||||
|
```
|
||||||
|
|
||||||
|
## Rollback Flow
|
||||||
|
```
|
||||||
|
rollback_mars1409.sql (MASTER - 5 steps)
|
||||||
|
│
|
||||||
|
├─ 01: Restore FILE_MANAGER.pkb (v3.5.1)
|
||||||
|
├─ 02: Restore FILE_MANAGER.pkg (v3.5.1)
|
||||||
|
├─ 02A: Restore ENV_MANAGER.pkb (v3.2.0)
|
||||||
|
├─ 02B: Restore ENV_MANAGER.pkg (v3.2.0)
|
||||||
|
├─ 03: Clear A_WORKFLOW_HISTORY_KEY values
|
||||||
|
├─ 04: Drop A_WORKFLOW_HISTORY_KEY column
|
||||||
|
└─ 05: Verify rollback
|
||||||
|
```
|
||||||
|
|
||||||
|
## Post-Installation Verification
|
||||||
|
|
||||||
|
### Check migration results:
|
||||||
|
```sql
|
||||||
|
-- Count updated records
|
||||||
|
SELECT
|
||||||
|
CASE WHEN A_WORKFLOW_HISTORY_KEY IS NOT NULL THEN 'POPULATED' ELSE 'NULL' END as STATUS,
|
||||||
|
COUNT(*) as RECORD_COUNT
|
||||||
|
FROM CT_MRDS.A_SOURCE_FILE_RECEIVED
|
||||||
|
GROUP BY CASE WHEN A_WORKFLOW_HISTORY_KEY IS NOT NULL THEN 'POPULATED' ELSE 'NULL' END;
|
||||||
|
|
||||||
|
-- Check by configuration
|
||||||
|
SELECT
|
||||||
|
sfc.A_SOURCE_KEY,
|
||||||
|
sfc.SOURCE_FILE_ID,
|
||||||
|
sfc.TABLE_ID,
|
||||||
|
COUNT(*) as TOTAL_FILES,
|
||||||
|
SUM(CASE WHEN sfr.A_WORKFLOW_HISTORY_KEY IS NOT NULL THEN 1 ELSE 0 END) as POPULATED,
|
||||||
|
SUM(CASE WHEN sfr.A_WORKFLOW_HISTORY_KEY IS NULL THEN 1 ELSE 0 END) as NULL_COUNT
|
||||||
|
FROM CT_MRDS.A_SOURCE_FILE_RECEIVED sfr
|
||||||
|
JOIN CT_MRDS.A_SOURCE_FILE_CONFIG sfc ON sfr.A_SOURCE_FILE_CONFIG_KEY = sfc.A_SOURCE_FILE_CONFIG_KEY
|
||||||
|
GROUP BY sfc.A_SOURCE_KEY, sfc.SOURCE_FILE_ID, sfc.TABLE_ID
|
||||||
|
ORDER BY sfc.A_SOURCE_KEY, sfc.SOURCE_FILE_ID;
|
||||||
|
```
|
||||||
|
|
||||||
|
### Test new file processing:
|
||||||
|
```sql
|
||||||
|
-- Process a test file (will populate A_WORKFLOW_HISTORY_KEY automatically)
|
||||||
|
EXEC FILE_MANAGER.PROCESS_SOURCE_FILE('INBOX/TEST/TEST_FILE/TEST_TABLE/test_file.csv');
|
||||||
|
|
||||||
|
-- Verify A_WORKFLOW_HISTORY_KEY was populated
|
||||||
|
SELECT A_SOURCE_FILE_RECEIVED_KEY, SOURCE_FILE_NAME, A_WORKFLOW_HISTORY_KEY, PROCESSING_STATUS
|
||||||
|
FROM CT_MRDS.A_SOURCE_FILE_RECEIVED
|
||||||
|
WHERE SOURCE_FILE_NAME LIKE '%test_file.csv%';
|
||||||
|
```
|
||||||
|
|
||||||
## Related Tickets
|
## Related Tickets
|
||||||
- Based on MARS-828 package structure
|
- Based on MARS-828 package structure
|
||||||
- Supports FILE_ARCHIVER workflow tracking improvements
|
- Supports FILE_ARCHIVER workflow tracking improvements
|
||||||
|
## Test Results (2026-02-27)
|
||||||
|
|
||||||
|
### ✅ Installation Test
|
||||||
|
**Environment**: DEV (ggmichalski_high)
|
||||||
|
**Status**: SUCCESS
|
||||||
|
|
||||||
|
**Installation Steps**:
|
||||||
|
1. Step 1: Add A_WORKFLOW_HISTORY_KEY column - ✅ SUCCESS
|
||||||
|
2. Step 1A: Migrate existing records - ✅ SUCCESS (0 updated, 47 NULL expected)
|
||||||
|
3. Step 1B: Install ENV_MANAGER v3.3.0 specification - ✅ SUCCESS
|
||||||
|
4. Step 1C: Install ENV_MANAGER v3.3.0 body - ✅ SUCCESS
|
||||||
|
5. Step 2: Install FILE_MANAGER v3.6.0 specification - ✅ SUCCESS
|
||||||
|
6. Step 3: Install FILE_MANAGER v3.6.0 body - ✅ SUCCESS
|
||||||
|
7. Step 4: Verification - ✅ SUCCESS
|
||||||
|
8. Step 5: Version tracking - ✅ SUCCESS
|
||||||
|
|
||||||
|
**Post-Installation State**:
|
||||||
|
- FILE_MANAGER version: 3.6.0
|
||||||
|
- ENV_MANAGER version: 3.3.0
|
||||||
|
- A_WORKFLOW_HISTORY_KEY column: EXISTS (NUMBER, NULLABLE)
|
||||||
|
- Package compilation: ALL VALID
|
||||||
|
- Migration results: 0 records updated (expected - no data in ODS tables)
|
||||||
|
|
||||||
|
### ✅ Rollback Test
|
||||||
|
**Status**: SUCCESS
|
||||||
|
|
||||||
|
**Rollback Steps**:
|
||||||
|
1. Step 1: Restore FILE_MANAGER body v3.5.1 - ✅ SUCCESS
|
||||||
|
2. Step 2: Restore FILE_MANAGER spec v3.5.1 - ✅ SUCCESS
|
||||||
|
3. Step 2A: Restore ENV_MANAGER body v3.2.0 - ✅ SUCCESS
|
||||||
|
4. Step 2B: Restore ENV_MANAGER spec v3.2.0 - ✅ SUCCESS
|
||||||
|
5. Step 3: Clear A_WORKFLOW_HISTORY_KEY values - ✅ SUCCESS (0 cleared, 47 already NULL)
|
||||||
|
6. Step 4: Drop A_WORKFLOW_HISTORY_KEY column - ✅ SUCCESS
|
||||||
|
7. Step 5: Verification - ✅ SUCCESS
|
||||||
|
|
||||||
|
**Post-Rollback State**:
|
||||||
|
- FILE_MANAGER version: 3.5.1 (restored)
|
||||||
|
- ENV_MANAGER version: 3.2.0 (restored)
|
||||||
|
- A_WORKFLOW_HISTORY_KEY column: REMOVED
|
||||||
|
- Package compilation: ALL VALID
|
||||||
|
|
||||||
|
**Critical Findings**:
|
||||||
|
- ⚠️ **Prerequisite**: MARS-828 column rename must be applied first (ARCHIVE_THRESHOLD_DAYS)
|
||||||
|
- ⚠️ **Database State**: rollback_version packages require MARS-828 naming conventions
|
||||||
|
- ✅ **Solution**: Applied MARS-828 01a script before testing - now works correctly
|
||||||
|
|
||||||
|
**Package Ready for**:
|
||||||
|
- ✅ DEV deployment (tested successfully)
|
||||||
|
- ✅ QA deployment (after DEV validation)
|
||||||
|
- ⏳ PROD deployment (pending higher environment validation)
|
||||||
@@ -33,7 +33,7 @@ PROMPT =========================================================================
|
|||||||
PROMPT Package: CT_MRDS.FILE_MANAGER v3.X.X
|
PROMPT Package: CT_MRDS.FILE_MANAGER v3.X.X
|
||||||
PROMPT Change: Add A_WORKFLOW_HISTORY_KEY to A_SOURCE_FILE_RECEIVED
|
PROMPT Change: Add A_WORKFLOW_HISTORY_KEY to A_SOURCE_FILE_RECEIVED
|
||||||
PROMPT Purpose: Direct tracking of workflow history keys in file registration
|
PROMPT Purpose: Direct tracking of workflow history keys in file registration
|
||||||
PROMPT Steps: TBD (DDL, Package updates, Verification)
|
PROMPT Steps: 11 (DDL, ENV_MANAGER Update, FILE_MANAGER Update, FILE_ARCHIVER Update, Trigger Update, Existing Records Backfill, Verification, Tracking)
|
||||||
PROMPT Timestamp:
|
PROMPT Timestamp:
|
||||||
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS install_start FROM DUAL;
|
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS install_start FROM DUAL;
|
||||||
PROMPT ============================================================================
|
PROMPT ============================================================================
|
||||||
@@ -56,25 +56,61 @@ PROMPT =========================================================================
|
|||||||
|
|
||||||
PROMPT
|
PROMPT
|
||||||
PROMPT ============================================================================
|
PROMPT ============================================================================
|
||||||
PROMPT STEP 2: Update FILE_MANAGER package specification
|
PROMPT STEP 2: Update ENV_MANAGER package specification
|
||||||
PROMPT ============================================================================
|
PROMPT ============================================================================
|
||||||
@@02_MARS_1409_install_CT_MRDS_FILE_MANAGER_SPEC.sql
|
@@02_MARS_1409_install_CT_MRDS_ENV_MANAGER_SPEC.sql
|
||||||
|
|
||||||
PROMPT
|
PROMPT
|
||||||
PROMPT ============================================================================
|
PROMPT ============================================================================
|
||||||
PROMPT STEP 3: Update FILE_MANAGER package body
|
PROMPT STEP 3: Update ENV_MANAGER package body
|
||||||
PROMPT ============================================================================
|
PROMPT ============================================================================
|
||||||
@@03_MARS_1409_install_CT_MRDS_FILE_MANAGER_BODY.sql
|
@@03_MARS_1409_install_CT_MRDS_ENV_MANAGER_BODY.sql
|
||||||
|
|
||||||
PROMPT
|
PROMPT
|
||||||
PROMPT ============================================================================
|
PROMPT ============================================================================
|
||||||
PROMPT STEP 4: Verify installation
|
PROMPT STEP 4: Update FILE_MANAGER package specification
|
||||||
PROMPT ============================================================================
|
PROMPT ============================================================================
|
||||||
@@04_MARS_1409_verify_installation.sql
|
@@04_MARS_1409_install_CT_MRDS_FILE_MANAGER_SPEC.sql
|
||||||
|
|
||||||
PROMPT
|
PROMPT
|
||||||
PROMPT ============================================================================
|
PROMPT ============================================================================
|
||||||
PROMPT STEP 5: Track package versions
|
PROMPT STEP 5: Update FILE_MANAGER package body
|
||||||
|
PROMPT ============================================================================
|
||||||
|
@@05_MARS_1409_install_CT_MRDS_FILE_MANAGER_BODY.sql
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT ============================================================================
|
||||||
|
PROMPT STEP 6: Update FILE_ARCHIVER package specification
|
||||||
|
PROMPT ============================================================================
|
||||||
|
@@06_MARS_1409_install_CT_MRDS_FILE_ARCHIVER_SPEC.sql
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT ============================================================================
|
||||||
|
PROMPT STEP 7: Update FILE_ARCHIVER package body
|
||||||
|
PROMPT ============================================================================
|
||||||
|
@@07_MARS_1409_install_CT_MRDS_FILE_ARCHIVER_BODY.sql
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT ============================================================================
|
||||||
|
PROMPT STEP 8: Update TRG_A_WORKFLOW_HISTORY trigger
|
||||||
|
PROMPT ============================================================================
|
||||||
|
@@08_MARS_1409_install_CT_MRDS_TRG_A_WORKFLOW_HISTORY.sql
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT ============================================================================
|
||||||
|
PROMPT STEP 9: Update A_WORKFLOW_HISTORY_KEY for existing records
|
||||||
|
PROMPT ============================================================================
|
||||||
|
@@09_MARS_1409_update_existing_workflow_keys.sql
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT ============================================================================
|
||||||
|
PROMPT STEP 10: Verify installation
|
||||||
|
PROMPT ============================================================================
|
||||||
|
@@10_MARS_1409_verify_installation.sql
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT ============================================================================
|
||||||
|
PROMPT STEP 11: Track package versions
|
||||||
PROMPT ============================================================================
|
PROMPT ============================================================================
|
||||||
@@track_package_versions.sql
|
@@track_package_versions.sql
|
||||||
|
|
||||||
|
|||||||
@@ -16,10 +16,12 @@ CREATE TABLE CT_MRDS.A_SOURCE_FILE_RECEIVED (
|
|||||||
EXTERNAL_TABLE_NAME VARCHAR2(200),
|
EXTERNAL_TABLE_NAME VARCHAR2(200),
|
||||||
PARTITION_YEAR VARCHAR2(4),
|
PARTITION_YEAR VARCHAR2(4),
|
||||||
PARTITION_MONTH VARCHAR2(2),
|
PARTITION_MONTH VARCHAR2(2),
|
||||||
ARCH_FILE_NAME VARCHAR2(1000),
|
ARCH_PATH VARCHAR2(1000),
|
||||||
|
PROCESS_NAME VARCHAR2(200),
|
||||||
|
A_WORKFLOW_HISTORY_KEY NUMBER,
|
||||||
CONSTRAINT A_SOURCE_FILE_RECEIVED_PK PRIMARY KEY (A_SOURCE_FILE_RECEIVED_KEY),
|
CONSTRAINT A_SOURCE_FILE_RECEIVED_PK PRIMARY KEY (A_SOURCE_FILE_RECEIVED_KEY),
|
||||||
CONSTRAINT ASFR_A_SOURCE_FILE_CONFIG_KEY_FK FOREIGN KEY(A_SOURCE_FILE_CONFIG_KEY) REFERENCES CT_MRDS.A_SOURCE_FILE_CONFIG(A_SOURCE_FILE_CONFIG_KEY),
|
CONSTRAINT ASFR_A_SOURCE_FILE_CONFIG_KEY_FK FOREIGN KEY(A_SOURCE_FILE_CONFIG_KEY) REFERENCES CT_MRDS.A_SOURCE_FILE_CONFIG(A_SOURCE_FILE_CONFIG_KEY),
|
||||||
CONSTRAINT A_SOURCE_FILE_RECEIVED_CHK CHECK (PROCESSING_STATUS IN ('RECEIVED', 'VALIDATED', 'READY_FOR_INGESTION', 'INGESTED', 'ARCHIVED', 'ARCHIVED_AND_TRASHED', 'ARCHIVED_AND_PURGED'))
|
CONSTRAINT A_SOURCE_FILE_RECEIVED_CHK CHECK (PROCESSING_STATUS IN ('RECEIVED', 'VALIDATION_FAILED', 'VALIDATED', 'READY_FOR_INGESTION', 'INGESTED', 'ARCHIVED', 'ARCHIVED_AND_TRASHED', 'ARCHIVED_AND_PURGED'))
|
||||||
) TABLESPACE "DATA";
|
) TABLESPACE "DATA";
|
||||||
|
|
||||||
-- Unique index for file identification (workaround for TIMESTAMP WITH TIMEZONE constraint limitation)
|
-- Unique index for file identification (workaround for TIMESTAMP WITH TIMEZONE constraint limitation)
|
||||||
@@ -49,7 +51,7 @@ COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.RECEPTION_DATE IS
|
|||||||
'Date when file was registered in the system (extracted from CREATED timestamp)';
|
'Date when file was registered in the system (extracted from CREATED timestamp)';
|
||||||
|
|
||||||
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.PROCESSING_STATUS IS
|
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.PROCESSING_STATUS IS
|
||||||
'Current processing status: RECEIVED → VALIDATED → READY_FOR_INGESTION → INGESTED → ARCHIVED_AND_TRASHED → ARCHIVED_AND_PURGED';
|
'Current processing status: RECEIVED → VALIDATED (or VALIDATION_FAILED if errors) → READY_FOR_INGESTION → INGESTED → ARCHIVED → ARCHIVED_AND_TRASHED → ARCHIVED_AND_PURGED';
|
||||||
|
|
||||||
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.EXTERNAL_TABLE_NAME IS
|
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.EXTERNAL_TABLE_NAME IS
|
||||||
'Name of temporary external table created for file validation (dropped after validation)';
|
'Name of temporary external table created for file validation (dropped after validation)';
|
||||||
@@ -60,7 +62,13 @@ COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.PARTITION_YEAR IS
|
|||||||
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.PARTITION_MONTH IS
|
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.PARTITION_MONTH IS
|
||||||
'Month partition value (MM format) when file was archived to ARCHIVE bucket with Hive-style partitioning';
|
'Month partition value (MM format) when file was archived to ARCHIVE bucket with Hive-style partitioning';
|
||||||
|
|
||||||
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.ARCH_FILE_NAME IS
|
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.ARCH_PATH IS
|
||||||
'Archive directory prefix in ARCHIVE bucket containing archived Parquet files (supports multiple files from parallel DBMS_CLOUD.EXPORT_DATA)';
|
'Archive directory prefix in ARCHIVE bucket containing archived Parquet files (supports multiple files from parallel DBMS_CLOUD.EXPORT_DATA)';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.PROCESS_NAME IS
|
||||||
|
'Name of the process or DBT model that ingested this file (populated during ingestion workflow)';
|
||||||
|
|
||||||
|
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)';
|
||||||
|
|
||||||
GRANT SELECT, INSERT, UPDATE, DELETE ON CT_MRDS.A_SOURCE_FILE_RECEIVED TO MRDS_LOADER_ROLE;
|
GRANT SELECT, INSERT, UPDATE, DELETE ON CT_MRDS.A_SOURCE_FILE_RECEIVED TO MRDS_LOADER_ROLE;
|
||||||
@@ -39,6 +39,8 @@ AS
|
|||||||
Errors(CODE_MOVE_FILE_TO_TRASH_FAILED) := Error_Record(CODE_MOVE_FILE_TO_TRASH_FAILED, MSG_MOVE_FILE_TO_TRASH_FAILED); -- -20032
|
Errors(CODE_MOVE_FILE_TO_TRASH_FAILED) := Error_Record(CODE_MOVE_FILE_TO_TRASH_FAILED, MSG_MOVE_FILE_TO_TRASH_FAILED); -- -20032
|
||||||
Errors(CODE_DROP_EXPORTED_FILES_FAILED) := Error_Record(CODE_DROP_EXPORTED_FILES_FAILED, MSG_DROP_EXPORTED_FILES_FAILED); -- -20033
|
Errors(CODE_DROP_EXPORTED_FILES_FAILED) := Error_Record(CODE_DROP_EXPORTED_FILES_FAILED, MSG_DROP_EXPORTED_FILES_FAILED); -- -20033
|
||||||
Errors(CODE_INVALID_BUCKET_AREA) := Error_Record(CODE_INVALID_BUCKET_AREA, MSG_INVALID_BUCKET_AREA); -- -20034
|
Errors(CODE_INVALID_BUCKET_AREA) := Error_Record(CODE_INVALID_BUCKET_AREA, MSG_INVALID_BUCKET_AREA); -- -20034
|
||||||
|
Errors(CODE_WORKFLOW_KEY_NULL) := Error_Record(CODE_WORKFLOW_KEY_NULL, MSG_WORKFLOW_KEY_NULL); -- -20035
|
||||||
|
Errors(CODE_MULTIPLE_WORKFLOW_KEYS) := Error_Record(CODE_MULTIPLE_WORKFLOW_KEYS, MSG_MULTIPLE_WORKFLOW_KEYS); -- -20036
|
||||||
Errors(CODE_INVALID_PARALLEL_DEGREE) := Error_Record(CODE_INVALID_PARALLEL_DEGREE, MSG_INVALID_PARALLEL_DEGREE); -- -20110
|
Errors(CODE_INVALID_PARALLEL_DEGREE) := Error_Record(CODE_INVALID_PARALLEL_DEGREE, MSG_INVALID_PARALLEL_DEGREE); -- -20110
|
||||||
Errors(CODE_PARALLEL_EXECUTION_FAILED) := Error_Record(CODE_PARALLEL_EXECUTION_FAILED, MSG_PARALLEL_EXECUTION_FAILED); -- -20111
|
Errors(CODE_PARALLEL_EXECUTION_FAILED) := Error_Record(CODE_PARALLEL_EXECUTION_FAILED, MSG_PARALLEL_EXECUTION_FAILED); -- -20111
|
||||||
|
|
||||||
|
|||||||
@@ -17,12 +17,13 @@ AS
|
|||||||
**/
|
**/
|
||||||
|
|
||||||
-- Package Version Information (Semantic Versioning: MAJOR.MINOR.PATCH)
|
-- Package Version Information (Semantic Versioning: MAJOR.MINOR.PATCH)
|
||||||
PACKAGE_VERSION CONSTANT VARCHAR2(10) := '3.2.0';
|
PACKAGE_VERSION CONSTANT VARCHAR2(10) := '3.3.0';
|
||||||
PACKAGE_BUILD_DATE CONSTANT VARCHAR2(20) := '2025-12-20 10:00:00';
|
PACKAGE_BUILD_DATE CONSTANT VARCHAR2(20) := '2026-02-27 09:00:00';
|
||||||
PACKAGE_AUTHOR CONSTANT VARCHAR2(100) := 'Grzegorz Michalski';
|
PACKAGE_AUTHOR CONSTANT VARCHAR2(100) := 'Grzegorz Michalski';
|
||||||
|
|
||||||
-- Version History (Latest changes first)
|
-- Version History (Latest changes first)
|
||||||
VERSION_HISTORY CONSTANT VARCHAR2(4000) :=
|
VERSION_HISTORY CONSTANT VARCHAR2(4000) :=
|
||||||
|
'3.3.0 (2026-02-27): MARS-1409 - Added error codes for A_WORKFLOW_HISTORY_KEY validation (CODE_WORKFLOW_KEY_NULL -20035, CODE_MULTIPLE_WORKFLOW_KEYS -20036)' || CHR(13)||CHR(10) ||
|
||||||
'3.2.0 (2025-12-20): Added error codes for parallel execution support (CODE_INVALID_PARALLEL_DEGREE -20110, CODE_PARALLEL_EXECUTION_FAILED -20111)' || CHR(13)||CHR(10) ||
|
'3.2.0 (2025-12-20): Added error codes for parallel execution support (CODE_INVALID_PARALLEL_DEGREE -20110, CODE_PARALLEL_EXECUTION_FAILED -20111)' || CHR(13)||CHR(10) ||
|
||||||
'3.1.0 (2025-10-22): Added package hash tracking and automatic change detection system (SHA256 hashing)' || CHR(13)||CHR(10) ||
|
'3.1.0 (2025-10-22): Added package hash tracking and automatic change detection system (SHA256 hashing)' || CHR(13)||CHR(10) ||
|
||||||
'3.0.0 (2025-10-22): Added package versioning system with centralized version management functions' || CHR(13)||CHR(10) ||
|
'3.0.0 (2025-10-22): Added package versioning system with centralized version management functions' || CHR(13)||CHR(10) ||
|
||||||
@@ -297,6 +298,18 @@ AS
|
|||||||
PRAGMA EXCEPTION_INIT( ERR_INVALID_BUCKET_AREA
|
PRAGMA EXCEPTION_INIT( ERR_INVALID_BUCKET_AREA
|
||||||
,CODE_INVALID_BUCKET_AREA);
|
,CODE_INVALID_BUCKET_AREA);
|
||||||
|
|
||||||
|
ERR_WORKFLOW_KEY_NULL EXCEPTION;
|
||||||
|
CODE_WORKFLOW_KEY_NULL CONSTANT PLS_INTEGER := -20035;
|
||||||
|
MSG_WORKFLOW_KEY_NULL VARCHAR2(4000) := 'File validation failed: A_WORKFLOW_HISTORY_KEY column contains NULL value';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_WORKFLOW_KEY_NULL
|
||||||
|
,CODE_WORKFLOW_KEY_NULL);
|
||||||
|
|
||||||
|
ERR_MULTIPLE_WORKFLOW_KEYS EXCEPTION;
|
||||||
|
CODE_MULTIPLE_WORKFLOW_KEYS CONSTANT PLS_INTEGER := -20036;
|
||||||
|
MSG_MULTIPLE_WORKFLOW_KEYS VARCHAR2(4000) := 'File validation failed: Multiple distinct A_WORKFLOW_HISTORY_KEY values found in file. Each file must contain exactly one workflow execution key';
|
||||||
|
PRAGMA EXCEPTION_INIT( ERR_MULTIPLE_WORKFLOW_KEYS
|
||||||
|
,CODE_MULTIPLE_WORKFLOW_KEYS);
|
||||||
|
|
||||||
ERR_INVALID_PARALLEL_DEGREE EXCEPTION;
|
ERR_INVALID_PARALLEL_DEGREE EXCEPTION;
|
||||||
CODE_INVALID_PARALLEL_DEGREE CONSTANT PLS_INTEGER := -20110;
|
CODE_INVALID_PARALLEL_DEGREE CONSTANT PLS_INTEGER := -20110;
|
||||||
MSG_INVALID_PARALLEL_DEGREE VARCHAR2(4000) := 'Invalid parallel degree parameter. Must be between 1 and 16';
|
MSG_INVALID_PARALLEL_DEGREE VARCHAR2(4000) := 'Invalid parallel degree parameter. Must be between 1 and 16';
|
||||||
|
|||||||
@@ -683,6 +683,64 @@ AS
|
|||||||
FROM USER_LOAD_OPERATIONS
|
FROM USER_LOAD_OPERATIONS
|
||||||
WHERE ID = vOperationId;
|
WHERE ID = vOperationId;
|
||||||
|
|
||||||
|
-- MARS-1409: Extract and validate A_WORKFLOW_HISTORY_KEY from external table
|
||||||
|
DECLARE
|
||||||
|
vWorkflowHistoryKey NUMBER;
|
||||||
|
vWorkflowKeyCount NUMBER;
|
||||||
|
vWorkflowKeyDistinct NUMBER;
|
||||||
|
vDynamicSQL VARCHAR2(1000);
|
||||||
|
BEGIN
|
||||||
|
-- Build dynamic SQL to count distinct A_WORKFLOW_HISTORY_KEY values
|
||||||
|
vDynamicSQL := 'SELECT COUNT(*), COUNT(DISTINCT A_WORKFLOW_HISTORY_KEY) FROM ' || vSourceFileReceived.EXTERNAL_TABLE_NAME;
|
||||||
|
|
||||||
|
ENV_MANAGER.LOG_PROCESS_EVENT('MARS-1409: Extracting A_WORKFLOW_HISTORY_KEY from external table', 'DEBUG', vParameters);
|
||||||
|
|
||||||
|
-- Count total rows and distinct workflow keys
|
||||||
|
EXECUTE IMMEDIATE vDynamicSQL INTO vWorkflowKeyCount, vWorkflowKeyDistinct;
|
||||||
|
|
||||||
|
ENV_MANAGER.LOG_PROCESS_EVENT('MARS-1409: Total rows: ' || vWorkflowKeyCount || ', Distinct A_WORKFLOW_HISTORY_KEY values: ' || vWorkflowKeyDistinct, 'DEBUG', vParameters);
|
||||||
|
|
||||||
|
-- Validate workflow key presence and uniqueness
|
||||||
|
IF vWorkflowKeyDistinct = 0 OR vWorkflowKeyDistinct IS NULL THEN
|
||||||
|
-- No A_WORKFLOW_HISTORY_KEY found or all values are NULL
|
||||||
|
vgMsgTmp := ENV_MANAGER.MSG_WORKFLOW_KEY_NULL || ' [File: ' || vSourceFileReceived.SOURCE_FILE_NAME || ']';
|
||||||
|
ENV_MANAGER.LOG_PROCESS_EVENT(vgMsgTmp, 'ERROR', vParameters);
|
||||||
|
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_WORKFLOW_KEY_NULL, vgMsgTmp);
|
||||||
|
|
||||||
|
ELSIF vWorkflowKeyDistinct > 1 THEN
|
||||||
|
-- Multiple different A_WORKFLOW_HISTORY_KEY values found
|
||||||
|
vgMsgTmp := ENV_MANAGER.MSG_MULTIPLE_WORKFLOW_KEYS || ' [Found: ' || vWorkflowKeyDistinct || ' distinct values in file: ' || vSourceFileReceived.SOURCE_FILE_NAME || ']';
|
||||||
|
ENV_MANAGER.LOG_PROCESS_EVENT(vgMsgTmp, 'ERROR', vParameters);
|
||||||
|
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_MULTIPLE_WORKFLOW_KEYS, vgMsgTmp);
|
||||||
|
|
||||||
|
ELSE
|
||||||
|
-- Exactly one A_WORKFLOW_HISTORY_KEY value - fetch and save it
|
||||||
|
vDynamicSQL := 'SELECT DISTINCT A_WORKFLOW_HISTORY_KEY FROM ' || vSourceFileReceived.EXTERNAL_TABLE_NAME;
|
||||||
|
EXECUTE IMMEDIATE vDynamicSQL INTO vWorkflowHistoryKey;
|
||||||
|
|
||||||
|
ENV_MANAGER.LOG_PROCESS_EVENT('MARS-1409: Extracted A_WORKFLOW_HISTORY_KEY: ' || vWorkflowHistoryKey, 'DEBUG', vParameters);
|
||||||
|
|
||||||
|
-- Update A_SOURCE_FILE_RECEIVED with workflow history key
|
||||||
|
UPDATE CT_MRDS.A_SOURCE_FILE_RECEIVED
|
||||||
|
SET A_WORKFLOW_HISTORY_KEY = vWorkflowHistoryKey
|
||||||
|
WHERE A_SOURCE_FILE_RECEIVED_KEY = pSourceFileReceivedKey;
|
||||||
|
|
||||||
|
ENV_MANAGER.LOG_PROCESS_EVENT('MARS-1409: Updated A_SOURCE_FILE_RECEIVED with A_WORKFLOW_HISTORY_KEY: ' || vWorkflowHistoryKey, 'INFO', vParameters);
|
||||||
|
END IF;
|
||||||
|
EXCEPTION
|
||||||
|
WHEN ENV_MANAGER.ERR_WORKFLOW_KEY_NULL THEN
|
||||||
|
SET_SOURCE_FILE_RECEIVED_STATUS(pSourceFileReceivedKey => pSourceFileReceivedKey, pStatus => 'VALIDATION_FAILED');
|
||||||
|
RAISE;
|
||||||
|
WHEN ENV_MANAGER.ERR_MULTIPLE_WORKFLOW_KEYS THEN
|
||||||
|
SET_SOURCE_FILE_RECEIVED_STATUS(pSourceFileReceivedKey => pSourceFileReceivedKey, pStatus => 'VALIDATION_FAILED');
|
||||||
|
RAISE;
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
vgMsgTmp := 'MARS-1409: Error extracting A_WORKFLOW_HISTORY_KEY: ' || SQLERRM;
|
||||||
|
ENV_MANAGER.LOG_PROCESS_EVENT(vgMsgTmp, 'ERROR', vParameters);
|
||||||
|
SET_SOURCE_FILE_RECEIVED_STATUS(pSourceFileReceivedKey => pSourceFileReceivedKey, pStatus => 'VALIDATION_FAILED');
|
||||||
|
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_FILE_VALIDATION_FAILED, vgMsgTmp);
|
||||||
|
END;
|
||||||
|
|
||||||
-- DBMS_OUTPUT.PUT_LINE(vStatus);
|
-- DBMS_OUTPUT.PUT_LINE(vStatus);
|
||||||
SET_SOURCE_FILE_RECEIVED_STATUS(pSourceFileReceivedKey => pSourceFileReceivedKey, pStatus => 'VALIDATED');
|
SET_SOURCE_FILE_RECEIVED_STATUS(pSourceFileReceivedKey => pSourceFileReceivedKey, pStatus => 'VALIDATED');
|
||||||
ENV_MANAGER.LOG_PROCESS_EVENT('File status changed to VALIDATED','DEBUG', vParameters);
|
ENV_MANAGER.LOG_PROCESS_EVENT('File status changed to VALIDATED','DEBUG', vParameters);
|
||||||
@@ -700,6 +758,18 @@ AS
|
|||||||
SET_SOURCE_FILE_RECEIVED_STATUS(pSourceFileReceivedKey => pSourceFileReceivedKey, pStatus => 'VALIDATION_FAILED');
|
SET_SOURCE_FILE_RECEIVED_STATUS(pSourceFileReceivedKey => pSourceFileReceivedKey, pStatus => 'VALIDATION_FAILED');
|
||||||
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_FILE_VALIDATION_FAILED, vgMsgTmp);
|
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_FILE_VALIDATION_FAILED, vgMsgTmp);
|
||||||
|
|
||||||
|
WHEN ENV_MANAGER.ERR_WORKFLOW_KEY_NULL THEN
|
||||||
|
vgMsgTmp := ENV_MANAGER.MSG_WORKFLOW_KEY_NULL;
|
||||||
|
ENV_MANAGER.LOG_PROCESS_EVENT(vgMsgTmp, 'ERROR', vParameters);
|
||||||
|
SET_SOURCE_FILE_RECEIVED_STATUS(pSourceFileReceivedKey => pSourceFileReceivedKey, pStatus => 'VALIDATION_FAILED');
|
||||||
|
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_WORKFLOW_KEY_NULL, vgMsgTmp);
|
||||||
|
|
||||||
|
WHEN ENV_MANAGER.ERR_MULTIPLE_WORKFLOW_KEYS THEN
|
||||||
|
vgMsgTmp := ENV_MANAGER.MSG_MULTIPLE_WORKFLOW_KEYS;
|
||||||
|
ENV_MANAGER.LOG_PROCESS_EVENT(vgMsgTmp, 'ERROR', vParameters);
|
||||||
|
SET_SOURCE_FILE_RECEIVED_STATUS(pSourceFileReceivedKey => pSourceFileReceivedKey, pStatus => 'VALIDATION_FAILED');
|
||||||
|
RAISE_APPLICATION_ERROR(ENV_MANAGER.CODE_MULTIPLE_WORKFLOW_KEYS, vgMsgTmp);
|
||||||
|
|
||||||
WHEN OTHERS THEN
|
WHEN OTHERS THEN
|
||||||
IF SQLCODE = -20404 THEN
|
IF SQLCODE = -20404 THEN
|
||||||
vgMsgTmp := ENV_MANAGER.MSG_FILE_NOT_FOUND_ON_CLOUD||cgBL||SQLERRM;
|
vgMsgTmp := ENV_MANAGER.MSG_FILE_NOT_FOUND_ON_CLOUD||cgBL||SQLERRM;
|
||||||
|
|||||||
@@ -17,12 +17,13 @@ AS
|
|||||||
**/
|
**/
|
||||||
|
|
||||||
-- Package Version Information (Semantic Versioning: MAJOR.MINOR.PATCH)
|
-- Package Version Information (Semantic Versioning: MAJOR.MINOR.PATCH)
|
||||||
PACKAGE_VERSION CONSTANT VARCHAR2(10) := '3.5.1';
|
PACKAGE_VERSION CONSTANT VARCHAR2(10) := '3.6.0';
|
||||||
PACKAGE_BUILD_DATE CONSTANT VARCHAR2(20) := '2026-02-24 13:35:00';
|
PACKAGE_BUILD_DATE CONSTANT VARCHAR2(20) := '2026-02-27 09:00:00';
|
||||||
PACKAGE_AUTHOR CONSTANT VARCHAR2(100) := 'Grzegorz Michalski';
|
PACKAGE_AUTHOR CONSTANT VARCHAR2(100) := 'Grzegorz Michalski';
|
||||||
|
|
||||||
-- Version History (Latest changes first)
|
-- Version History (Latest changes first)
|
||||||
VERSION_HISTORY CONSTANT VARCHAR2(4000) :=
|
VERSION_HISTORY CONSTANT VARCHAR2(4000) :=
|
||||||
|
'3.6.0 (2026-02-27): MARS-1409 - Added A_WORKFLOW_HISTORY_KEY tracking in A_SOURCE_FILE_RECEIVED. Each file now stores its workflow execution key extracted during VALIDATE_SOURCE_FILE_RECEIVED' || CHR(13)||CHR(10) ||
|
||||||
'3.5.1 (2026-02-24): Fixed TIMESTAMP field syntax in GENERATE_EXTERNAL_TABLE_PARAMS for SQL*Loader compatibility (CHAR(35) DATE_FORMAT TIMESTAMP MASK format)' || CHR(13)||CHR(10) ||
|
'3.5.1 (2026-02-24): Fixed TIMESTAMP field syntax in GENERATE_EXTERNAL_TABLE_PARAMS for SQL*Loader compatibility (CHAR(35) DATE_FORMAT TIMESTAMP MASK format)' || CHR(13)||CHR(10) ||
|
||||||
'3.3.2 (2026-02-20): MARS-828 - Fixed threshold column names in GET_DET_SOURCE_FILE_CONFIG_INFO for MARS-828 compatibility' || CHR(13)||CHR(10) ||
|
'3.3.2 (2026-02-20): MARS-828 - Fixed threshold column names in GET_DET_SOURCE_FILE_CONFIG_INFO for MARS-828 compatibility' || CHR(13)||CHR(10) ||
|
||||||
'3.3.1 (2025-11-27): MARS-1046 - Fixed ISO 8601 datetime format parsing with milliseconds and timezone (e.g., 2012-03-02T14:16:23.798+01:00)' || CHR(13)||CHR(10) ||
|
'3.3.1 (2025-11-27): MARS-1046 - Fixed ISO 8601 datetime format parsing with milliseconds and timezone (e.g., 2012-03-02T14:16:23.798+01:00)' || CHR(13)||CHR(10) ||
|
||||||
|
|||||||
@@ -0,0 +1,52 @@
|
|||||||
|
-- ====================================================================
|
||||||
|
-- TRG_A_WORKFLOW_HISTORY Trigger Definition
|
||||||
|
-- ====================================================================
|
||||||
|
-- Purpose: Trigger to:
|
||||||
|
-- 1. Insert workflow completion data to CT_ODS.A_LOAD_HISTORY
|
||||||
|
-- 2. MARS-1409: Mark linked A_SOURCE_FILE_RECEIVED records as INGESTED
|
||||||
|
-- ====================================================================
|
||||||
|
|
||||||
|
CREATE OR REPLACE EDITIONABLE TRIGGER "CT_MRDS"."TRG_A_WORKFLOW_HISTORY"
|
||||||
|
AFTER INSERT OR UPDATE OF workflow_successful ON CT_MRDS.A_WORKFLOW_HISTORY
|
||||||
|
REFERENCING NEW AS new OLD AS old
|
||||||
|
FOR EACH ROW
|
||||||
|
DECLARE
|
||||||
|
v_workflow_name VARCHAR2(128);
|
||||||
|
v_wla_id NUMBER;
|
||||||
|
BEGIN
|
||||||
|
-- Original logic: Insert into CT_ODS.A_LOAD_HISTORY for specific ODS workflows
|
||||||
|
IF :new.workflow_name IN ('w_ODS_LM_STANDING_FACILITIES', 'w_ODS_CSDB_DEBT', 'w_ODS_CSDB_DEBT_DAILY', 'w_ODS_CSDB_RATINGS_FULL') AND :new.service_name = 'ODS' THEN
|
||||||
|
IF :new.workflow_successful <> :old.workflow_successful AND :new.workflow_successful = 'Y' THEN
|
||||||
|
IF :new.workflow_name = 'w_ODS_LM_STANDING_FACILITIES' THEN
|
||||||
|
v_workflow_name := 'w_ODS_LM_STANDING_FACILITY';
|
||||||
|
ELSE
|
||||||
|
v_workflow_name := :new.workflow_name;
|
||||||
|
END IF;
|
||||||
|
BEGIN
|
||||||
|
v_wla_id := TO_NUMBER(:new.orchestration_run_id);
|
||||||
|
EXCEPTION
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
NULL;
|
||||||
|
END;
|
||||||
|
INSERT INTO CT_ODS.A_LOAD_HISTORY (
|
||||||
|
a_etl_load_set_key, workflow_name, infa_run_id, load_start, load_end,
|
||||||
|
exdi_appl_req_id, exdi_correlation_id, load_successful, wla_run_id, dq_flag
|
||||||
|
) VALUES (
|
||||||
|
:new.a_workflow_history_key, v_workflow_name, NULL, :new.workflow_start, :new.workflow_end,
|
||||||
|
NULL, NULL, :new.workflow_successful, v_wla_id, 'F'
|
||||||
|
);
|
||||||
|
END IF;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
-- MARS-1409: When workflow completes successfully, mark linked files as INGESTED
|
||||||
|
IF :new.workflow_successful = 'Y' THEN
|
||||||
|
IF INSERTING OR (UPDATING AND (:old.workflow_successful IS NULL OR :old.workflow_successful != 'Y')) THEN
|
||||||
|
UPDATE CT_MRDS.A_SOURCE_FILE_RECEIVED
|
||||||
|
SET PROCESSING_STATUS = 'INGESTED',
|
||||||
|
PROCESS_NAME = :new.service_name
|
||||||
|
WHERE A_WORKFLOW_HISTORY_KEY = :new.a_workflow_history_key;
|
||||||
|
END IF;
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
|
||||||
|
/
|
||||||
@@ -32,7 +32,7 @@ PROMPT MARS-1409 Rollback Starting
|
|||||||
PROMPT ============================================================================
|
PROMPT ============================================================================
|
||||||
PROMPT Package: CT_MRDS.FILE_MANAGER
|
PROMPT Package: CT_MRDS.FILE_MANAGER
|
||||||
PROMPT Change: Remove A_WORKFLOW_HISTORY_KEY column and restore previous version
|
PROMPT Change: Remove A_WORKFLOW_HISTORY_KEY column and restore previous version
|
||||||
PROMPT Steps: TBD (Restore packages, Drop column, Verify)
|
PROMPT Steps: 10 (Restore FILE_ARCHIVER, Restore FILE_MANAGER, Restore ENV_MANAGER, Restore trigger, Clear data, Drop column, Verify)
|
||||||
PROMPT Timestamp:
|
PROMPT Timestamp:
|
||||||
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS rollback_start FROM DUAL;
|
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS rollback_start FROM DUAL;
|
||||||
PROMPT ============================================================================
|
PROMPT ============================================================================
|
||||||
@@ -49,25 +49,61 @@ END;
|
|||||||
|
|
||||||
PROMPT
|
PROMPT
|
||||||
PROMPT ============================================================================
|
PROMPT ============================================================================
|
||||||
PROMPT STEP 1: Restore FILE_MANAGER package body (previous version)
|
PROMPT STEP 1: Restore FILE_ARCHIVER package specification (previous version)
|
||||||
PROMPT ============================================================================
|
PROMPT ============================================================================
|
||||||
@@93_MARS_1409_rollback_FILE_MANAGER_BODY.sql
|
@@91_MARS_1409_rollback_CT_MRDS_FILE_ARCHIVER_SPEC.sql
|
||||||
|
|
||||||
PROMPT
|
PROMPT
|
||||||
PROMPT ============================================================================
|
PROMPT ============================================================================
|
||||||
PROMPT STEP 2: Restore FILE_MANAGER package specification (previous version)
|
PROMPT STEP 2: Restore FILE_ARCHIVER package body (previous version)
|
||||||
PROMPT ============================================================================
|
PROMPT ============================================================================
|
||||||
@@92_MARS_1409_rollback_FILE_MANAGER_SPEC.sql
|
@@92_MARS_1409_rollback_CT_MRDS_FILE_ARCHIVER_BODY.sql
|
||||||
|
|
||||||
PROMPT
|
PROMPT
|
||||||
PROMPT ============================================================================
|
PROMPT ============================================================================
|
||||||
PROMPT STEP 3: Drop A_WORKFLOW_HISTORY_KEY column
|
PROMPT STEP 3: Restore FILE_MANAGER package specification (previous version)
|
||||||
PROMPT ============================================================================
|
PROMPT ============================================================================
|
||||||
@@91_MARS_1409_rollback_workflow_history_key_column.sql
|
@@93_MARS_1409_rollback_CT_MRDS_FILE_MANAGER_SPEC.sql
|
||||||
|
|
||||||
PROMPT
|
PROMPT
|
||||||
PROMPT ============================================================================
|
PROMPT ============================================================================
|
||||||
PROMPT STEP 4: Verify rollback
|
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 TRG_A_WORKFLOW_HISTORY trigger (previous version)
|
||||||
|
PROMPT ============================================================================
|
||||||
|
@@97_MARS_1409_rollback_CT_MRDS_TRG_A_WORKFLOW_HISTORY.sql
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT ============================================================================
|
||||||
|
PROMPT STEP 8: Clear A_WORKFLOW_HISTORY_KEY values from existing records
|
||||||
|
PROMPT ============================================================================
|
||||||
|
@@98_MARS_1409_rollback_existing_workflow_keys.sql
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT ============================================================================
|
||||||
|
PROMPT STEP 9: Drop A_WORKFLOW_HISTORY_KEY column
|
||||||
|
PROMPT ============================================================================
|
||||||
|
@@99_MARS_1409_rollback_workflow_history_key_column.sql
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT ============================================================================
|
||||||
|
PROMPT STEP 10: Verify rollback
|
||||||
PROMPT ============================================================================
|
PROMPT ============================================================================
|
||||||
@@90_MARS_1409_verify_rollback.sql
|
@@90_MARS_1409_verify_rollback.sql
|
||||||
|
|
||||||
|
|||||||
@@ -16,10 +16,11 @@ CREATE TABLE CT_MRDS.A_SOURCE_FILE_RECEIVED (
|
|||||||
EXTERNAL_TABLE_NAME VARCHAR2(200),
|
EXTERNAL_TABLE_NAME VARCHAR2(200),
|
||||||
PARTITION_YEAR VARCHAR2(4),
|
PARTITION_YEAR VARCHAR2(4),
|
||||||
PARTITION_MONTH VARCHAR2(2),
|
PARTITION_MONTH VARCHAR2(2),
|
||||||
ARCH_FILE_NAME VARCHAR2(1000),
|
ARCH_PATH VARCHAR2(1000),
|
||||||
|
PROCESS_NAME VARCHAR2(200),
|
||||||
CONSTRAINT A_SOURCE_FILE_RECEIVED_PK PRIMARY KEY (A_SOURCE_FILE_RECEIVED_KEY),
|
CONSTRAINT A_SOURCE_FILE_RECEIVED_PK PRIMARY KEY (A_SOURCE_FILE_RECEIVED_KEY),
|
||||||
CONSTRAINT ASFR_A_SOURCE_FILE_CONFIG_KEY_FK FOREIGN KEY(A_SOURCE_FILE_CONFIG_KEY) REFERENCES CT_MRDS.A_SOURCE_FILE_CONFIG(A_SOURCE_FILE_CONFIG_KEY),
|
CONSTRAINT ASFR_A_SOURCE_FILE_CONFIG_KEY_FK FOREIGN KEY(A_SOURCE_FILE_CONFIG_KEY) REFERENCES CT_MRDS.A_SOURCE_FILE_CONFIG(A_SOURCE_FILE_CONFIG_KEY),
|
||||||
CONSTRAINT A_SOURCE_FILE_RECEIVED_CHK CHECK (PROCESSING_STATUS IN ('RECEIVED', 'VALIDATED', 'READY_FOR_INGESTION', 'INGESTED', 'ARCHIVED', 'ARCHIVED_AND_TRASHED', 'ARCHIVED_AND_PURGED'))
|
CONSTRAINT A_SOURCE_FILE_RECEIVED_CHK CHECK (PROCESSING_STATUS IN ('RECEIVED', 'VALIDATION_FAILED', 'VALIDATED', 'READY_FOR_INGESTION', 'INGESTED', 'ARCHIVED', 'ARCHIVED_AND_TRASHED', 'ARCHIVED_AND_PURGED'))
|
||||||
) TABLESPACE "DATA";
|
) TABLESPACE "DATA";
|
||||||
|
|
||||||
-- Unique index for file identification (workaround for TIMESTAMP WITH TIMEZONE constraint limitation)
|
-- Unique index for file identification (workaround for TIMESTAMP WITH TIMEZONE constraint limitation)
|
||||||
@@ -49,7 +50,7 @@ COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.RECEPTION_DATE IS
|
|||||||
'Date when file was registered in the system (extracted from CREATED timestamp)';
|
'Date when file was registered in the system (extracted from CREATED timestamp)';
|
||||||
|
|
||||||
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.PROCESSING_STATUS IS
|
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.PROCESSING_STATUS IS
|
||||||
'Current processing status: RECEIVED → VALIDATED → READY_FOR_INGESTION → INGESTED → ARCHIVED_AND_TRASHED → ARCHIVED_AND_PURGED';
|
'Current processing status: RECEIVED → VALIDATED (or VALIDATION_FAILED if errors) → READY_FOR_INGESTION → INGESTED → ARCHIVED → ARCHIVED_AND_TRASHED → ARCHIVED_AND_PURGED';
|
||||||
|
|
||||||
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.EXTERNAL_TABLE_NAME IS
|
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.EXTERNAL_TABLE_NAME IS
|
||||||
'Name of temporary external table created for file validation (dropped after validation)';
|
'Name of temporary external table created for file validation (dropped after validation)';
|
||||||
@@ -60,7 +61,10 @@ COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.PARTITION_YEAR IS
|
|||||||
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.PARTITION_MONTH IS
|
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.PARTITION_MONTH IS
|
||||||
'Month partition value (MM format) when file was archived to ARCHIVE bucket with Hive-style partitioning';
|
'Month partition value (MM format) when file was archived to ARCHIVE bucket with Hive-style partitioning';
|
||||||
|
|
||||||
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.ARCH_FILE_NAME IS
|
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.ARCH_PATH IS
|
||||||
'Archive directory prefix in ARCHIVE bucket containing archived Parquet files (supports multiple files from parallel DBMS_CLOUD.EXPORT_DATA)';
|
'Archive directory prefix in ARCHIVE bucket containing archived Parquet files (supports multiple files from parallel DBMS_CLOUD.EXPORT_DATA)';
|
||||||
|
|
||||||
|
COMMENT ON COLUMN CT_MRDS.A_SOURCE_FILE_RECEIVED.PROCESS_NAME IS
|
||||||
|
'Name of the process or DBT model that ingested this file (populated during ingestion workflow)';
|
||||||
|
|
||||||
GRANT SELECT, INSERT, UPDATE, DELETE ON CT_MRDS.A_SOURCE_FILE_RECEIVED TO MRDS_LOADER_ROLE;
|
GRANT SELECT, INSERT, UPDATE, DELETE ON CT_MRDS.A_SOURCE_FILE_RECEIVED TO MRDS_LOADER_ROLE;
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
-- ====================================================================
|
||||||
|
-- TRG_A_WORKFLOW_HISTORY Trigger Definition (rollback version)
|
||||||
|
-- ====================================================================
|
||||||
|
-- Purpose: Restore trigger to pre-MARS-1409 state
|
||||||
|
-- Handles only CT_ODS.A_LOAD_HISTORY inserts for ODS workflows
|
||||||
|
-- ====================================================================
|
||||||
|
|
||||||
|
CREATE OR REPLACE EDITIONABLE TRIGGER "CT_MRDS"."TRG_A_WORKFLOW_HISTORY"
|
||||||
|
AFTER INSERT OR UPDATE OF workflow_successful ON CT_MRDS.A_WORKFLOW_HISTORY
|
||||||
|
REFERENCING NEW AS new OLD AS old
|
||||||
|
FOR EACH ROW
|
||||||
|
DECLARE
|
||||||
|
v_workflow_name VARCHAR2(128);
|
||||||
|
v_wla_id NUMBER;
|
||||||
|
BEGIN
|
||||||
|
IF :new.workflow_name IN ('w_ODS_LM_STANDING_FACILITIES', 'w_ODS_CSDB_DEBT', 'w_ODS_CSDB_DEBT_DAILY', 'w_ODS_CSDB_RATINGS_FULL') AND :new.service_name = 'ODS' THEN
|
||||||
|
IF :new.workflow_successful <> :old.workflow_successful AND :new.workflow_successful = 'Y' THEN
|
||||||
|
IF :new.workflow_name = 'w_ODS_LM_STANDING_FACILITIES' THEN
|
||||||
|
v_workflow_name := 'w_ODS_LM_STANDING_FACILITY';
|
||||||
|
ELSE
|
||||||
|
v_workflow_name := :new.workflow_name;
|
||||||
|
END IF;
|
||||||
|
BEGIN
|
||||||
|
v_wla_id := TO_NUMBER(:new.orchestration_run_id);
|
||||||
|
EXCEPTION
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
NULL;
|
||||||
|
END;
|
||||||
|
INSERT INTO CT_ODS.A_LOAD_HISTORY (
|
||||||
|
a_etl_load_set_key, workflow_name, infa_run_id, load_start, load_end,
|
||||||
|
exdi_appl_req_id, exdi_correlation_id, load_successful, wla_run_id, dq_flag
|
||||||
|
) VALUES (
|
||||||
|
:new.a_workflow_history_key, v_workflow_name, NULL, :new.workflow_start, :new.workflow_end,
|
||||||
|
NULL, NULL, :new.workflow_successful, v_wla_id, 'F'
|
||||||
|
);
|
||||||
|
END IF;
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
|
||||||
|
/
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
-- ============================================================================
|
-- ============================================================================
|
||||||
-- MARS-1409 Package Version Tracking
|
-- MARS-1409 Package Version Tracking
|
||||||
-- ============================================================================
|
-- ============================================================================
|
||||||
-- Purpose: Record package versions in A_PACKAGE_VERSION_HISTORY table
|
-- Purpose: Record package versions in A_PACKAGE_VERSION_TRACKING table
|
||||||
-- ============================================================================
|
-- ============================================================================
|
||||||
|
|
||||||
SET SERVEROUTPUT ON SIZE UNLIMITED
|
SET SERVEROUTPUT ON SIZE UNLIMITED
|
||||||
@@ -12,10 +12,12 @@ PROMPT Recording Package Versions
|
|||||||
PROMPT ============================================================================
|
PROMPT ============================================================================
|
||||||
|
|
||||||
DECLARE
|
DECLARE
|
||||||
v_file_manager_version VARCHAR2(50);
|
v_file_manager_version VARCHAR2(50);
|
||||||
v_file_manager_build VARCHAR2(100);
|
v_file_manager_build VARCHAR2(100);
|
||||||
v_env_manager_version VARCHAR2(50);
|
v_env_manager_version VARCHAR2(50);
|
||||||
v_env_manager_build VARCHAR2(100);
|
v_env_manager_build VARCHAR2(100);
|
||||||
|
v_file_archiver_version VARCHAR2(50);
|
||||||
|
v_file_archiver_build VARCHAR2(100);
|
||||||
BEGIN
|
BEGIN
|
||||||
-- Get FILE_MANAGER version
|
-- Get FILE_MANAGER version
|
||||||
BEGIN
|
BEGIN
|
||||||
@@ -40,24 +42,48 @@ BEGIN
|
|||||||
WHEN OTHERS THEN
|
WHEN OTHERS THEN
|
||||||
DBMS_OUTPUT.PUT_LINE('WARNING: Could not retrieve ENV_MANAGER version');
|
DBMS_OUTPUT.PUT_LINE('WARNING: Could not retrieve ENV_MANAGER version');
|
||||||
END;
|
END;
|
||||||
|
|
||||||
-- Insert version records (if A_PACKAGE_VERSION_HISTORY table exists)
|
-- Get FILE_ARCHIVER version
|
||||||
BEGIN
|
BEGIN
|
||||||
EXECUTE IMMEDIATE 'INSERT INTO CT_MRDS.A_PACKAGE_VERSION_HISTORY
|
v_file_archiver_version := CT_MRDS.FILE_ARCHIVER.GET_VERSION();
|
||||||
(PACKAGE_NAME, PACKAGE_VERSION, BUILD_INFO, DEPLOYMENT_DATE, DEPLOYMENT_USER, MARS_TICKET)
|
v_file_archiver_build := CT_MRDS.FILE_ARCHIVER.GET_BUILD_INFO();
|
||||||
VALUES (:1, :2, :3, SYSDATE, USER, :4)'
|
|
||||||
USING 'FILE_MANAGER', v_file_manager_version, v_file_manager_build, 'MARS-1409';
|
|
||||||
|
|
||||||
EXECUTE IMMEDIATE 'INSERT INTO CT_MRDS.A_PACKAGE_VERSION_HISTORY
|
DBMS_OUTPUT.PUT_LINE('FILE_ARCHIVER Version: ' || v_file_archiver_version);
|
||||||
(PACKAGE_NAME, PACKAGE_VERSION, BUILD_INFO, DEPLOYMENT_DATE, DEPLOYMENT_USER, MARS_TICKET)
|
DBMS_OUTPUT.PUT_LINE('FILE_ARCHIVER Build: ' || v_file_archiver_build);
|
||||||
VALUES (:1, :2, :3, SYSDATE, USER, :4)'
|
|
||||||
USING 'ENV_MANAGER', v_env_manager_version, v_env_manager_build, 'MARS-1409';
|
|
||||||
|
|
||||||
COMMIT;
|
|
||||||
DBMS_OUTPUT.PUT_LINE('Package version history recorded successfully');
|
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
WHEN OTHERS THEN
|
WHEN OTHERS THEN
|
||||||
DBMS_OUTPUT.PUT_LINE('INFO: A_PACKAGE_VERSION_HISTORY table not available - skipping version tracking');
|
DBMS_OUTPUT.PUT_LINE('WARNING: Could not retrieve FILE_ARCHIVER version');
|
||||||
|
END;
|
||||||
|
|
||||||
|
-- Insert version records into A_PACKAGE_VERSION_TRACKING
|
||||||
|
BEGIN
|
||||||
|
EXECUTE IMMEDIATE 'INSERT INTO CT_MRDS.A_PACKAGE_VERSION_TRACKING
|
||||||
|
(PACKAGE_OWNER, PACKAGE_NAME, PACKAGE_TYPE, PACKAGE_VERSION,
|
||||||
|
PACKAGE_BUILD_DATE, PACKAGE_AUTHOR, TRACKING_DATE, TRACKED_BY_USER, TRACKED_BY_MODULE)
|
||||||
|
VALUES (:1, :2, :3, :4, :5, :6, SYSTIMESTAMP, USER, :7)'
|
||||||
|
USING 'CT_MRDS', 'FILE_MANAGER', 'BOTH', v_file_manager_version,
|
||||||
|
'', '', 'MARS-1409';
|
||||||
|
|
||||||
|
EXECUTE IMMEDIATE 'INSERT INTO CT_MRDS.A_PACKAGE_VERSION_TRACKING
|
||||||
|
(PACKAGE_OWNER, PACKAGE_NAME, PACKAGE_TYPE, PACKAGE_VERSION,
|
||||||
|
PACKAGE_BUILD_DATE, PACKAGE_AUTHOR, TRACKING_DATE, TRACKED_BY_USER, TRACKED_BY_MODULE)
|
||||||
|
VALUES (:1, :2, :3, :4, :5, :6, SYSTIMESTAMP, USER, :7)'
|
||||||
|
USING 'CT_MRDS', 'ENV_MANAGER', 'BOTH', v_env_manager_version,
|
||||||
|
'', '', 'MARS-1409';
|
||||||
|
|
||||||
|
EXECUTE IMMEDIATE 'INSERT INTO CT_MRDS.A_PACKAGE_VERSION_TRACKING
|
||||||
|
(PACKAGE_OWNER, PACKAGE_NAME, PACKAGE_TYPE, PACKAGE_VERSION,
|
||||||
|
PACKAGE_BUILD_DATE, PACKAGE_AUTHOR, TRACKING_DATE, TRACKED_BY_USER, TRACKED_BY_MODULE)
|
||||||
|
VALUES (:1, :2, :3, :4, :5, :6, SYSTIMESTAMP, USER, :7)'
|
||||||
|
USING 'CT_MRDS', 'FILE_ARCHIVER', 'BOTH', v_file_archiver_version,
|
||||||
|
'', '', 'MARS-1409';
|
||||||
|
|
||||||
|
COMMIT;
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Package version tracking recorded successfully');
|
||||||
|
EXCEPTION
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('ERROR: Could not record version tracking - ' || SQLERRM);
|
||||||
|
RAISE;
|
||||||
END;
|
END;
|
||||||
END;
|
END;
|
||||||
/
|
/
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ PROMPT
|
|||||||
PROMPT Package Compilation Status:
|
PROMPT Package Compilation Status:
|
||||||
SELECT object_name, object_type, status, last_ddl_time
|
SELECT object_name, object_type, status, last_ddl_time
|
||||||
FROM user_objects
|
FROM user_objects
|
||||||
WHERE object_name IN ('FILE_MANAGER', 'ENV_MANAGER')
|
WHERE object_name IN ('FILE_MANAGER', 'ENV_MANAGER', 'FILE_ARCHIVER')
|
||||||
AND object_type IN ('PACKAGE', 'PACKAGE BODY')
|
AND object_type IN ('PACKAGE', 'PACKAGE BODY')
|
||||||
ORDER BY object_name, object_type;
|
ORDER BY object_name, object_type;
|
||||||
|
|
||||||
@@ -40,7 +40,7 @@ PROMPT
|
|||||||
PROMPT Compilation Errors (if any):
|
PROMPT Compilation Errors (if any):
|
||||||
SELECT name, type, line, position, text
|
SELECT name, type, line, position, text
|
||||||
FROM user_errors
|
FROM user_errors
|
||||||
WHERE name IN ('FILE_MANAGER', 'ENV_MANAGER')
|
WHERE name IN ('FILE_MANAGER', 'ENV_MANAGER', 'FILE_ARCHIVER')
|
||||||
ORDER BY name, type, line, position;
|
ORDER BY name, type, line, position;
|
||||||
|
|
||||||
PROMPT
|
PROMPT
|
||||||
|
|||||||
@@ -16,10 +16,11 @@ CREATE TABLE CT_MRDS.A_SOURCE_FILE_RECEIVED (
|
|||||||
EXTERNAL_TABLE_NAME VARCHAR2(200),
|
EXTERNAL_TABLE_NAME VARCHAR2(200),
|
||||||
PARTITION_YEAR VARCHAR2(4),
|
PARTITION_YEAR VARCHAR2(4),
|
||||||
PARTITION_MONTH VARCHAR2(2),
|
PARTITION_MONTH VARCHAR2(2),
|
||||||
ARCH_FILE_NAME VARCHAR2(1000),
|
ARCH_PATH VARCHAR2(1000),
|
||||||
|
PROCESS_NAME VARCHAR2(200),
|
||||||
CONSTRAINT A_SOURCE_FILE_RECEIVED_PK PRIMARY KEY (A_SOURCE_FILE_RECEIVED_KEY),
|
CONSTRAINT A_SOURCE_FILE_RECEIVED_PK PRIMARY KEY (A_SOURCE_FILE_RECEIVED_KEY),
|
||||||
CONSTRAINT ASFR_A_SOURCE_FILE_CONFIG_KEY_FK FOREIGN KEY(A_SOURCE_FILE_CONFIG_KEY) REFERENCES CT_MRDS.A_SOURCE_FILE_CONFIG(A_SOURCE_FILE_CONFIG_KEY),
|
CONSTRAINT ASFR_A_SOURCE_FILE_CONFIG_KEY_FK FOREIGN KEY(A_SOURCE_FILE_CONFIG_KEY) REFERENCES CT_MRDS.A_SOURCE_FILE_CONFIG(A_SOURCE_FILE_CONFIG_KEY),
|
||||||
CONSTRAINT A_SOURCE_FILE_RECEIVED_CHK CHECK (PROCESSING_STATUS IN ('RECEIVED', 'VALIDATED', 'READY_FOR_INGESTION', 'INGESTED', 'ARCHIVED', 'ARCHIVED_AND_TRASHED', 'ARCHIVED_AND_PURGED'))
|
CONSTRAINT A_SOURCE_FILE_RECEIVED_CHK CHECK (PROCESSING_STATUS IN ('RECEIVED', 'VALIDATION_FAILED', 'VALIDATED', 'READY_FOR_INGESTION', 'INGESTED', 'ARCHIVED', 'ARCHIVED_AND_TRASHED', 'ARCHIVED_AND_PURGED'))
|
||||||
) TABLESPACE "DATA";
|
) TABLESPACE "DATA";
|
||||||
|
|
||||||
-- Unique index for file identification (workaround for TIMESTAMP WITH TIMEZONE constraint limitation)
|
-- Unique index for file identification (workaround for TIMESTAMP WITH TIMEZONE constraint limitation)
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
-- ====================================================================
|
-- ====================================================================
|
||||||
-- TRG_A_WORKFLOW_HISTORY Trigger Definition
|
-- TRG_A_WORKFLOW_HISTORY Trigger Definition
|
||||||
-- ====================================================================
|
-- ====================================================================
|
||||||
-- Purpose: Trigger to insert workflow completion data to CT_ODS.A_LOAD_HISTORY
|
-- Purpose: Trigger to:
|
||||||
-- Source: new_EXP.sql export from production database
|
-- 1. Insert workflow completion data to CT_ODS.A_LOAD_HISTORY
|
||||||
|
-- 2. MARS-1409: Mark linked A_SOURCE_FILE_RECEIVED records as INGESTED
|
||||||
-- ====================================================================
|
-- ====================================================================
|
||||||
|
|
||||||
CREATE OR REPLACE EDITIONABLE TRIGGER "CT_MRDS"."TRG_A_WORKFLOW_HISTORY"
|
CREATE OR REPLACE EDITIONABLE TRIGGER "CT_MRDS"."TRG_A_WORKFLOW_HISTORY"
|
||||||
@@ -13,6 +14,7 @@ DECLARE
|
|||||||
v_workflow_name VARCHAR2(128);
|
v_workflow_name VARCHAR2(128);
|
||||||
v_wla_id NUMBER;
|
v_wla_id NUMBER;
|
||||||
BEGIN
|
BEGIN
|
||||||
|
-- Original logic: Insert into CT_ODS.A_LOAD_HISTORY for specific ODS workflows
|
||||||
IF :new.workflow_name IN ('w_ODS_LM_STANDING_FACILITIES', 'w_ODS_CSDB_DEBT', 'w_ODS_CSDB_DEBT_DAILY', 'w_ODS_CSDB_RATINGS_FULL') AND :new.service_name = 'ODS' THEN
|
IF :new.workflow_name IN ('w_ODS_LM_STANDING_FACILITIES', 'w_ODS_CSDB_DEBT', 'w_ODS_CSDB_DEBT_DAILY', 'w_ODS_CSDB_RATINGS_FULL') AND :new.service_name = 'ODS' THEN
|
||||||
IF :new.workflow_successful <> :old.workflow_successful AND :new.workflow_successful = 'Y' THEN
|
IF :new.workflow_successful <> :old.workflow_successful AND :new.workflow_successful = 'Y' THEN
|
||||||
IF :new.workflow_name = 'w_ODS_LM_STANDING_FACILITIES' THEN
|
IF :new.workflow_name = 'w_ODS_LM_STANDING_FACILITIES' THEN
|
||||||
@@ -35,6 +37,16 @@ BEGIN
|
|||||||
);
|
);
|
||||||
END IF;
|
END IF;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
|
-- MARS-1409: When workflow completes successfully, mark linked files as INGESTED
|
||||||
|
IF :new.workflow_successful = 'Y' THEN
|
||||||
|
IF INSERTING OR (UPDATING AND (:old.workflow_successful IS NULL OR :old.workflow_successful != 'Y')) THEN
|
||||||
|
UPDATE CT_MRDS.A_SOURCE_FILE_RECEIVED
|
||||||
|
SET PROCESSING_STATUS = 'INGESTED',
|
||||||
|
PROCESS_NAME = :new.service_name
|
||||||
|
WHERE A_WORKFLOW_HISTORY_KEY = :new.a_workflow_history_key;
|
||||||
|
END IF;
|
||||||
|
END IF;
|
||||||
END;
|
END;
|
||||||
|
|
||||||
/
|
/
|
||||||
@@ -83,3 +83,8 @@ cd .\MARS_Packages\REL02_POST\MARS-956
|
|||||||
echo 'yes' | sql "ADMIN/Cloudpass#34@ggmichalski_high" "@install_mars956.sql"
|
echo 'yes' | sql "ADMIN/Cloudpass#34@ggmichalski_high" "@install_mars956.sql"
|
||||||
echo 'yes' | sql "ADMIN/Cloudpass#34@ggmichalski_high" "@rollback_mars956.sql"
|
echo 'yes' | sql "ADMIN/Cloudpass#34@ggmichalski_high" "@rollback_mars956.sql"
|
||||||
7z a -pMojeSuperHaslo#123 -mhe=on M956_arch.7z MARS-956
|
7z a -pMojeSuperHaslo#123 -mhe=on M956_arch.7z MARS-956
|
||||||
|
|
||||||
|
cd .\MARS_Packages\REL02_POST\MARS-1409
|
||||||
|
echo 'yes' | sql "ADMIN/Cloudpass#34@ggmichalski_high" "@install_mars1409.sql"
|
||||||
|
echo 'yes' | sql "ADMIN/Cloudpass#34@ggmichalski_high" "@rollback_mars1409.sql"
|
||||||
|
7z a -pMojeSuperHaslo#123 -mhe=on M1409_arch.7z MARS-1409
|
||||||
|
|||||||
Reference in New Issue
Block a user