-- =================================================================== -- 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. Remove validation trigger PROMPT 2. Drop ARCHIVAL_STRATEGY and MINIMUM_AGE_MONTHS columns PROMPT 3. Restore FILE_ARCHIVER package to v2.0.0 PROMPT 4. 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/5: Dropping validation trigger PROMPT ====================================== @@93_MARS_828_rollback_trigger.sql PROMPT PROMPT Step 2/5: Dropping archival strategy columns PROMPT ============================================= @@94_MARS_828_rollback_columns.sql PROMPT PROMPT Step 3/5: Restoring FILE_ARCHIVER Package Specification v2.0.0 PROMPT =============================================================== @@91_MARS_828_rollback_FILE_ARCHIVER_SPEC.sql PROMPT PROMPT Step 4/5: Restoring FILE_ARCHIVER Package Body v2.0.0 PROMPT ====================================================== @@92_MARS_828_rollback_FILE_ARCHIVER_BODY.sql PROMPT PROMPT Step 5/5: 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;