feat(MARS-1409): Add prerequisite checks for MARS-1409 objects in installation script
This commit is contained in:
@@ -46,6 +46,16 @@ DECLARE
|
|||||||
cMaxPrint CONSTANT NUMBER := 1000;
|
cMaxPrint CONSTANT NUMBER := 1000;
|
||||||
vPrinted NUMBER;
|
vPrinted NUMBER;
|
||||||
|
|
||||||
|
FUNCTION IS_EXTERNAL_TABLE_EMPTY_ERROR(
|
||||||
|
pSqlCode NUMBER,
|
||||||
|
pSqlErrm VARCHAR2
|
||||||
|
) RETURN BOOLEAN
|
||||||
|
IS
|
||||||
|
BEGIN
|
||||||
|
RETURN pSqlCode IN (-29913, -29400)
|
||||||
|
OR INSTR(pSqlErrm, 'KUP-05002') > 0;
|
||||||
|
END;
|
||||||
|
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
||||||
FOR config_rec IN (
|
FOR config_rec IN (
|
||||||
@@ -79,7 +89,7 @@ BEGIN
|
|||||||
INTO vTableExists;
|
INTO vTableExists;
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
WHEN OTHERS THEN
|
WHEN OTHERS THEN
|
||||||
IF SQLCODE = -29913 THEN
|
IF IS_EXTERNAL_TABLE_EMPTY_ERROR(SQLCODE, SQLERRM) THEN
|
||||||
vBucketEmpty := TRUE;
|
vBucketEmpty := TRUE;
|
||||||
ELSE
|
ELSE
|
||||||
RAISE;
|
RAISE;
|
||||||
@@ -97,6 +107,7 @@ BEGIN
|
|||||||
vInBothNoKey := 0;
|
vInBothNoKey := 0;
|
||||||
ELSE
|
ELSE
|
||||||
|
|
||||||
|
BEGIN
|
||||||
-- ----------------------------------------------------------------
|
-- ----------------------------------------------------------------
|
||||||
-- [A] In ODS bucket but NOT in A_SOURCE_FILE_RECEIVED
|
-- [A] In ODS bucket but NOT in A_SOURCE_FILE_RECEIVED
|
||||||
-- ----------------------------------------------------------------
|
-- ----------------------------------------------------------------
|
||||||
@@ -154,6 +165,22 @@ BEGIN
|
|||||||
' WHERE t.file$name = sfr.SOURCE_FILE_NAME)'
|
' WHERE t.file$name = sfr.SOURCE_FILE_NAME)'
|
||||||
INTO vInBothNoKey
|
INTO vInBothNoKey
|
||||||
USING config_rec.A_SOURCE_FILE_CONFIG_KEY;
|
USING config_rec.A_SOURCE_FILE_CONFIG_KEY;
|
||||||
|
EXCEPTION
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
IF IS_EXTERNAL_TABLE_EMPTY_ERROR(SQLCODE, SQLERRM) THEN
|
||||||
|
vBucketEmpty := TRUE;
|
||||||
|
vOnlyInBucket := 0;
|
||||||
|
SELECT COUNT(*) INTO vOnlyInDB
|
||||||
|
FROM CT_MRDS.A_SOURCE_FILE_RECEIVED sfr
|
||||||
|
WHERE sfr.A_SOURCE_FILE_CONFIG_KEY = config_rec.A_SOURCE_FILE_CONFIG_KEY
|
||||||
|
AND sfr.PROCESSING_STATUS IN ('VALIDATED','READY_FOR_INGESTION','INGESTED','ARCHIVED','ARCHIVED_AND_TRASHED','ARCHIVED_AND_PURGED');
|
||||||
|
vInBothWithKey := 0;
|
||||||
|
vInBothNoKey := 0;
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' NOTE: ODS bucket became empty/inaccessible during diagnostics for ' || vTableName || '. Falling back to DB-only counts for [B].');
|
||||||
|
ELSE
|
||||||
|
RAISE;
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
|
||||||
END IF; -- vBucketEmpty
|
END IF; -- vBucketEmpty
|
||||||
|
|
||||||
@@ -204,6 +231,16 @@ BEGIN
|
|||||||
vConfigsWithIssues := vConfigsWithIssues + 1;
|
vConfigsWithIssues := vConfigsWithIssues + 1;
|
||||||
DBMS_OUTPUT.PUT_LINE(' [B] Registered files not found in bucket:');
|
DBMS_OUTPUT.PUT_LINE(' [B] Registered files not found in bucket:');
|
||||||
vPrinted := 0;
|
vPrinted := 0;
|
||||||
|
BEGIN
|
||||||
|
IF vBucketEmpty THEN
|
||||||
|
OPEN vRefCursor FOR
|
||||||
|
'SELECT sfr.SOURCE_FILE_NAME, sfr.PROCESSING_STATUS, sfr.A_WORKFLOW_HISTORY_KEY ' ||
|
||||||
|
'FROM CT_MRDS.A_SOURCE_FILE_RECEIVED sfr ' ||
|
||||||
|
'WHERE sfr.A_SOURCE_FILE_CONFIG_KEY = :1 ' ||
|
||||||
|
' AND sfr.PROCESSING_STATUS IN (''VALIDATED'',''READY_FOR_INGESTION'',''INGESTED'',''ARCHIVED'',''ARCHIVED_AND_TRASHED'',''ARCHIVED_AND_PURGED'') ' ||
|
||||||
|
'ORDER BY sfr.SOURCE_FILE_NAME'
|
||||||
|
USING config_rec.A_SOURCE_FILE_CONFIG_KEY;
|
||||||
|
ELSE
|
||||||
OPEN vRefCursor FOR
|
OPEN vRefCursor FOR
|
||||||
'SELECT sfr.SOURCE_FILE_NAME, sfr.PROCESSING_STATUS, sfr.A_WORKFLOW_HISTORY_KEY ' ||
|
'SELECT sfr.SOURCE_FILE_NAME, sfr.PROCESSING_STATUS, sfr.A_WORKFLOW_HISTORY_KEY ' ||
|
||||||
'FROM CT_MRDS.A_SOURCE_FILE_RECEIVED sfr ' ||
|
'FROM CT_MRDS.A_SOURCE_FILE_RECEIVED sfr ' ||
|
||||||
@@ -214,6 +251,23 @@ BEGIN
|
|||||||
' WHERE t.file$name = sfr.SOURCE_FILE_NAME) ' ||
|
' WHERE t.file$name = sfr.SOURCE_FILE_NAME) ' ||
|
||||||
'ORDER BY sfr.SOURCE_FILE_NAME'
|
'ORDER BY sfr.SOURCE_FILE_NAME'
|
||||||
USING config_rec.A_SOURCE_FILE_CONFIG_KEY;
|
USING config_rec.A_SOURCE_FILE_CONFIG_KEY;
|
||||||
|
END IF;
|
||||||
|
EXCEPTION
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
IF IS_EXTERNAL_TABLE_EMPTY_ERROR(SQLCODE, SQLERRM) THEN
|
||||||
|
vBucketEmpty := TRUE;
|
||||||
|
DBMS_OUTPUT.PUT_LINE(' NOTE: Skipping ODS anti-join details due to empty/inaccessible external table for ' || vTableName || '.');
|
||||||
|
OPEN vRefCursor FOR
|
||||||
|
'SELECT sfr.SOURCE_FILE_NAME, sfr.PROCESSING_STATUS, sfr.A_WORKFLOW_HISTORY_KEY ' ||
|
||||||
|
'FROM CT_MRDS.A_SOURCE_FILE_RECEIVED sfr ' ||
|
||||||
|
'WHERE sfr.A_SOURCE_FILE_CONFIG_KEY = :1 ' ||
|
||||||
|
' AND sfr.PROCESSING_STATUS IN (''VALIDATED'',''READY_FOR_INGESTION'',''INGESTED'',''ARCHIVED'',''ARCHIVED_AND_TRASHED'',''ARCHIVED_AND_PURGED'') ' ||
|
||||||
|
'ORDER BY sfr.SOURCE_FILE_NAME'
|
||||||
|
USING config_rec.A_SOURCE_FILE_CONFIG_KEY;
|
||||||
|
ELSE
|
||||||
|
RAISE;
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
LOOP
|
LOOP
|
||||||
DECLARE
|
DECLARE
|
||||||
vStatus VARCHAR2(50);
|
vStatus VARCHAR2(50);
|
||||||
|
|||||||
@@ -53,6 +53,43 @@ END;
|
|||||||
/
|
/
|
||||||
WHENEVER SQLERROR CONTINUE
|
WHENEVER SQLERROR CONTINUE
|
||||||
|
|
||||||
|
PROMPT
|
||||||
|
PROMPT ============================================================================
|
||||||
|
PROMPT PREREQUISITE CHECK: Verifying MARS-1409 objects
|
||||||
|
PROMPT ============================================================================
|
||||||
|
WHENEVER SQLERROR EXIT SQL.SQLCODE
|
||||||
|
DECLARE
|
||||||
|
vColCount NUMBER;
|
||||||
|
vTableCount NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*)
|
||||||
|
INTO vColCount
|
||||||
|
FROM ALL_TAB_COLUMNS
|
||||||
|
WHERE OWNER = 'CT_MRDS'
|
||||||
|
AND TABLE_NAME = 'A_SOURCE_FILE_RECEIVED'
|
||||||
|
AND COLUMN_NAME = 'A_WORKFLOW_HISTORY_KEY';
|
||||||
|
|
||||||
|
IF vColCount = 0 THEN
|
||||||
|
RAISE_APPLICATION_ERROR(-20001,
|
||||||
|
'Prerequisite failed: CT_MRDS.A_SOURCE_FILE_RECEIVED.A_WORKFLOW_HISTORY_KEY not found. Install MARS-1409 first (or do not run POSTHOOK after rollback).');
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
SELECT COUNT(*)
|
||||||
|
INTO vTableCount
|
||||||
|
FROM ALL_TABLES
|
||||||
|
WHERE OWNER = 'CT_MRDS'
|
||||||
|
AND TABLE_NAME = 'A_WORKFLOW_HISTORY';
|
||||||
|
|
||||||
|
IF vTableCount = 0 THEN
|
||||||
|
RAISE_APPLICATION_ERROR(-20002,
|
||||||
|
'Prerequisite failed: CT_MRDS.A_WORKFLOW_HISTORY table not found.');
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('OK: Prerequisites satisfied (MARS-1409 schema changes detected).');
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
WHENEVER SQLERROR CONTINUE
|
||||||
|
|
||||||
PROMPT
|
PROMPT
|
||||||
PROMPT ============================================================================
|
PROMPT ============================================================================
|
||||||
PROMPT STEP 1: Backfill A_WORKFLOW_HISTORY_KEY for existing records
|
PROMPT STEP 1: Backfill A_WORKFLOW_HISTORY_KEY for existing records
|
||||||
|
|||||||
Reference in New Issue
Block a user