-- =================================================================== -- MARS-828: Enhanced Archival Strategies Rollback -- =================================================================== -- Purpose: Rollback all changes from MARS-828 installation -- Author: Grzegorz Michalski -- Date: 2026-01-27 -- Dynamic spool file generation (using SYS_CONTEXT - no DBA privileges required) -- IMPORTANT: Ensure log/ directory exists before SPOOL (use host mkdir) host mkdir log 2>nul var filename VARCHAR2(100) BEGIN :filename := 'log/ROLLBACK_MARS_828_' || SYS_CONTEXT('USERENV', 'CON_NAME') || '_' || TO_CHAR(SYSDATE,'YYYYMMDD_HH24MISS') || '.log'; END; / column filename new_value _filename select :filename filename from dual; spool &_filename SET ECHO OFF SET TIMING ON SET SERVEROUTPUT ON SIZE UNLIMITED SET LINESIZE 200 SET PAGESIZE 1000 SET PAUSE OFF PROMPT PROMPT ============================================================================ PROMPT MARS-828 Rollback Starting PROMPT ============================================================================ PROMPT This will restore FILE_ARCHIVER to v2.0.0 PROMPT PROMPT Rollback steps: PROMPT 1. Rollback TRASH retention statuses PROMPT 2. Revoke T_FILENAME privileges PROMPT 3. Remove validation trigger PROMPT 4. Drop all configuration columns (ARCHIVAL_STRATEGY, MINIMUM_AGE_MONTHS, IS_ARCHIVE_ENABLED, IS_KEEP_IN_TRASH) PROMPT 5. Restore FILE_ARCHIVER package to v2.0.0 PROMPT 6. Revert all archival strategies to THRESHOLD_BASED PROMPT PROMPT Timestamp: SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS rollback_start FROM DUAL; PROMPT ============================================================================ -- Confirm rollback with user ACCEPT continue CHAR PROMPT 'Type YES to continue with rollback, or Ctrl+C to abort: ' WHENEVER SQLERROR EXIT SQL.SQLCODE BEGIN IF '&continue' IS NULL OR TRIM('&continue') IS NULL OR UPPER(TRIM('&continue')) != 'YES' THEN RAISE_APPLICATION_ERROR(-20001, 'Rollback aborted by user'); END IF; END; / WHENEVER SQLERROR CONTINUE -- Rollback steps (in reverse order) PROMPT PROMPT Step 1/7: Rolling back TRASH retention statuses PROMPT ================================================ @@90_MARS_828_rollback_trash_retention_statuses.sql PROMPT PROMPT Step 2/7: Revoking T_FILENAME privileges from MRDS_LOADER PROMPT ========================================================== @@95_MARS_828_rollback_grant_t_filename.sql PROMPT PROMPT Step 3/7: Dropping validation trigger PROMPT ====================================== @@93_MARS_828_rollback_trigger.sql PROMPT PROMPT Step 4/7: Dropping all archival configuration columns PROMPT ====================================================== @@94_MARS_828_rollback_columns.sql PROMPT PROMPT Step 5/7: Restoring FILE_ARCHIVER Package Specification v2.0.0 PROMPT =============================================================== @@91_MARS_828_rollback_FILE_ARCHIVER_SPEC.sql PROMPT PROMPT Step 6/7: Restoring FILE_ARCHIVER Package Body v2.0.0 PROMPT ====================================================== @@92_MARS_828_rollback_FILE_ARCHIVER_BODY.sql PROMPT PROMPT Step 7/7: Verifying tracked packages PROMPT ===================================== @@verify_packages_version.sql -- Verify rollback PROMPT PROMPT Verification: Package Compilation Status PROMPT ========================================= SELECT 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; PROMPT PROMPT ============================================================================ PROMPT MARS-828 Rollback Completed PROMPT ============================================================================ PROMPT Completion Time: SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS rollback_end FROM DUAL; PROMPT PROMPT Rollback Summary: PROMPT - Package: CT_MRDS.FILE_ARCHIVER PROMPT - Restored Version: 2.0.0 (THRESHOLD_BASED archival only) PROMPT - Removed Features: CURRENT_MONTH_ONLY, MINIMUM_AGE_MONTHS, HYBRID strategies PROMPT PROMPT Log file: &_filename PROMPT ============================================================================ spool off quit;