Refactor rollback script to delete only files registered by MARS-1005 and improve output messages

This commit is contained in:
Grzegorz Michalski
2026-03-09 10:24:24 +01:00
parent 0ecc119ee9
commit dec3e7137e

View File

@@ -14,7 +14,7 @@ PROMPT ========================================================================
PROMPT ROLLBACK: Deleting OU_TOP LEGACY exported files from DATA Bucket PROMPT ROLLBACK: Deleting OU_TOP LEGACY exported files from DATA Bucket
PROMPT ======================================================================== PROMPT ========================================================================
PROMPT WARNING: This will delete files registered with PROCESS_NAME = 'MARS-1005' PROMPT WARNING: This will delete files registered with PROCESS_NAME = 'MARS-1005'
PROMPT from ODS/TOP/* paths in the DATA bucket. PROMPT from "ODS/TOP/*" paths in the DATA bucket.
PROMPT ======================================================================== PROMPT ========================================================================
-- Helper: generic delete procedure for one TOP table folder -- Helper: generic delete procedure for one TOP table folder
@@ -28,27 +28,26 @@ DECLARE
vFileCount NUMBER := 0; vFileCount NUMBER := 0;
BEGIN BEGIN
vDataBucketUri := CT_MRDS.FILE_MANAGER.GET_BUCKET_URI('DATA'); vDataBucketUri := CT_MRDS.FILE_MANAGER.GET_BUCKET_URI('DATA');
DBMS_OUTPUT.PUT_LINE('Deleting TOP_ALLOTMENT files from: ' || vDataBucketUri || vFolderPath); DBMS_OUTPUT.PUT_LINE('Deleting TOP_ALLOTMENT files registered by MARS-1005...');
-- Only delete files registered by MARS-1005 (safe - does not touch pre-existing files)
FOR rec IN ( FOR rec IN (
SELECT object_name SELECT SOURCE_FILE_NAME
FROM TABLE(DBMS_CLOUD.LIST_OBJECTS( FROM CT_MRDS.A_SOURCE_FILE_RECEIVED
credential_name => 'OCI$RESOURCE_PRINCIPAL', WHERE PROCESS_NAME = 'MARS-1005'
location_uri => vDataBucketUri || vFolderPath AND SOURCE_FILE_NAME LIKE vFolderPath || '%'
))
WHERE object_name NOT LIKE '%/'
) LOOP ) LOOP
BEGIN BEGIN
DBMS_CLOUD.DELETE_OBJECT( DBMS_CLOUD.DELETE_OBJECT(
credential_name => 'OCI$RESOURCE_PRINCIPAL', credential_name => 'OCI$RESOURCE_PRINCIPAL',
object_uri => vDataBucketUri || vFolderPath || rec.object_name object_uri => vDataBucketUri || rec.SOURCE_FILE_NAME
); );
DBMS_OUTPUT.PUT_LINE(' Deleted: ' || rec.object_name); DBMS_OUTPUT.PUT_LINE(' Deleted: ' || rec.SOURCE_FILE_NAME);
vFileCount := vFileCount + 1; vFileCount := vFileCount + 1;
EXCEPTION EXCEPTION
WHEN OTHERS THEN WHEN OTHERS THEN
IF SQLCODE = -20404 THEN IF SQLCODE = -20404 THEN
DBMS_OUTPUT.PUT_LINE(' Skipped (not found): ' || rec.object_name); DBMS_OUTPUT.PUT_LINE(' Skipped (not found): ' || rec.SOURCE_FILE_NAME);
ELSE RAISE; ELSE RAISE;
END IF; END IF;
END; END;
@@ -69,19 +68,18 @@ DECLARE
vFileCount NUMBER := 0; vFileCount NUMBER := 0;
BEGIN BEGIN
vDataBucketUri := CT_MRDS.FILE_MANAGER.GET_BUCKET_URI('DATA'); vDataBucketUri := CT_MRDS.FILE_MANAGER.GET_BUCKET_URI('DATA');
DBMS_OUTPUT.PUT_LINE('Deleting TOP_ALLOTMENT_MODIFICATION_HEADER files...'); DBMS_OUTPUT.PUT_LINE('Deleting TOP_ALLOTMENT_MODIFICATION_HEADER files registered by MARS-1005...');
FOR rec IN ( FOR rec IN (
SELECT object_name FROM TABLE(DBMS_CLOUD.LIST_OBJECTS( SELECT SOURCE_FILE_NAME FROM CT_MRDS.A_SOURCE_FILE_RECEIVED
credential_name => 'OCI$RESOURCE_PRINCIPAL', WHERE PROCESS_NAME = 'MARS-1005'
location_uri => vDataBucketUri || vFolderPath AND SOURCE_FILE_NAME LIKE vFolderPath || '%'
)) WHERE object_name NOT LIKE '%/'
) LOOP ) LOOP
BEGIN BEGIN
DBMS_CLOUD.DELETE_OBJECT(credential_name => 'OCI$RESOURCE_PRINCIPAL', object_uri => vDataBucketUri || vFolderPath || rec.object_name); DBMS_CLOUD.DELETE_OBJECT(credential_name => 'OCI$RESOURCE_PRINCIPAL', object_uri => vDataBucketUri || rec.SOURCE_FILE_NAME);
DBMS_OUTPUT.PUT_LINE(' Deleted: ' || rec.object_name); DBMS_OUTPUT.PUT_LINE(' Deleted: ' || rec.SOURCE_FILE_NAME);
vFileCount := vFileCount + 1; vFileCount := vFileCount + 1;
EXCEPTION WHEN OTHERS THEN EXCEPTION WHEN OTHERS THEN
IF SQLCODE = -20404 THEN DBMS_OUTPUT.PUT_LINE(' Skipped (not found): ' || rec.object_name); IF SQLCODE = -20404 THEN DBMS_OUTPUT.PUT_LINE(' Skipped (not found): ' || rec.SOURCE_FILE_NAME);
ELSE RAISE; END IF; ELSE RAISE; END IF;
END; END;
END LOOP; END LOOP;
@@ -98,19 +96,18 @@ DECLARE
vFileCount NUMBER := 0; vFileCount NUMBER := 0;
BEGIN BEGIN
vDataBucketUri := CT_MRDS.FILE_MANAGER.GET_BUCKET_URI('DATA'); vDataBucketUri := CT_MRDS.FILE_MANAGER.GET_BUCKET_URI('DATA');
DBMS_OUTPUT.PUT_LINE('Deleting TOP_ALLOTMENT_MODIFICATION_ITEM files...'); DBMS_OUTPUT.PUT_LINE('Deleting TOP_ALLOTMENT_MODIFICATION_ITEM files registered by MARS-1005...');
FOR rec IN ( FOR rec IN (
SELECT object_name FROM TABLE(DBMS_CLOUD.LIST_OBJECTS( SELECT SOURCE_FILE_NAME FROM CT_MRDS.A_SOURCE_FILE_RECEIVED
credential_name => 'OCI$RESOURCE_PRINCIPAL', WHERE PROCESS_NAME = 'MARS-1005'
location_uri => vDataBucketUri || vFolderPath AND SOURCE_FILE_NAME LIKE vFolderPath || '%'
)) WHERE object_name NOT LIKE '%/'
) LOOP ) LOOP
BEGIN BEGIN
DBMS_CLOUD.DELETE_OBJECT(credential_name => 'OCI$RESOURCE_PRINCIPAL', object_uri => vDataBucketUri || vFolderPath || rec.object_name); DBMS_CLOUD.DELETE_OBJECT(credential_name => 'OCI$RESOURCE_PRINCIPAL', object_uri => vDataBucketUri || rec.SOURCE_FILE_NAME);
DBMS_OUTPUT.PUT_LINE(' Deleted: ' || rec.object_name); DBMS_OUTPUT.PUT_LINE(' Deleted: ' || rec.SOURCE_FILE_NAME);
vFileCount := vFileCount + 1; vFileCount := vFileCount + 1;
EXCEPTION WHEN OTHERS THEN EXCEPTION WHEN OTHERS THEN
IF SQLCODE = -20404 THEN DBMS_OUTPUT.PUT_LINE(' Skipped (not found): ' || rec.object_name); IF SQLCODE = -20404 THEN DBMS_OUTPUT.PUT_LINE(' Skipped (not found): ' || rec.SOURCE_FILE_NAME);
ELSE RAISE; END IF; ELSE RAISE; END IF;
END; END;
END LOOP; END LOOP;
@@ -127,19 +124,18 @@ DECLARE
vFileCount NUMBER := 0; vFileCount NUMBER := 0;
BEGIN BEGIN
vDataBucketUri := CT_MRDS.FILE_MANAGER.GET_BUCKET_URI('DATA'); vDataBucketUri := CT_MRDS.FILE_MANAGER.GET_BUCKET_URI('DATA');
DBMS_OUTPUT.PUT_LINE('Deleting TOP_ANNOUNCEMENT files...'); DBMS_OUTPUT.PUT_LINE('Deleting TOP_ANNOUNCEMENT files registered by MARS-1005...');
FOR rec IN ( FOR rec IN (
SELECT object_name FROM TABLE(DBMS_CLOUD.LIST_OBJECTS( SELECT SOURCE_FILE_NAME FROM CT_MRDS.A_SOURCE_FILE_RECEIVED
credential_name => 'OCI$RESOURCE_PRINCIPAL', WHERE PROCESS_NAME = 'MARS-1005'
location_uri => vDataBucketUri || vFolderPath AND SOURCE_FILE_NAME LIKE vFolderPath || '%'
)) WHERE object_name NOT LIKE '%/'
) LOOP ) LOOP
BEGIN BEGIN
DBMS_CLOUD.DELETE_OBJECT(credential_name => 'OCI$RESOURCE_PRINCIPAL', object_uri => vDataBucketUri || vFolderPath || rec.object_name); DBMS_CLOUD.DELETE_OBJECT(credential_name => 'OCI$RESOURCE_PRINCIPAL', object_uri => vDataBucketUri || rec.SOURCE_FILE_NAME);
DBMS_OUTPUT.PUT_LINE(' Deleted: ' || rec.object_name); DBMS_OUTPUT.PUT_LINE(' Deleted: ' || rec.SOURCE_FILE_NAME);
vFileCount := vFileCount + 1; vFileCount := vFileCount + 1;
EXCEPTION WHEN OTHERS THEN EXCEPTION WHEN OTHERS THEN
IF SQLCODE = -20404 THEN DBMS_OUTPUT.PUT_LINE(' Skipped (not found): ' || rec.object_name); IF SQLCODE = -20404 THEN DBMS_OUTPUT.PUT_LINE(' Skipped (not found): ' || rec.SOURCE_FILE_NAME);
ELSE RAISE; END IF; ELSE RAISE; END IF;
END; END;
END LOOP; END LOOP;
@@ -156,19 +152,18 @@ DECLARE
vFileCount NUMBER := 0; vFileCount NUMBER := 0;
BEGIN BEGIN
vDataBucketUri := CT_MRDS.FILE_MANAGER.GET_BUCKET_URI('DATA'); vDataBucketUri := CT_MRDS.FILE_MANAGER.GET_BUCKET_URI('DATA');
DBMS_OUTPUT.PUT_LINE('Deleting TOP_FULLBIDLIST_ITEM files...'); DBMS_OUTPUT.PUT_LINE('Deleting TOP_FULLBIDLIST_ITEM files registered by MARS-1005...');
FOR rec IN ( FOR rec IN (
SELECT object_name FROM TABLE(DBMS_CLOUD.LIST_OBJECTS( SELECT SOURCE_FILE_NAME FROM CT_MRDS.A_SOURCE_FILE_RECEIVED
credential_name => 'OCI$RESOURCE_PRINCIPAL', WHERE PROCESS_NAME = 'MARS-1005'
location_uri => vDataBucketUri || vFolderPath AND SOURCE_FILE_NAME LIKE vFolderPath || '%'
)) WHERE object_name NOT LIKE '%/'
) LOOP ) LOOP
BEGIN BEGIN
DBMS_CLOUD.DELETE_OBJECT(credential_name => 'OCI$RESOURCE_PRINCIPAL', object_uri => vDataBucketUri || vFolderPath || rec.object_name); DBMS_CLOUD.DELETE_OBJECT(credential_name => 'OCI$RESOURCE_PRINCIPAL', object_uri => vDataBucketUri || rec.SOURCE_FILE_NAME);
DBMS_OUTPUT.PUT_LINE(' Deleted: ' || rec.object_name); DBMS_OUTPUT.PUT_LINE(' Deleted: ' || rec.SOURCE_FILE_NAME);
vFileCount := vFileCount + 1; vFileCount := vFileCount + 1;
EXCEPTION WHEN OTHERS THEN EXCEPTION WHEN OTHERS THEN
IF SQLCODE = -20404 THEN DBMS_OUTPUT.PUT_LINE(' Skipped (not found): ' || rec.object_name); IF SQLCODE = -20404 THEN DBMS_OUTPUT.PUT_LINE(' Skipped (not found): ' || rec.SOURCE_FILE_NAME);
ELSE RAISE; END IF; ELSE RAISE; END IF;
END; END;
END LOOP; END LOOP;
@@ -185,19 +180,18 @@ DECLARE
vFileCount NUMBER := 0; vFileCount NUMBER := 0;
BEGIN BEGIN
vDataBucketUri := CT_MRDS.FILE_MANAGER.GET_BUCKET_URI('DATA'); vDataBucketUri := CT_MRDS.FILE_MANAGER.GET_BUCKET_URI('DATA');
DBMS_OUTPUT.PUT_LINE('Deleting TOP_FULLBID_ARRAY_COMPILED files...'); DBMS_OUTPUT.PUT_LINE('Deleting TOP_FULLBID_ARRAY_COMPILED files registered by MARS-1005...');
FOR rec IN ( FOR rec IN (
SELECT object_name FROM TABLE(DBMS_CLOUD.LIST_OBJECTS( SELECT SOURCE_FILE_NAME FROM CT_MRDS.A_SOURCE_FILE_RECEIVED
credential_name => 'OCI$RESOURCE_PRINCIPAL', WHERE PROCESS_NAME = 'MARS-1005'
location_uri => vDataBucketUri || vFolderPath AND SOURCE_FILE_NAME LIKE vFolderPath || '%'
)) WHERE object_name NOT LIKE '%/'
) LOOP ) LOOP
BEGIN BEGIN
DBMS_CLOUD.DELETE_OBJECT(credential_name => 'OCI$RESOURCE_PRINCIPAL', object_uri => vDataBucketUri || vFolderPath || rec.object_name); DBMS_CLOUD.DELETE_OBJECT(credential_name => 'OCI$RESOURCE_PRINCIPAL', object_uri => vDataBucketUri || rec.SOURCE_FILE_NAME);
DBMS_OUTPUT.PUT_LINE(' Deleted: ' || rec.object_name); DBMS_OUTPUT.PUT_LINE(' Deleted: ' || rec.SOURCE_FILE_NAME);
vFileCount := vFileCount + 1; vFileCount := vFileCount + 1;
EXCEPTION WHEN OTHERS THEN EXCEPTION WHEN OTHERS THEN
IF SQLCODE = -20404 THEN DBMS_OUTPUT.PUT_LINE(' Skipped (not found): ' || rec.object_name); IF SQLCODE = -20404 THEN DBMS_OUTPUT.PUT_LINE(' Skipped (not found): ' || rec.SOURCE_FILE_NAME);
ELSE RAISE; END IF; ELSE RAISE; END IF;
END; END;
END LOOP; END LOOP;