|
|
|
|
@@ -1,287 +0,0 @@
|
|
|
|
|
-- =====================================================================================
|
|
|
|
|
-- Script: 00_MARS_956_pre_check_prerequisites.sql
|
|
|
|
|
-- Purpose: Verify prerequisites for C2D MPEC data export
|
|
|
|
|
-- Author: System Generated
|
|
|
|
|
-- Created: 2026-02-12
|
|
|
|
|
-- MARS Issue: MARS-956
|
|
|
|
|
-- Target Locations: mrds_data_dev/ODS/C2D/
|
|
|
|
|
-- =====================================================================================
|
|
|
|
|
|
|
|
|
|
SET SERVEROUTPUT ON SIZE UNLIMITED;
|
|
|
|
|
SET FEEDBACK ON;
|
|
|
|
|
SET VERIFY OFF;
|
|
|
|
|
SET LINESIZE 200;
|
|
|
|
|
|
|
|
|
|
PROMPT =====================================================================================
|
|
|
|
|
PROMPT MARS-956 Pre-Check: Prerequisites for C2D MPEC Data Export
|
|
|
|
|
PROMPT =====================================================================================
|
|
|
|
|
|
|
|
|
|
DECLARE
|
|
|
|
|
vDataBucketUri VARCHAR2(500);
|
|
|
|
|
vCredentialName VARCHAR2(100);
|
|
|
|
|
vFileCount NUMBER := 0;
|
|
|
|
|
vAdminRows NUMBER := 0;
|
|
|
|
|
vContentRows NUMBER := 0;
|
|
|
|
|
vCriterionRows NUMBER := 0;
|
|
|
|
|
vAdminCols NUMBER := 0;
|
|
|
|
|
vContentCols NUMBER := 0;
|
|
|
|
|
vCriterionCols NUMBER := 0;
|
|
|
|
|
BEGIN
|
|
|
|
|
-- Get bucket URI and credential from FILE_MANAGER configuration
|
|
|
|
|
vDataBucketUri := CT_MRDS.FILE_MANAGER.GET_BUCKET_URI('ODS');
|
|
|
|
|
vCredentialName := CT_MRDS.ENV_MANAGER.gvCredentialName;
|
|
|
|
|
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('CHECK TIME: ' || TO_CHAR(SYSTIMESTAMP, 'YYYY-MM-DD HH24:MI:SS.FF3'));
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('ODS Bucket URI: ' || vDataBucketUri);
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('Credential: ' || vCredentialName);
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('');
|
|
|
|
|
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('=====================================================================================');
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('Check 1: Verify DATA_EXPORTER Package Version');
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('=====================================================================================');
|
|
|
|
|
|
|
|
|
|
-- Check DATA_EXPORTER version
|
|
|
|
|
BEGIN
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('DATA_EXPORTER Version: ' || CT_MRDS.DATA_EXPORTER.PACKAGE_VERSION);
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('Build Date: ' || CT_MRDS.DATA_EXPORTER.PACKAGE_BUILD_DATE);
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: DATA_EXPORTER package is available');
|
|
|
|
|
EXCEPTION
|
|
|
|
|
WHEN OTHERS THEN
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('ERROR: ERROR: DATA_EXPORTER package not available: ' || SQLERRM);
|
|
|
|
|
RAISE;
|
|
|
|
|
END;
|
|
|
|
|
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('');
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('=====================================================================================');
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('Check 2: Verify Source Tables in OU_LEGACY_C2D Schema');
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('=====================================================================================');
|
|
|
|
|
|
|
|
|
|
-- Check source table row counts
|
|
|
|
|
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM OU_LEGACY_C2D.MPEC_ADMIN' INTO vAdminRows;
|
|
|
|
|
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM OU_LEGACY_C2D.MPEC_CONTENT' INTO vContentRows;
|
|
|
|
|
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM OU_LEGACY_C2D.MPEC_CONTENT_CRITERION' INTO vCriterionRows;
|
|
|
|
|
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('Source table row counts:');
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('- MPEC_ADMIN: ' || vAdminRows || ' rows');
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('- MPEC_CONTENT: ' || vContentRows || ' rows');
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('- MPEC_CONTENT_CRITERION: ' || vCriterionRows || ' rows');
|
|
|
|
|
|
|
|
|
|
IF vAdminRows > 0 AND vContentRows > 0 AND vCriterionRows > 0 THEN
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: All source tables have data');
|
|
|
|
|
ELSE
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('ERROR: One or more source tables are empty');
|
|
|
|
|
END IF;
|
|
|
|
|
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('');
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('=====================================================================================');
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('Check 3: Verify Template Tables in CT_ET_TEMPLATES Schema');
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('=====================================================================================');
|
|
|
|
|
|
|
|
|
|
-- Check template table structure
|
|
|
|
|
SELECT COUNT(*)
|
|
|
|
|
INTO vAdminCols
|
|
|
|
|
FROM all_tab_columns
|
|
|
|
|
WHERE owner = 'CT_ET_TEMPLATES'
|
|
|
|
|
AND table_name = 'C2D_MPEC_ADMIN';
|
|
|
|
|
|
|
|
|
|
SELECT COUNT(*)
|
|
|
|
|
INTO vContentCols
|
|
|
|
|
FROM all_tab_columns
|
|
|
|
|
WHERE owner = 'CT_ET_TEMPLATES'
|
|
|
|
|
AND table_name = 'C2D_MPEC_CONTENT';
|
|
|
|
|
|
|
|
|
|
SELECT COUNT(*)
|
|
|
|
|
INTO vCriterionCols
|
|
|
|
|
FROM all_tab_columns
|
|
|
|
|
WHERE owner = 'CT_ET_TEMPLATES'
|
|
|
|
|
AND table_name = 'C2D_MPEC_CONTENT_CRITERION';
|
|
|
|
|
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('Template table column counts:');
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('- C2D_MPEC_ADMIN: ' || vAdminCols || ' columns');
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('- C2D_MPEC_CONTENT: ' || vContentCols || ' columns');
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('- C2D_MPEC_CONTENT_CRITERION: ' || vCriterionCols || ' columns');
|
|
|
|
|
|
|
|
|
|
IF vAdminCols > 0 AND vContentCols > 0 AND vCriterionCols > 0 THEN
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: All template tables have defined structure');
|
|
|
|
|
ELSE
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('ERROR: One or more template tables missing columns');
|
|
|
|
|
END IF;
|
|
|
|
|
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('');
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('=====================================================================================');
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('Check 4: Verify ETL Key References in A_LOAD_HISTORY');
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('=====================================================================================');
|
|
|
|
|
|
|
|
|
|
-- Check ETL key validation
|
|
|
|
|
DECLARE
|
|
|
|
|
vValidKeys NUMBER := 0;
|
|
|
|
|
vTotalSourceKeys NUMBER := 0;
|
|
|
|
|
BEGIN
|
|
|
|
|
-- Count total distinct ETL keys in source tables
|
|
|
|
|
SELECT COUNT(DISTINCT etl_key)
|
|
|
|
|
INTO vTotalSourceKeys
|
|
|
|
|
FROM (
|
|
|
|
|
SELECT A_ETL_LOAD_SET_FK AS etl_key FROM OU_LEGACY_C2D.MPEC_ADMIN
|
|
|
|
|
UNION
|
|
|
|
|
SELECT A_ETL_LOAD_SET_FK FROM OU_LEGACY_C2D.MPEC_CONTENT
|
|
|
|
|
UNION
|
|
|
|
|
SELECT A_ETL_LOAD_SET_FK FROM OU_LEGACY_C2D.MPEC_CONTENT_CRITERION
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
-- Count how many exist in A_LOAD_HISTORY
|
|
|
|
|
SELECT COUNT(DISTINCT etl_key)
|
|
|
|
|
INTO vValidKeys
|
|
|
|
|
FROM (
|
|
|
|
|
SELECT A_ETL_LOAD_SET_FK AS etl_key FROM OU_LEGACY_C2D.MPEC_ADMIN
|
|
|
|
|
UNION
|
|
|
|
|
SELECT A_ETL_LOAD_SET_FK FROM OU_LEGACY_C2D.MPEC_CONTENT
|
|
|
|
|
UNION
|
|
|
|
|
SELECT A_ETL_LOAD_SET_FK FROM OU_LEGACY_C2D.MPEC_CONTENT_CRITERION
|
|
|
|
|
) src
|
|
|
|
|
WHERE EXISTS (
|
|
|
|
|
SELECT 1 FROM CT_ODS.A_LOAD_HISTORY h
|
|
|
|
|
WHERE h.A_ETL_LOAD_SET_KEY = src.etl_key
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('ETL key validation:');
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('- Total distinct ETL keys in source: ' || vTotalSourceKeys);
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('- Valid keys (exist in A_LOAD_HISTORY): ' || vValidKeys);
|
|
|
|
|
|
|
|
|
|
IF vValidKeys = vTotalSourceKeys THEN
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: All source ETL keys are valid');
|
|
|
|
|
ELSE
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('ERROR: Some ETL keys may be invalid: ' || (vTotalSourceKeys - vValidKeys));
|
|
|
|
|
END IF;
|
|
|
|
|
END;
|
|
|
|
|
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('');
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('=====================================================================================');
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('Check 5: Verify External Tables in ODS Schema (Target Readiness)');
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('=====================================================================================');
|
|
|
|
|
|
|
|
|
|
-- Check target external table accessibility and current record counts
|
|
|
|
|
DECLARE
|
|
|
|
|
vAdminExtCount NUMBER := -1;
|
|
|
|
|
vContentExtCount NUMBER := -1;
|
|
|
|
|
vCriterionExtCount NUMBER := -1;
|
|
|
|
|
BEGIN
|
|
|
|
|
-- Check if external tables exist and are accessible
|
|
|
|
|
BEGIN
|
|
|
|
|
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ODS.C2D_MPEC_ADMIN_ODS' INTO vAdminExtCount;
|
|
|
|
|
EXCEPTION
|
|
|
|
|
WHEN OTHERS THEN
|
|
|
|
|
-- Acceptable errors for empty external tables:
|
|
|
|
|
-- ORA-29913: error in executing ODCIEXTTABLEOPEN callout
|
|
|
|
|
-- ORA-29400: data cartridge error
|
|
|
|
|
-- KUP-13023: nothing matched wildcard query (no files)
|
|
|
|
|
IF SQLCODE IN (-29913, -29400) OR SQLERRM LIKE '%KUP-13023%' OR SQLERRM LIKE '%does not exist%' THEN
|
|
|
|
|
vAdminExtCount := 0; -- Empty/non-existent is OK
|
|
|
|
|
ELSE
|
|
|
|
|
vAdminExtCount := -1; -- Real error
|
|
|
|
|
END IF;
|
|
|
|
|
END;
|
|
|
|
|
|
|
|
|
|
BEGIN
|
|
|
|
|
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ODS.C2D_MPEC_CONTENT_ODS' INTO vContentExtCount;
|
|
|
|
|
EXCEPTION
|
|
|
|
|
WHEN OTHERS THEN
|
|
|
|
|
IF SQLCODE IN (-29913, -29400) OR SQLERRM LIKE '%KUP-13023%' OR SQLERRM LIKE '%does not exist%' THEN
|
|
|
|
|
vContentExtCount := 0;
|
|
|
|
|
ELSE
|
|
|
|
|
vContentExtCount := -1;
|
|
|
|
|
END IF;
|
|
|
|
|
END;
|
|
|
|
|
|
|
|
|
|
BEGIN
|
|
|
|
|
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ODS.C2D_MPEC_CONTENT_CRITERION_ODS' INTO vCriterionExtCount;
|
|
|
|
|
EXCEPTION
|
|
|
|
|
WHEN OTHERS THEN
|
|
|
|
|
IF SQLCODE IN (-29913, -29400) OR SQLERRM LIKE '%KUP-13023%' OR SQLERRM LIKE '%does not exist%' THEN
|
|
|
|
|
vCriterionExtCount := 0;
|
|
|
|
|
ELSE
|
|
|
|
|
vCriterionExtCount := -1;
|
|
|
|
|
END IF;
|
|
|
|
|
END;
|
|
|
|
|
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('Target external table current counts:');
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('- ODS.C2D_MPEC_ADMIN_ODS: ' ||
|
|
|
|
|
CASE WHEN vAdminExtCount = -1 THEN 'ERROR/INACCESSIBLE'
|
|
|
|
|
WHEN vAdminExtCount = 0 THEN '0 (empty/clean)'
|
|
|
|
|
ELSE TO_CHAR(vAdminExtCount) END);
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('- ODS.C2D_MPEC_CONTENT_ODS: ' ||
|
|
|
|
|
CASE WHEN vContentExtCount = -1 THEN 'ERROR/INACCESSIBLE'
|
|
|
|
|
WHEN vContentExtCount = 0 THEN '0 (empty/clean)'
|
|
|
|
|
ELSE TO_CHAR(vContentExtCount) END);
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('- ODS.C2D_MPEC_CONTENT_CRITERION_ODS: ' ||
|
|
|
|
|
CASE WHEN vCriterionExtCount = -1 THEN 'ERROR/INACCESSIBLE'
|
|
|
|
|
WHEN vCriterionExtCount = 0 THEN '0 (empty/clean)'
|
|
|
|
|
ELSE TO_CHAR(vCriterionExtCount) END);
|
|
|
|
|
|
|
|
|
|
IF vAdminExtCount >= 0 AND vContentExtCount >= 0 AND vCriterionExtCount >= 0 THEN
|
|
|
|
|
IF vAdminExtCount = 0 AND vContentExtCount = 0 AND vCriterionExtCount = 0 THEN
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: All target external tables are clean (ready for fresh export)');
|
|
|
|
|
ELSE
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('WARNING: Target external tables contain data (' ||
|
|
|
|
|
(vAdminExtCount + vContentExtCount + vCriterionExtCount) || ' total records)');
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE(' Consider rollback if this is a re-run');
|
|
|
|
|
END IF;
|
|
|
|
|
ELSE
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('ERROR: Some external tables are inaccessible - check table definitions');
|
|
|
|
|
END IF;
|
|
|
|
|
END;
|
|
|
|
|
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('');
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('=====================================================================================');
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('Check 6: Check Existing Files in ODS/C2D Bucket');
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('=====================================================================================');
|
|
|
|
|
|
|
|
|
|
-- Check for existing C2D MPEC files
|
|
|
|
|
BEGIN
|
|
|
|
|
FOR rec IN (
|
|
|
|
|
SELECT object_name
|
|
|
|
|
FROM TABLE(DBMS_CLOUD.LIST_OBJECTS(
|
|
|
|
|
credential_name => vCredentialName,
|
|
|
|
|
location_uri => vDataBucketUri
|
|
|
|
|
))
|
|
|
|
|
WHERE object_name LIKE 'ODS/C2D/C2D_MPEC_%'
|
|
|
|
|
) LOOP
|
|
|
|
|
vFileCount := vFileCount + 1;
|
|
|
|
|
IF vFileCount = 1 THEN
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('Existing C2D MPEC files in ODS bucket:');
|
|
|
|
|
END IF;
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('- ' || rec.object_name);
|
|
|
|
|
END LOOP;
|
|
|
|
|
|
|
|
|
|
IF vFileCount = 0 THEN
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: No existing C2D MPEC files found - ready for clean export');
|
|
|
|
|
ELSE
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('WARNING: Warning: ' || vFileCount || ' existing C2D MPEC files found');
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE(' Consider rollback if this is a re-run');
|
|
|
|
|
END IF;
|
|
|
|
|
EXCEPTION
|
|
|
|
|
WHEN OTHERS THEN
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('ERROR: ERROR checking existing files: ' || SQLERRM);
|
|
|
|
|
END;
|
|
|
|
|
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('');
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('=====================================================================================');
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('MARS-956 Pre-Check Summary');
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('=====================================================================================');
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: DATA_EXPORTER package available');
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: Source tables: ' || (vAdminRows + vContentRows + vCriterionRows) || ' total rows');
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: Template tables: All structures defined');
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: ETL keys: All validated in A_LOAD_HISTORY');
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: External tables: Accessible and ready');
|
|
|
|
|
|
|
|
|
|
IF vFileCount > 0 THEN
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('WARNING: Existing files: ' || vFileCount || ' (consider rollback)');
|
|
|
|
|
ELSE
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('SUCCESS: Target bucket: Clean for export');
|
|
|
|
|
END IF;
|
|
|
|
|
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('');
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('Prerequisites check completed - ready to proceed with MARS-956 export');
|
|
|
|
|
DBMS_OUTPUT.PUT_LINE('=====================================================================================');
|
|
|
|
|
|
|
|
|
|
END;
|
|
|
|
|
/
|