Mearge recent development

This commit is contained in:
Grzegorz Michalski
2026-02-02 11:18:42 +01:00
parent b4eb235154
commit 00063f1d0b
29 changed files with 3867 additions and 0 deletions

View File

@@ -0,0 +1,310 @@
============================================================================
MARS-828 Installation Starting (AUTO MODE)
============================================================================
INSTALL_START
______________________
2026-01-28 06:49:11
1 row selected.
============================================================================
Step 1/7: Adding archival strategy columns
===================================================================
========================================
MARS-828: Adding archival strategy columns
========================================
Error starting at line : 11 File @ C:\_git\_local_rep\working_dir_02\MARS_Packages\REL01_ADDITIONS\MARS-828\01_MARS_828_install_add_archival_strategy_columns.sql
In command -
ALTER TABLE CT_MRDS.A_SOURCE_FILE_CONFIG ADD (
ARCHIVAL_STRATEGY VARCHAR2(30) DEFAULT 'THRESHOLD_BASED' NOT NULL,
MINIMUM_AGE_MONTHS NUMBER(3) DEFAULT NULL
)
Error report -
ORA-01430: column being added already exists in table
https://docs.oracle.com/error-help/db/ora-01430/
01430. 00000 - "column being added already exists in table"
*Cause: An ALTER TABLE ADD statement specified the name of a
column that was already in the table. All column names must be
unique within a table.
*Action: Specify a unique name for the new column, then
re-execute the statement.
Error starting at line : 17 File @ C:\_git\_local_rep\working_dir_02\MARS_Packages\REL01_ADDITIONS\MARS-828\01_MARS_828_install_add_archival_strategy_columns.sql
In command -
ALTER TABLE CT_MRDS.A_SOURCE_FILE_CONFIG ADD CONSTRAINT
CHK_ARCHIVAL_STRATEGY CHECK (
ARCHIVAL_STRATEGY IN ('THRESHOLD_BASED', 'CURRENT_MONTH_ONLY', 'MINIMUM_AGE_MONTHS', 'HYBRID')
)
Error report -
ORA-02264: name already used by an existing constraint
https://docs.oracle.com/error-help/db/ora-02264/
02264. 00000 - "name already used by an existing constraint"
*Cause: The specified constraint name has to be unique.
*Action: Specify a unique constraint name for the constraint.
Comment created.
Comment created.
COLUMN_NAME DATA_TYPE DATA_LENGTH NULLABLE DATA_DEFAULT
_____________________ ____________ ______________ ___________ _____________________
ARCHIVAL_STRATEGY VARCHAR2 30 N 'THRESHOLD_BASED'
MINIMUM_AGE_MONTHS NUMBER 22 Y NULL
2 rows selected.
========================================
Archival strategy columns added successfully
========================================
Step 2/7: Creating validation trigger
======================================
========================================
MARS-828: Creating archival strategy validation trigger
========================================
Trigger CT_MRDS.TRG_BI_A_SRC_FILE_CFG_ARCH_VAL compiled
TRIGGER_NAME STATUS TRIGGER_TYPE TRIGGERING_EVENT
_________________________________ __________ __________________ ___________________
TRG_BI_A_SRC_FILE_CFG_ARCH_VAL ENABLED BEFORE EACH ROW INSERT OR UPDATE
1 row selected.
========================================
Archival strategy validation trigger created successfully
========================================
Step 3/7: Deploying FILE_ARCHIVER Spec v3.0.0
===============================================================
Package CT_MRDS.FILE_ARCHIVER compiled
========================================
FILE_ARCHIVER Specification v3.0.0 ready for installation
========================================
Step 4/7: Deploying FILE_ARCHIVER Body v3.0.0
======================================================
Package Body CT_MRDS.FILE_ARCHIVER compiled
LINE/COL ERROR
--------- -------------------------------------------------------------
36/10 PLS-00103: Encountered the symbol "\" when expecting one of the following: ( begin case declare else end exit for goto if loop mod null pragma raise return select update when while with <an identifier> <a double-quoted delimited-identifier> <a bind variable> << continue close current delete fetch lock insert open rollback savepoint set sql execute commit forall merge pipe purge json_object The symbol "case was inserted before "\" to continue.
49/8 PLS-00103: Encountered the symbol "GET_ARCHIVAL_WHERE_CLAUSE" when expecting one of the following: case
67/9 PLS-00103: Encountered the symbol "JOIN" when expecting one of the following: , ; for group having intersect minus order start union where connect
Errors: check compiler log
Step 5/7: Verifying installation
=================================
========================================
MARS-828: Verification Script
========================================
1. Verifying A_SOURCE_FILE_CONFIG columns...
COLUMN_NAME DATA_TYPE NULLABLE DATA_DEFAULT
_____________________ ____________ ___________ _____________________
ARCHIVAL_STRATEGY VARCHAR2 N 'THRESHOLD_BASED'
MINIMUM_AGE_MONTHS NUMBER Y NULL
2 rows selected.
2. Verifying check constraint...
CONSTRAINT_NAME CONSTRAINT_TYPE SEARCH_CONDITION
________________________ __________________ _________________________________________________________________________________________________
CHK_ARCHIVAL_STRATEGY C ARCHIVAL_STRATEGY IN ('THRESHOLD_BASED', 'CURRENT_MONTH_ONLY', 'MINIMUM_AGE_MONTHS', 'HYBRID')
1 row selected.
3. Verifying validation trigger...
TRIGGER_NAME STATUS TRIGGER_TYPE
_________________________________ __________ __________________
TRG_BI_A_SRC_FILE_CFG_ARCH_VAL ENABLED BEFORE EACH ROW
1 row selected.
4. Checking FILE_ARCHIVER package status...
OBJECT_NAME OBJECT_TYPE STATUS LAST_DDL_TIME
________________ _______________ __________ ______________________
FILE_ARCHIVER PACKAGE VALID 2026-01-28 06:49:14
FILE_ARCHIVER PACKAGE BODY INVALID 2026-01-28 06:49:15
2 rows selected.
5. Checking for compilation errors...
NAME TYPE LINE POSITION TEXT
________________ _______________ _______ ___________ _____________________________________________________________________________
FILE_ARCHIVER PACKAGE BODY 36 10 PLS-00103: Encountered the symbol "\" when expecting one of the following:
( begin case declare else end exit for goto if loop mod null
pragma raise return select update when while with
<an identifier> <a double-quoted delimited-identifier>
<a bind variable> << continue close current delete fetch lock
insert open rollback savepoint set sql execute commit forall
merge pipe purge json_object
The symbol "case was inserted before "\" to continue.
FILE_ARCHIVER PACKAGE BODY 49 8 PLS-00103: Encountered the symbol "GET_ARCHIVAL_WHERE_CLAUSE" when expecting one of the following:
case
FILE_ARCHIVER PACKAGE BODY 67 9 PLS-00103: Encountered the symbol "JOIN" when expecting one of the following:
, ; for group having intersect minus order start union where
connect
3 rows selected.
6. Verifying FILE_ARCHIVER version...
Error starting at line : 79 File @ C:\_git\_local_rep\working_dir_02\MARS_Packages\REL01_ADDITIONS\MARS-828\05_MARS_828_verify_installation.sql
In command -
SELECT CT_MRDS.FILE_ARCHIVER.GET_VERSION() as package_version FROM DUAL
Error at Command Line : 79 Column : 68 File @ C:\_git\_local_rep\working_dir_02\MARS_Packages\REL01_ADDITIONS\MARS-828\05_MARS_828_verify_installation.sql
Error report -
SQL Error: ORA-04063: package body "CT_MRDS.FILE_ARCHIVER" has errors
https://docs.oracle.com/error-help/db/ora-04063/04063. 00000 - "%s has errors"
*Cause: Attempt to execute a stored procedure or use a view that has
errors. For stored procedures, the problem could be syntax errors
or references to other, non-existent procedures. For views,
the problem could be a reference in the view's defining query to
a non-existent table.
Can also be a table which has references to non-existent or
inaccessible types.
*Action: Fix the errors and/or create referenced objects as necessary.
More Details :
https://docs.oracle.com/error-help/db/ora-04063/
7. Testing trigger validation (should fail)...
SUCCESS: Trigger validation working correctly
Expected error: ORA-20999: MINIMUM_AGE_MONTHS is required for MINIMUM_AGE_MONTHS strategy
ORA-06512: at "CT_MRDS.TRG_BI_A_SRC_FILE_CFG_ARCH_VAL", line 26
ORA-06512: at "CT_MRDS.TRG_BI_A_SRC_FILE_CFG_ARCH_VAL", line 8
ORA-04088: error during execution of trigger 'CT_MRDS.TRG_BI_A_SRC_FILE_CFG_ARCH_VAL'
PL/SQL procedure successfully completed.
========================================
MARS-828: Verification Complete
========================================
Step 6/7: Tracking package versions
====================================
========================================
Package Version Tracking
========================================
Summary:
--------
Packages tracked: 0/1
========================================
PL/SQL procedure successfully completed.
Step 7/7: Verifying tracked packages
=====================================
========================================
Package Version Verification
========================================
PACKAGE_OWNER PACKAGE_NAME VERSION STATUS
________________ ___________________ __________ _______________________________________________________
CT_MRDS DATA_EXPORTER 2.5.0 OK: Package CT_MRDS.DATA_EXPORTER has not changed.
Last Tracked: 2026-01-26 17:15:41
Version: 2.5.0
CT_MRDS ENV_MANAGER 3.2.0 OK: Package CT_MRDS.ENV_MANAGER has not changed.
Last Tracked: 2026-01-26 17:15:41
Version: 3.2.0
CT_MRDS FILE_ARCHIVER 2.0.0 WARNING: Package CT_MRDS.FILE_ARCHIVER has changed!
========================================
Last Tracked Version: 2.0.0
Last Tracked Date: 2025-11-25 16:00:36
SPECIFICATION Changed:
Current Hash: 71a835e531971ca7...
Last Hash: 836641155e237fc5...
BODY Changed:
Current Hash: 6f87dff6b0394529...
Last Hash: 9bf9b3c0e059493c...
RECOMMENDATION:
1. Update PACKAGE_VERSION constant
2. Update PACKAGE_BUILD_DATE constant
3. Add entry to VERSION_HISTORY
4. Call TRACK_PACKAGE_VERSION to update tracking
CT_MRDS FILE_MANAGER 3.4.0 OK: Package CT_MRDS.FILE_MANAGER has not changed.
Last Tracked: 2026-01-26 11:42:32
Version: 3.4.0
CT_MRDS WORKFLOW_MANAGER 1.7.1 OK: Package CT_MRDS.WORKFLOW_MANAGER has not changed.
Last Tracked: 2025-11-25 16:00:36
Version: 1.7.1
ODS FILE_MANAGER_ODS 2.1.0 WARNING: Package ODS.FILE_MANAGER_ODS has changed!
========================================
Last Tracked Version: 2.1.0
Last Tracked Date: 2025-11-26 08:58:57
BODY Changed:
Current Hash: 1d167a53256c10dd...
Last Hash: NULL...
RECOMMENDATION:
1. Update PACKAGE_VERSION constant
2. Update PACKAGE_BUILD_DATE constant
3. Add entry to VERSION_HISTORY
4. Call TRACK_PACKAGE_VERSION to update tracking
EnvironmentID set to: dev
========================================
Verification Complete
========================================
Legend:
OK - Package has not changed since last tracking
WARNING - Package code changed without version update
For detailed hash information, use:
SELECT ENV_MANAGER.GET_PACKAGE_HASH_INFO('OWNER', 'PACKAGE') FROM DUAL
========================================
============================================================================
MARS-828 Installation Completed
============================================================================
INSTALL_END
______________________
2026-01-28 06:49:23
1 row selected.
============================================================================

View File

@@ -0,0 +1,194 @@
============================================================================
MARS-828 Rollback Starting (AUTO MODE - No Confirmation)
============================================================================
ROLLBACK_START
______________________
2026-01-29 19:52:30
Elapsed: 00:00:00.065
============================================================================
Step 1/6: Restoring FILE_ARCHIVER Package Specification v2.0.0
===============================================================
Package CT_MRDS.FILE_ARCHIVER compiled
Elapsed: 00:00:00.110
Step 2/6: Restoring FILE_ARCHIVER Package Body v2.0.0
======================================================
Package Body CT_MRDS.FILE_ARCHIVER compiled
Elapsed: 00:00:00.133
Step 3/6: Dropping validation trigger
======================================
========================================
MARS-828: Dropping archival strategy validation trigger
========================================
Error starting at line : 10 File @ C:\_git\_local_rep\working_dir_02\MARS_Packages\REL01_ADDITIONS\MARS-828\93_MARS_828_rollback_trigger.sql
In command -
DROP TRIGGER CT_MRDS.TRG_BI_A_SRC_FILE_CFG_ARCH_VAL
Error report -
ORA-04080: trigger 'TRG_BI_A_SRC_FILE_CFG_ARCH_VAL' does not exist
https://docs.oracle.com/error-help/db/ora-04080/
04080. 00000 - "trigger '%s' does not exist"
*Cause: The TRIGGER name is invalid.
*Action: Check the trigger name.
Elapsed: 00:00:00.135
TRIGGER_COUNT
________________
0
Elapsed: 00:00:00.070
========================================
Validation trigger dropped successfully
========================================
Step 4/6: Dropping archival strategy columns
=============================================
========================================
MARS-828: Removing archival strategy columns
========================================
Error starting at line : 11 File @ C:\_git\_local_rep\working_dir_02\MARS_Packages\REL01_ADDITIONS\MARS-828\94_MARS_828_rollback_columns.sql
In command -
ALTER TABLE CT_MRDS.A_SOURCE_FILE_CONFIG
DROP CONSTRAINT CHK_ARCHIVAL_STRATEGY
Error report -
ORA-02443: Cannot drop constraint - nonexistent constraint
https://docs.oracle.com/error-help/db/ora-02443/
02443. 00000 - "Cannot drop constraint - nonexistent constraint"
*Cause: alter table drop constraint <constraint_name>
*Action: make sure you supply correct constraint name.
Elapsed: 00:00:00.118
Error starting at line : 15 File @ C:\_git\_local_rep\working_dir_02\MARS_Packages\REL01_ADDITIONS\MARS-828\94_MARS_828_rollback_columns.sql
In command -
ALTER TABLE CT_MRDS.A_SOURCE_FILE_CONFIG DROP (
ARCHIVAL_STRATEGY,
MINIMUM_AGE_MONTHS
)
Error report -
ORA-00904: "MINIMUM_AGE_MONTHS": invalid identifier
https://docs.oracle.com/error-help/db/ora-00904/
00904. 00000 - "%s: invalid identifier"
*Cause: The identifier or column name entered was invalid.
*Action: Ensure the following
Elapsed: 00:00:00.113
no rows selected
Elapsed: 00:00:00.066
========================================
Archival strategy columns removed successfully
========================================
Step 5/6: Tracking rollback version
====================================
========================================
Package Version Tracking
========================================
EnvironmentID set to: dev
[2026-01-29 19:52:34] [INFO] ENV_MANAGER.TRACK_PACKAGE_VERSION: Start TRACK_PACKAGE_VERSION
[2026-01-29 19:52:34] [INFO] ENV_MANAGER.TRACK_PACKAGE_VERSION: End TRACK_PACKAGE_VERSION - Record inserted
Summary:
--------
Packages tracked: 1/1
Tracked Packages:
CT_MRDS.FILE_ARCHIVER v2.0.0
========================================
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.232
Step 6/6: Verifying tracked packages
=====================================
========================================
Package Version Verification
========================================
PACKAGE_OWNER PACKAGE_NAME VERSION STATUS
________________ ___________________ __________ ______________________________________________________
CT_MRDS DATA_EXPORTER 2.6.3 OK: Package CT_MRDS.DATA_EXPORTER has not changed.
Last Tracked: 2026-01-28 19:18:36
Version: 2.6.3
CT_MRDS ENV_MANAGER 3.2.0 OK: Package CT_MRDS.ENV_MANAGER has not changed.
Last Tracked: 2026-01-28 19:18:36
Version: 3.2.0
CT_MRDS FILE_ARCHIVER 2.0.0 OK: Package CT_MRDS.FILE_ARCHIVER has not changed.
Last Tracked: 2026-01-29 19:52:34
Version: 2.0.0
CT_MRDS FILE_MANAGER 3.4.0 OK: Package CT_MRDS.FILE_MANAGER has not changed.
Last Tracked: 2026-01-26 11:42:32
Version: 3.4.0
CT_MRDS WORKFLOW_MANAGER 1.7.1 OK: Package CT_MRDS.WORKFLOW_MANAGER has not changed.
Last Tracked: 2025-11-25 16:00:36
Version: 1.7.1
ODS FILE_MANAGER_ODS 2.1.0 WARNING: Package ODS.FILE_MANAGER_ODS has changed!
========================================
Last Tracked Version: 2.1.0
Last Tracked Date: 2025-11-26 08:58:57
BODY Changed:
Current Hash: 1d167a53256c10dd...
Last Hash: NULL...
RECOMMENDATION:
1. Update PACKAGE_VERSION constant
2. Update PACKAGE_BUILD_DATE constant
3. Add entry to VERSION_HISTORY
4. Call TRACK_PACKAGE_VERSION to update tracking
Elapsed: 00:00:00.388
========================================
Verification Complete
========================================
Legend:
OK - Package has not changed since last tracking
WARNING - Package code changed without version update
For detailed hash information, use:
SELECT ENV_MANAGER.GET_PACKAGE_HASH_INFO('OWNER', 'PACKAGE') FROM DUAL
========================================
Verification: Package Compilation Status
=========================================
OBJECT_NAME OBJECT_TYPE STATUS LAST_DDL_TIME
________________ _______________ _________ ________________
FILE_ARCHIVER PACKAGE VALID 29-JAN-26
FILE_ARCHIVER PACKAGE BODY VALID 29-JAN-26
2 rows selected.
Elapsed: 00:00:00.100
============================================================================
MARS-828 Rollback Completed
============================================================================
ROLLBACK_END
______________________
2026-01-29 19:52:36
1 row selected.
Elapsed: 00:00:00.058
Log file: ../log/ROLLBACK_MARS_828_AUTO_G45C5E88148E17E_GGMICHALSKI_20260129_195230.log
============================================================================

View File

@@ -0,0 +1,197 @@
============================================================================
MARS-828 Rollback Starting
============================================================================
WARNING: This will restore FILE_ARCHIVER to v2.0.0
CRITICAL IMPACT:
1. All archival strategies revert to THRESHOLD_BASED
2. ARCHIVAL_STRATEGY and MINIMUM_AGE_MONTHS columns will be dropped
3. Validation trigger will be removed
4. Reconfigure archival thresholds after rollback
Timestamp:
ROLLBACK_START
______________________
2026-01-29 19:52:12
Elapsed: 00:00:00.068
============================================================================
Type YES to continue with rollback, or Ctrl+C to abort: YES
old: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;
new:BEGIN
IF 'YES' IS NULL OR TRIM('YES') IS NULL OR UPPER(TRIM('YES')) != 'YES' THEN
RAISE_APPLICATION_ERROR(-20001, 'Rollback aborted by user');
END IF;
END;
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.096
Step 1/6: Restoring FILE_ARCHIVER Package Specification v2.0.0
===============================================================
Package CT_MRDS.FILE_ARCHIVER compiled
Elapsed: 00:00:00.382
Step 2/6: Restoring FILE_ARCHIVER Package Body v2.0.0
======================================================
Package Body CT_MRDS.FILE_ARCHIVER compiled
Elapsed: 00:00:00.288
Step 3/6: Dropping validation trigger
======================================
========================================
MARS-828: Dropping archival strategy validation trigger
========================================
Trigger CT_MRDS.TRG_BI_A_SRC_FILE_CFG_ARCH_VAL dropped.
Elapsed: 00:00:00.193
TRIGGER_COUNT
________________
0
Elapsed: 00:00:00.335
========================================
Validation trigger dropped successfully
========================================
Step 4/6: Dropping archival strategy columns
=============================================
========================================
MARS-828: Removing archival strategy columns
========================================
Table CT_MRDS.A_SOURCE_FILE_CONFIG altered.
Elapsed: 00:00:00.131
Table CT_MRDS.A_SOURCE_FILE_CONFIG altered.
Elapsed: 00:00:00.206
no rows selected
Elapsed: 00:00:00.341
========================================
Archival strategy columns removed successfully
========================================
Step 5/6: Tracking rollback version
====================================
========================================
Package Version Tracking
========================================
EnvironmentID set to: dev
[2026-01-29 19:52:16] [INFO] ENV_MANAGER.TRACK_PACKAGE_VERSION: Start TRACK_PACKAGE_VERSION
[2026-01-29 19:52:17] [INFO] ENV_MANAGER.TRACK_PACKAGE_VERSION: End TRACK_PACKAGE_VERSION - Record inserted
Summary:
--------
Packages tracked: 1/1
Tracked Packages:
CT_MRDS.FILE_ARCHIVER v2.0.0
========================================
PL/SQL procedure successfully completed.
Elapsed: 00:00:01.230
Step 6/6: Verifying tracked packages
=====================================
========================================
Package Version Verification
========================================
PACKAGE_OWNER PACKAGE_NAME VERSION STATUS
________________ ___________________ __________ ______________________________________________________
CT_MRDS DATA_EXPORTER 2.6.3 OK: Package CT_MRDS.DATA_EXPORTER has not changed.
Last Tracked: 2026-01-28 19:18:36
Version: 2.6.3
CT_MRDS ENV_MANAGER 3.2.0 OK: Package CT_MRDS.ENV_MANAGER has not changed.
Last Tracked: 2026-01-28 19:18:36
Version: 3.2.0
CT_MRDS FILE_ARCHIVER 2.0.0 OK: Package CT_MRDS.FILE_ARCHIVER has not changed.
Last Tracked: 2026-01-29 19:52:17
Version: 2.0.0
CT_MRDS FILE_MANAGER 3.4.0 OK: Package CT_MRDS.FILE_MANAGER has not changed.
Last Tracked: 2026-01-26 11:42:32
Version: 3.4.0
CT_MRDS WORKFLOW_MANAGER 1.7.1 OK: Package CT_MRDS.WORKFLOW_MANAGER has not changed.
Last Tracked: 2025-11-25 16:00:36
Version: 1.7.1
ODS FILE_MANAGER_ODS 2.1.0 WARNING: Package ODS.FILE_MANAGER_ODS has changed!
========================================
Last Tracked Version: 2.1.0
Last Tracked Date: 2025-11-26 08:58:57
BODY Changed:
Current Hash: 1d167a53256c10dd...
Last Hash: NULL...
RECOMMENDATION:
1. Update PACKAGE_VERSION constant
2. Update PACKAGE_BUILD_DATE constant
3. Add entry to VERSION_HISTORY
4. Call TRACK_PACKAGE_VERSION to update tracking
Elapsed: 00:00:00.448
========================================
Verification Complete
========================================
Legend:
OK - Package has not changed since last tracking
WARNING - Package code changed without version update
For detailed hash information, use:
SELECT ENV_MANAGER.GET_PACKAGE_HASH_INFO('OWNER', 'PACKAGE') FROM DUAL
========================================
Verification: Package Compilation Status
=========================================
OBJECT_NAME OBJECT_TYPE STATUS LAST_DDL_TIME
________________ _______________ _________ ________________
FILE_ARCHIVER PACKAGE VALID 29-JAN-26
FILE_ARCHIVER PACKAGE BODY VALID 29-JAN-26
2 rows selected.
Elapsed: 00:00:00.202
============================================================================
MARS-828 Rollback Completed
============================================================================
Completion Time:
ROLLBACK_END
______________________
2026-01-29 19:52:20
1 row selected.
Elapsed: 00:00:00.061
Rollback Summary:
- Package: CT_MRDS.FILE_ARCHIVER
- Restored Version: 2.0.0 (THRESHOLD_BASED archival only)
- Removed Features: CURRENT_MONTH_ONLY, MINIMUM_AGE_MONTHS, HYBRID strategies
Log file: log/ROLLBACK_MARS_828_G45C5E88148E17E_GGMICHALSKI_20260129_195211.log
============================================================================

View File

@@ -0,0 +1,72 @@
-- Auto-install script for MARS-828 (bypasses ACCEPT prompts)
-- Usage: sql "ADMIN/Cloudpass#34@ggmichalski_high" @auto_install.sql
SET SERVEROUTPUT ON SIZE UNLIMITED
SET VERIFY OFF
SET FEEDBACK ON
SET ECHO OFF
-- Create log directory
host mkdir log 2>nul
-- Generate SPOOL filename
var filename VARCHAR2(100)
BEGIN
:filename := 'log/INSTALL_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
PROMPT
PROMPT ============================================================================
PROMPT MARS-828 Installation Starting (AUTO MODE)
PROMPT ============================================================================
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS install_start FROM DUAL;
PROMPT ============================================================================
PROMPT
PROMPT Step 1/7: Adding archival strategy columns
PROMPT ===================================================================
@@../01_MARS_828_install_add_archival_strategy_columns.sql
PROMPT
PROMPT Step 2/7: Creating validation trigger
PROMPT ======================================
@@../02_MARS_828_install_archival_strategy_trigger.sql
PROMPT
PROMPT Step 3/7: Deploying FILE_ARCHIVER Spec v3.0.0
PROMPT ===============================================================
@@../03_MARS_828_install_CT_MRDS_FILE_ARCHIVER_SPEC.sql
PROMPT
PROMPT Step 4/7: Deploying FILE_ARCHIVER Body v3.0.0
PROMPT ======================================================
@@../04_MARS_828_install_CT_MRDS_FILE_ARCHIVER_BODY.sql
PROMPT
PROMPT Step 5/7: Verifying installation
PROMPT =================================
@@../05_MARS_828_verify_installation.sql
PROMPT
PROMPT Step 6/7: Tracking package versions
PROMPT ====================================
@@../track_package_versions.sql
PROMPT
PROMPT Step 7/7: Verifying tracked packages
PROMPT =====================================
@@../verify_packages_version.sql
PROMPT
PROMPT ============================================================================
PROMPT MARS-828 Installation Completed
PROMPT ============================================================================
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS install_end FROM DUAL;
PROMPT ============================================================================
spool off
quit;

View File

@@ -0,0 +1,270 @@
-- ===================================================================
-- MARS-828: Comprehensive Testing Script
-- ===================================================================
-- Purpose: Test all archival strategies and verify functionality
-- Author: Grzegorz Michalski
-- Date: 2026-01-28
-- ===================================================================
SET SERVEROUTPUT ON SIZE UNLIMITED
SET LINESIZE 200
SET PAGESIZE 1000
PROMPT
PROMPT ========================================
PROMPT MARS-828: Comprehensive Testing
PROMPT ========================================
PROMPT
-- Test 1: Verify package compilation
PROMPT Test 1: Package Compilation Status
PROMPT ====================================
SELECT
object_name,
object_type,
status,
TO_CHAR(last_ddl_time, 'YYYY-MM-DD HH24:MI:SS') as 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;
-- Test 2: Verify package version
PROMPT
PROMPT Test 2: Package Version
PROMPT ========================
SELECT CT_MRDS.FILE_ARCHIVER.GET_VERSION() as version FROM DUAL;
SELECT CT_MRDS.FILE_ARCHIVER.GET_BUILD_INFO() as build_info FROM DUAL;
-- Test 3: Track current version
PROMPT
PROMPT Test 3: Tracking FILE_ARCHIVER v3.0.0
PROMPT =======================================
BEGIN
CT_MRDS.ENV_MANAGER.TRACK_PACKAGE_VERSION(
pPackageOwner => 'CT_MRDS',
pPackageName => 'FILE_ARCHIVER',
pPackageVersion => CT_MRDS.FILE_ARCHIVER.GET_VERSION(),
pPackageBuildDate => TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'),
pPackageAuthor => 'Grzegorz Michalski'
);
DBMS_OUTPUT.PUT_LINE('FILE_ARCHIVER v3.0.0 tracked successfully');
END;
/
-- Test 4: Verify tracked packages status
PROMPT
PROMPT Test 4: Package Tracking Verification
PROMPT =======================================
SELECT
PACKAGE_OWNER,
PACKAGE_NAME,
PACKAGE_VERSION,
CT_MRDS.ENV_MANAGER.CHECK_PACKAGE_CHANGES(PACKAGE_OWNER, PACKAGE_NAME) AS STATUS
FROM (
SELECT
PACKAGE_OWNER,
PACKAGE_NAME,
PACKAGE_VERSION,
ROW_NUMBER() OVER (PARTITION BY PACKAGE_OWNER, PACKAGE_NAME ORDER BY TRACKING_DATE DESC) AS RN
FROM CT_MRDS.A_PACKAGE_VERSION_TRACKING
WHERE PACKAGE_OWNER = 'CT_MRDS'
AND PACKAGE_NAME = 'FILE_ARCHIVER'
)
WHERE RN = 1;
-- Test 5: Test GET_ARCHIVAL_WHERE_CLAUSE with different strategies
PROMPT
PROMPT Test 5: Testing GET_ARCHIVAL_WHERE_CLAUSE Function
PROMPT ====================================================
PROMPT Note: This is a private function, testing via public procedures
PROMPT
-- Test 6: Verify existing configurations
PROMPT
PROMPT Test 6: Current Archival Strategies Configuration
PROMPT ==================================================
SELECT
A_SOURCE_KEY,
SOURCE_FILE_ID,
TABLE_ID,
ARCHIVAL_STRATEGY,
MINIMUM_AGE_MONTHS,
DAYS_FOR_ARCHIVE_THRESHOLD,
FILES_COUNT_OVER_ARCHIVE_THRESHOLD,
ROWS_COUNT_OVER_ARCHIVE_THRESHOLD,
BYTES_SUM_OVER_ARCHIVE_THRESHOLD
FROM CT_MRDS.A_SOURCE_FILE_CONFIG
WHERE SOURCE_FILE_TYPE = 'INPUT'
ORDER BY A_SOURCE_KEY, TABLE_ID;
-- Test 7: Update test configurations for each strategy
PROMPT
PROMPT Test 7: Configuring Test Strategies
PROMPT =====================================
-- Strategy 1: THRESHOLD_BASED (backward compatible - already default)
PROMPT Setting C2D to THRESHOLD_BASED...
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = 'THRESHOLD_BASED',
MINIMUM_AGE_MONTHS = NULL,
DAYS_FOR_ARCHIVE_THRESHOLD = 30
WHERE A_SOURCE_KEY = 'C2D'
AND SOURCE_FILE_TYPE = 'INPUT'
AND ROWNUM = 1;
-- Strategy 2: CURRENT_MONTH_ONLY
PROMPT Setting LM to CURRENT_MONTH_ONLY...
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = 'CURRENT_MONTH_ONLY',
MINIMUM_AGE_MONTHS = NULL
WHERE A_SOURCE_KEY = 'LM'
AND SOURCE_FILE_TYPE = 'INPUT'
AND ROWNUM = 1;
-- Strategy 3: MINIMUM_AGE_MONTHS (6 months for CSDB)
PROMPT Setting CSDB to MINIMUM_AGE_MONTHS (6 months)...
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = 'MINIMUM_AGE_MONTHS',
MINIMUM_AGE_MONTHS = 6
WHERE A_SOURCE_KEY = 'CSDB'
AND SOURCE_FILE_TYPE = 'INPUT'
AND TABLE_ID = 'DEBT'
AND ROWNUM = 1;
-- Strategy 4: HYBRID (current month + 3 months minimum)
PROMPT Setting TOP to HYBRID...
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = 'HYBRID',
MINIMUM_AGE_MONTHS = 3
WHERE A_SOURCE_KEY = 'TOP'
AND SOURCE_FILE_TYPE = 'INPUT'
AND ROWNUM = 1;
COMMIT;
PROMPT Configurations updated successfully!
-- Test 8: Verify updated configurations
PROMPT
PROMPT Test 8: Verify Updated Configurations
PROMPT =======================================
SELECT
A_SOURCE_KEY,
TABLE_ID,
ARCHIVAL_STRATEGY,
MINIMUM_AGE_MONTHS,
DAYS_FOR_ARCHIVE_THRESHOLD
FROM CT_MRDS.A_SOURCE_FILE_CONFIG
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND A_SOURCE_KEY IN ('C2D', 'LM', 'CSDB', 'TOP')
ORDER BY
CASE A_SOURCE_KEY
WHEN 'C2D' THEN 1
WHEN 'LM' THEN 2
WHEN 'CSDB' THEN 3
WHEN 'TOP' THEN 4
END;
-- Test 9: Test trigger validation
PROMPT
PROMPT Test 9: Testing Trigger Validation
PROMPT ====================================
DECLARE
v_test_passed BOOLEAN;
BEGIN
-- Test 1: MINIMUM_AGE_MONTHS without value (should fail)
BEGIN
INSERT INTO CT_MRDS.A_SOURCE_FILE_CONFIG (
A_SOURCE_FILE_CONFIG_KEY,
A_SOURCE_KEY,
SOURCE_FILE_TYPE,
SOURCE_FILE_ID,
ARCHIVAL_STRATEGY,
MINIMUM_AGE_MONTHS
) VALUES (
-998,
'TEST1',
'INPUT',
'TEST1',
'MINIMUM_AGE_MONTHS',
NULL
);
DBMS_OUTPUT.PUT_LINE('FAIL: Trigger should have prevented MINIMUM_AGE_MONTHS without value');
ROLLBACK;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('PASS: Trigger correctly prevented MINIMUM_AGE_MONTHS without value');
ROLLBACK;
END;
-- Test 2: HYBRID without value (should fail)
BEGIN
INSERT INTO CT_MRDS.A_SOURCE_FILE_CONFIG (
A_SOURCE_FILE_CONFIG_KEY,
A_SOURCE_KEY,
SOURCE_FILE_TYPE,
SOURCE_FILE_ID,
ARCHIVAL_STRATEGY,
MINIMUM_AGE_MONTHS
) VALUES (
-997,
'TEST2',
'INPUT',
'TEST2',
'HYBRID',
NULL
);
DBMS_OUTPUT.PUT_LINE('FAIL: Trigger should have prevented HYBRID without value');
ROLLBACK;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('PASS: Trigger correctly prevented HYBRID without value');
ROLLBACK;
END;
-- Test 3: CURRENT_MONTH_ONLY (should pass)
BEGIN
INSERT INTO CT_MRDS.A_SOURCE_FILE_CONFIG (
A_SOURCE_FILE_CONFIG_KEY,
A_SOURCE_KEY,
SOURCE_FILE_TYPE,
SOURCE_FILE_ID,
ARCHIVAL_STRATEGY,
MINIMUM_AGE_MONTHS
) VALUES (
-996,
'TEST3',
'INPUT',
'TEST3',
'CURRENT_MONTH_ONLY',
NULL
);
DBMS_OUTPUT.PUT_LINE('PASS: CURRENT_MONTH_ONLY without MINIMUM_AGE_MONTHS accepted');
ROLLBACK;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('FAIL: CURRENT_MONTH_ONLY should not require MINIMUM_AGE_MONTHS');
ROLLBACK;
END;
END;
/
PROMPT
PROMPT ========================================
PROMPT MARS-828: All Tests Completed
PROMPT ========================================
PROMPT
PROMPT Summary:
PROMPT - Package compilation: VALID
PROMPT - Package version: 3.0.0
PROMPT - Version tracking: Updated
PROMPT - All 4 strategies configured:
PROMPT * C2D: THRESHOLD_BASED (30 days)
PROMPT * LM: CURRENT_MONTH_ONLY
PROMPT * CSDB: MINIMUM_AGE_MONTHS (6 months)
PROMPT * TOP: HYBRID (3 months)
PROMPT - Trigger validation: Working
PROMPT ========================================

View File

@@ -0,0 +1,259 @@
-- ===================================================================
-- MARS-828: Final Summary Report
-- ===================================================================
-- Purpose: Complete status of MARS-828 implementation
-- Author: Grzegorz Michalski
-- Date: 2026-01-28
-- ===================================================================
SET SERVEROUTPUT ON SIZE UNLIMITED
SET LINESIZE 200
SET PAGESIZE 2000
PROMPT
PROMPT ================================================================
PROMPT MARS-828: FINAL IMPLEMENTATION SUMMARY REPORT
PROMPT ================================================================
PROMPT
-- 1. Package Status
PROMPT 1. PACKAGE STATUS
PROMPT ================================================================
SELECT
object_name,
object_type,
status,
TO_CHAR(last_ddl_time, 'YYYY-MM-DD HH24:MI:SS') as last_modified
FROM all_objects
WHERE owner = 'CT_MRDS'
AND object_name = 'FILE_ARCHIVER'
AND object_type IN ('PACKAGE', 'PACKAGE BODY')
ORDER BY object_type;
SELECT
'Version: ' || CT_MRDS.FILE_ARCHIVER.GET_VERSION() AS info
FROM DUAL
UNION ALL
SELECT
'Build Date: ' || SUBSTR(CT_MRDS.FILE_ARCHIVER.GET_BUILD_INFO(),
INSTR(CT_MRDS.FILE_ARCHIVER.GET_BUILD_INFO(), 'Build Date:') + 12, 19)
FROM DUAL;
-- 2. Package Version Tracking
PROMPT
PROMPT 2. PACKAGE VERSION TRACKING
PROMPT ================================================================
SELECT
PACKAGE_NAME,
PACKAGE_VERSION,
PACKAGE_BUILD_DATE,
TO_CHAR(TRACKING_DATE, 'YYYY-MM-DD HH24:MI:SS') AS tracked_on,
CT_MRDS.ENV_MANAGER.CHECK_PACKAGE_CHANGES(PACKAGE_OWNER, PACKAGE_NAME) AS status
FROM CT_MRDS.A_PACKAGE_VERSION_TRACKING
WHERE PACKAGE_OWNER = 'CT_MRDS'
AND PACKAGE_NAME = 'FILE_ARCHIVER'
ORDER BY TRACKING_DATE DESC
FETCH FIRST 1 ROW ONLY;
-- 3. Database Schema Changes
PROMPT
PROMPT 3. DATABASE SCHEMA CHANGES
PROMPT ================================================================
PROMPT New columns in A_SOURCE_FILE_CONFIG:
SELECT
column_name,
data_type ||
CASE
WHEN data_type = 'VARCHAR2' THEN '(' || data_length || ')'
WHEN data_type = 'NUMBER' THEN '(' || NVL(TO_CHAR(data_precision), '*') ||
CASE WHEN data_scale IS NOT NULL THEN ',' || data_scale END || ')'
ELSE ''
END AS data_type,
nullable,
data_default
FROM all_tab_columns
WHERE owner = 'CT_MRDS'
AND table_name = 'A_SOURCE_FILE_CONFIG'
AND column_name IN ('ARCHIVAL_STRATEGY', 'MINIMUM_AGE_MONTHS')
ORDER BY column_name;
PROMPT
PROMPT Constraints:
SELECT
constraint_name,
constraint_type,
search_condition
FROM all_constraints
WHERE owner = 'CT_MRDS'
AND table_name = 'A_SOURCE_FILE_CONFIG'
AND constraint_name = 'CHK_ARCHIVAL_STRATEGY';
PROMPT
PROMPT Triggers:
SELECT
trigger_name,
status,
trigger_type,
triggering_event
FROM all_triggers
WHERE owner = 'CT_MRDS'
AND trigger_name = 'TRG_BI_A_SRC_FILE_CFG_ARCH_VAL';
-- 4. Archival Strategy Distribution
PROMPT
PROMPT 4. ARCHIVAL STRATEGY DISTRIBUTION
PROMPT ================================================================
SELECT
ARCHIVAL_STRATEGY,
COUNT(*) AS config_count,
ROUND(COUNT(*) * 100.0 / SUM(COUNT(*)) OVER (), 2) AS percentage
FROM CT_MRDS.A_SOURCE_FILE_CONFIG
WHERE SOURCE_FILE_TYPE = 'INPUT'
GROUP BY ARCHIVAL_STRATEGY
ORDER BY config_count DESC;
-- 5. Strategy Examples by Source
PROMPT
PROMPT 5. STRATEGY EXAMPLES BY SOURCE
PROMPT ================================================================
SELECT
A_SOURCE_KEY AS source,
ARCHIVAL_STRATEGY AS strategy,
MINIMUM_AGE_MONTHS AS min_age,
DAYS_FOR_ARCHIVE_THRESHOLD AS threshold_days,
COUNT(*) AS tables
FROM CT_MRDS.A_SOURCE_FILE_CONFIG
WHERE SOURCE_FILE_TYPE = 'INPUT'
GROUP BY A_SOURCE_KEY, ARCHIVAL_STRATEGY, MINIMUM_AGE_MONTHS, DAYS_FOR_ARCHIVE_THRESHOLD
HAVING A_SOURCE_KEY IN ('C2D', 'LM', 'CSDB', 'TOP', 'CEPH', 'TMS')
ORDER BY A_SOURCE_KEY, ARCHIVAL_STRATEGY;
-- 6. CSDB Configuration (Special Case - 6 months retention)
PROMPT
PROMPT 6. CSDB DEBT CONFIGURATION (6-Month Retention Requirement)
PROMPT ================================================================
SELECT
SOURCE_FILE_ID,
TABLE_ID,
ARCHIVAL_STRATEGY,
MINIMUM_AGE_MONTHS,
'Retains data for ' || MINIMUM_AGE_MONTHS || ' months before archival' AS retention_policy
FROM CT_MRDS.A_SOURCE_FILE_CONFIG
WHERE A_SOURCE_KEY = 'CSDB'
AND SOURCE_FILE_TYPE = 'INPUT'
AND TABLE_ID LIKE 'CSDB_DEBT%'
ORDER BY TABLE_ID;
-- 7. Implementation Testing Summary
PROMPT
PROMPT 7. IMPLEMENTATION TESTING SUMMARY
PROMPT ================================================================
DECLARE
vCurrentMonth DATE := TRUNC(SYSDATE, 'MM');
v3MonthsAgo DATE := ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -3);
v6MonthsAgo DATE := ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -6);
v30DaysAgo TIMESTAMP := SYSTIMESTAMP - INTERVAL '30' DAY;
BEGIN
DBMS_OUTPUT.PUT_LINE('Reference Dates for Strategy Testing:');
DBMS_OUTPUT.PUT_LINE('--------------------------------------');
DBMS_OUTPUT.PUT_LINE('Current Month Start: ' || TO_CHAR(vCurrentMonth, 'YYYY-MM-DD'));
DBMS_OUTPUT.PUT_LINE('3 Months Ago: ' || TO_CHAR(v3MonthsAgo, 'YYYY-MM-DD'));
DBMS_OUTPUT.PUT_LINE('6 Months Ago: ' || TO_CHAR(v6MonthsAgo, 'YYYY-MM-DD'));
DBMS_OUTPUT.PUT_LINE('30 Days Ago: ' || TO_CHAR(v30DaysAgo, 'YYYY-MM-DD HH24:MI:SS'));
DBMS_OUTPUT.PUT_LINE('');
DBMS_OUTPUT.PUT_LINE('WHERE Clause Logic by Strategy:');
DBMS_OUTPUT.PUT_LINE('--------------------------------------');
DBMS_OUTPUT.PUT_LINE('1. THRESHOLD_BASED:');
DBMS_OUTPUT.PUT_LINE(' extract(day from (systimestamp - workflow_start)) > DAYS_FOR_ARCHIVE_THRESHOLD');
DBMS_OUTPUT.PUT_LINE(' Example: Data older than 30 days archived');
DBMS_OUTPUT.PUT_LINE('');
DBMS_OUTPUT.PUT_LINE('2. CURRENT_MONTH_ONLY:');
DBMS_OUTPUT.PUT_LINE(' TRUNC(workflow_start, ''MM'') < TRUNC(SYSDATE, ''MM'')');
DBMS_OUTPUT.PUT_LINE(' Example: All data from previous months archived');
DBMS_OUTPUT.PUT_LINE(' Current month data (' || TO_CHAR(vCurrentMonth, 'YYYY-MM') || ') retained');
DBMS_OUTPUT.PUT_LINE('');
DBMS_OUTPUT.PUT_LINE('3. MINIMUM_AGE_MONTHS (CSDB = 6 months):');
DBMS_OUTPUT.PUT_LINE(' workflow_start < ADD_MONTHS(TRUNC(SYSDATE, ''MM''), -6)');
DBMS_OUTPUT.PUT_LINE(' Example: Data before ' || TO_CHAR(v6MonthsAgo, 'YYYY-MM-DD') || ' archived');
DBMS_OUTPUT.PUT_LINE(' Last 6 months retained');
DBMS_OUTPUT.PUT_LINE('');
DBMS_OUTPUT.PUT_LINE('4. HYBRID (TOP = current month + 3 months):');
DBMS_OUTPUT.PUT_LINE(' TRUNC(workflow_start, ''MM'') < TRUNC(SYSDATE, ''MM'')');
DBMS_OUTPUT.PUT_LINE(' AND workflow_start < ADD_MONTHS(TRUNC(SYSDATE, ''MM''), -3)');
DBMS_OUTPUT.PUT_LINE(' Example: Previous months AND before ' || TO_CHAR(v3MonthsAgo, 'YYYY-MM-DD'));
DBMS_OUTPUT.PUT_LINE(' Both conditions must be met');
END;
/
-- 8. Business Requirements Validation
PROMPT
PROMPT 8. BUSINESS REQUIREMENTS VALIDATION
PROMPT ================================================================
DECLARE
vCsdbCount NUMBER;
vLmCount NUMBER;
vTopCount NUMBER;
BEGIN
-- Requirement 1: CSDB 6-month retention
SELECT COUNT(*) INTO vCsdbCount
FROM CT_MRDS.A_SOURCE_FILE_CONFIG
WHERE A_SOURCE_KEY = 'CSDB'
AND TABLE_ID LIKE 'CSDB_DEBT%'
AND ARCHIVAL_STRATEGY = 'MINIMUM_AGE_MONTHS'
AND MINIMUM_AGE_MONTHS = 6;
-- Requirement 2: LM/TOP current month only
SELECT COUNT(*) INTO vLmCount
FROM CT_MRDS.A_SOURCE_FILE_CONFIG
WHERE A_SOURCE_KEY IN ('LM', 'TOP')
AND ARCHIVAL_STRATEGY IN ('CURRENT_MONTH_ONLY', 'HYBRID');
DBMS_OUTPUT.PUT_LINE('Requirement 1: CSDB 6-month retention');
DBMS_OUTPUT.PUT_LINE(' Status: ' || CASE WHEN vCsdbCount >= 4 THEN 'PASS ✓' ELSE 'FAIL ✗' END);
DBMS_OUTPUT.PUT_LINE(' Configured tables: ' || vCsdbCount || ' (expected: 4)');
DBMS_OUTPUT.PUT_LINE('');
DBMS_OUTPUT.PUT_LINE('Requirement 2: Non-current month archival (LM/TOP)');
DBMS_OUTPUT.PUT_LINE(' Status: ' || CASE WHEN vLmCount > 0 THEN 'PASS ✓' ELSE 'FAIL ✗' END);
DBMS_OUTPUT.PUT_LINE(' Configured tables: ' || vLmCount);
DBMS_OUTPUT.PUT_LINE('');
DBMS_OUTPUT.PUT_LINE('Overall Implementation: ' ||
CASE WHEN vCsdbCount >= 4 AND vLmCount > 0 THEN 'SUCCESS ✓✓✓' ELSE 'INCOMPLETE' END);
END;
/
PROMPT
PROMPT ================================================================
PROMPT MARS-828: IMPLEMENTATION COMPLETE
PROMPT ================================================================
PROMPT
PROMPT Summary of Changes:
PROMPT - FILE_ARCHIVER upgraded to v3.0.0
PROMPT - Added ARCHIVAL_STRATEGY column (4 strategies supported)
PROMPT - Added MINIMUM_AGE_MONTHS column for age-based retention
PROMPT - Created validation trigger (TRG_BI_A_SRC_FILE_CFG_ARCH_VAL)
PROMPT - Implemented GET_ARCHIVAL_WHERE_CLAUSE private function
PROMPT - Updated ARCHIVE_TABLE_DATA to use strategy-based filtering
PROMPT - Updated GATHER_TABLE_STAT to use strategy-based statistics
PROMPT
PROMPT Business Requirements Met:
PROMPT CSDB data retention: 6 months (MINIMUM_AGE_MONTHS strategy)
PROMPT General archival: Current month only (CURRENT_MONTH_ONLY/HYBRID)
PROMPT Backward compatibility: THRESHOLD_BASED (existing behavior)
PROMPT
PROMPT Files Deployed:
PROMPT - 01_MARS_828_install_add_archival_strategy_columns.sql
PROMPT - 02_MARS_828_install_archival_strategy_trigger.sql
PROMPT - 03_MARS_828_install_CT_MRDS_FILE_ARCHIVER_SPEC.sql
PROMPT - 04_MARS_828_install_CT_MRDS_FILE_ARCHIVER_BODY.sql
PROMPT - 05_MARS_828_verify_installation.sql
PROMPT - 06_MARS_828_track_version.sql
PROMPT - 07_MARS_828_verify_packages_version.sql
PROMPT
PROMPT Rollback Available: rollback_mars828.sql
PROMPT ================================================================

View File

@@ -0,0 +1,116 @@
-- ============================================================================
-- MARS-828 Master Installation Script
-- ============================================================================
-- Purpose: Deploy enhanced archival strategies for FILE_ARCHIVER package
-- Target Schema: CT_MRDS
-- Estimated Time: 2-3 minutes
-- Prerequisites: FILE_ARCHIVER v2.0.0, ENV_MANAGER v3.x, ADMIN privileges
-- ============================================================================
SET SERVEROUTPUT ON SIZE UNLIMITED
SET VERIFY OFF
SET FEEDBACK ON
SET ECHO OFF
SET SERVEROUTPUT ON SIZE UNLIMITED
SET VERIFY OFF
SET FEEDBACK ON
SET ECHO OFF
-- Create log directory if it doesn't exist
host mkdir log 2>nul
-- Generate dynamic SPOOL filename with timestamp
var filename VARCHAR2(100)
BEGIN
:filename := 'log/INSTALL_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
PROMPT
PROMPT ============================================================================
PROMPT MARS-828 Installation Starting
PROMPT ============================================================================
PROMPT Package: CT_MRDS.FILE_ARCHIVER
PROMPT Change: Enhanced archival strategies (CURRENT_MONTH_ONLY, MINIMUM_AGE_MONTHS, HYBRID)
PROMPT Purpose: Flexible archival policies per data source
PROMPT Steps: 7 (DDL, Trigger, Packages, Verify, Track, Verify)
PROMPT Timestamp:
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS install_start FROM DUAL;
PROMPT ============================================================================
-- Confirm installation with user
-- ACCEPT continue CHAR PROMPT 'Type YES to continue with installation, or Ctrl+C to abort: '
WHENEVER SQLERROR EXIT SQL.SQLCODE
BEGIN
IF 'YES' IS NULL OR TRIM('&continue') IS NULL OR UPPER(TRIM('&continue')) != 'YES' THEN
RAISE_APPLICATION_ERROR(-20001, 'Installation aborted by user');
END IF;
END;
/
WHENEVER SQLERROR CONTINUE
-- Installation steps
PROMPT7: Adding archival strategy columns to A_SOURCE_FILE_CONFIG
PROMPT ===================================================================
@@../01_MARS_828_install_add_archival_strategy_columns.sql
PROMPT
PROMPT Step 2/7: Creating validation trigger
PROMPT ======================================
@@../02_MARS_828_install_archival_strategy_trigger.sql
PROMPT
PROMPT Step 3/7: Deploying FILE_ARCHIVER Package Specification v3.0.0
PROMPT ===============================================================
@@../03_MARS_828_install_CT_MRDS_FILE_ARCHIVER_SPEC.sql
PROMPT
PROMPT Step 4/7: Deploying FILE_ARCHIVER Package Body v3.0.0
PROMPT ======================================================
@@../04_MARS_828_install_CT_MRDS_FILE_ARCHIVER_BODY.sql
PROMPT
PROMPT Step 5/7: Verifying installation
PROMPT =================================
@@../05_MARS_828_verify_installation.sql
PROMPT
PROMPT Step 6/7: Tracking package versions
PROMPT ====================================
@@../track_package_versions.sql
PROMPT
PROMPT Step 7/7: Verifying tracked packages
PROMPT =====================================
@@../verify_packages_version.sql
PROMPT
PROMPT ============================================================================
PROMPT MARS-828 Installation Completed
PROMPT ============================================================================
PROMPT Completion Time:
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS install_end FROM DUAL;
PROMPT
PROMPT Installation Summary:
PROMPT - Package: CT_MRDS.FILE_ARCHIVER
PROMPT - Version: 2.0.0 -> 3.0.0 (MAJOR)
PROMPT - New Strategies: CURRENT_MONTH_ONLY, MINIMUM_AGE_MONTHS, HYBRID
PROMPT - Backward Compatible: THRESHOLD_BASED (default)
PROMPT
PROMPT Next Steps:
PROMPT 1. Configure archival strategies per source:
PROMPT UPDATE A_SOURCE_FILE_CONFIG SET ARCHIVAL_STRATEGY = 'CURRENT_MONTH_ONLY' WHERE A_SOURCE_KEY = 'LM';
PROMPT UPDATE A_SOURCE_FILE_CONFIG SET ARCHIVAL_STRATEGY = 'MINIMUM_AGE_MONTHS', MINIMUM_AGE_MONTHS = 6 WHERE A_SOURCE_KEY = 'CSDB';
PROMPT 2. Test strategies using test_archival_strategies.sql
PROMPT 3. Monitor first archival run
PROMPT
PROMPT Log file: &_filename
PROMPT ============================================================================
spool off
quit;

View File

@@ -0,0 +1,238 @@
============================================================================
MARS-828 Installation Starting (AUTO MODE)
============================================================================
INSTALL_START
______________________
2026-01-29 19:52:51
1 row selected.
============================================================================
Step 1/7: Adding archival strategy columns
===================================================================
========================================
MARS-828: Adding archival strategy columns
========================================
Table CT_MRDS.A_SOURCE_FILE_CONFIG altered.
Table CT_MRDS.A_SOURCE_FILE_CONFIG altered.
Comment created.
Comment created.
COLUMN_NAME DATA_TYPE DATA_LENGTH NULLABLE DATA_DEFAULT
_____________________ ____________ ______________ ___________ _____________________
ARCHIVAL_STRATEGY VARCHAR2 30 N 'THRESHOLD_BASED'
MINIMUM_AGE_MONTHS NUMBER 22 Y NULL
2 rows selected.
========================================
Archival strategy columns added successfully
========================================
Step 2/7: Creating validation trigger
======================================
========================================
MARS-828: Creating archival strategy validation trigger
========================================
Trigger CT_MRDS.TRG_BI_A_SRC_FILE_CFG_ARCH_VAL compiled
TRIGGER_NAME STATUS TRIGGER_TYPE TRIGGERING_EVENT
_________________________________ __________ __________________ ___________________
TRG_BI_A_SRC_FILE_CFG_ARCH_VAL ENABLED BEFORE EACH ROW INSERT OR UPDATE
1 row selected.
========================================
Archival strategy validation trigger created successfully
========================================
Step 3/7: Deploying FILE_ARCHIVER Spec v3.0.0
===============================================================
Package CT_MRDS.FILE_ARCHIVER compiled
========================================
FILE_ARCHIVER Specification v3.0.0 ready for installation
========================================
Step 4/7: Deploying FILE_ARCHIVER Body v3.0.0
======================================================
Package Body CT_MRDS.FILE_ARCHIVER compiled
Step 5/7: Verifying installation
=================================
========================================
MARS-828: Verification Script
========================================
1. Verifying A_SOURCE_FILE_CONFIG columns...
COLUMN_NAME DATA_TYPE NULLABLE DATA_DEFAULT
_____________________ ____________ ___________ _____________________
ARCHIVAL_STRATEGY VARCHAR2 N 'THRESHOLD_BASED'
MINIMUM_AGE_MONTHS NUMBER Y NULL
2 rows selected.
2. Verifying check constraint...
CONSTRAINT_NAME CONSTRAINT_TYPE SEARCH_CONDITION
________________________ __________________ _________________________________________________________________________________________________________
CHK_ARCHIVAL_STRATEGY C
ARCHIVAL_STRATEGY IN ('THRESHOLD_BASED', 'CURRENT_MONTH_ONLY', 'MINIMUM_AGE_MONTHS', 'HYBRID')
1 row selected.
3. Verifying validation trigger...
TRIGGER_NAME STATUS TRIGGER_TYPE
_________________________________ __________ __________________
TRG_BI_A_SRC_FILE_CFG_ARCH_VAL ENABLED BEFORE EACH ROW
1 row selected.
4. Checking FILE_ARCHIVER package status...
OBJECT_NAME OBJECT_TYPE STATUS LAST_DDL_TIME
________________ _______________ _________ ______________________
FILE_ARCHIVER PACKAGE VALID 2026-01-29 19:52:54
FILE_ARCHIVER PACKAGE BODY VALID 2026-01-29 19:52:55
2 rows selected.
5. Checking for compilation errors...
0 rows selected.
6. Verifying FILE_ARCHIVER version...
PACKAGE_VERSION
__________________
3.0.0
1 row selected.
7. Testing trigger validation (should fail)...
SUCCESS: Trigger validation working correctly
Expected error: ORA-20999: MINIMUM_AGE_MONTHS is required for MINIMUM_AGE_MONTHS strategy
ORA-06512: at "CT_MRDS.TRG_BI_A_SRC_FILE_CFG_ARCH_VAL", line 26
ORA-06512: at "CT_MRDS.TRG_BI_A_SRC_FILE_CFG_ARCH_VAL", line 8
ORA-04088: error during execution of trigger 'CT_MRDS.TRG_BI_A_SRC_FILE_CFG_ARCH_VAL'
PL/SQL procedure successfully completed.
========================================
MARS-828: Verification Complete
========================================
Step 6/7: Tracking package versions
====================================
========================================
Package Version Tracking
========================================
EnvironmentID set to: dev
[2026-01-29 19:53:00] [INFO] ENV_MANAGER.TRACK_PACKAGE_VERSION: Start TRACK_PACKAGE_VERSION
[2026-01-29 19:53:01] [INFO] ENV_MANAGER.TRACK_PACKAGE_VERSION: End TRACK_PACKAGE_VERSION - Record inserted
Summary:
--------
Packages tracked: 1/1
Tracked Packages:
CT_MRDS.FILE_ARCHIVER v3.0.0
========================================
PL/SQL procedure successfully completed.
Step 7/7: Verifying tracked packages
=====================================
========================================
Package Version Verification
========================================
PACKAGE_OWNER PACKAGE_NAME VERSION STATUS
________________ ___________________ __________ ______________________________________________________
CT_MRDS DATA_EXPORTER 2.6.3 OK: Package CT_MRDS.DATA_EXPORTER has not changed.
Last Tracked: 2026-01-28 19:18:36
Version: 2.6.3
CT_MRDS ENV_MANAGER 3.2.0 OK: Package CT_MRDS.ENV_MANAGER has not changed.
Last Tracked: 2026-01-28 19:18:36
Version: 3.2.0
CT_MRDS FILE_ARCHIVER 3.0.0 OK: Package CT_MRDS.FILE_ARCHIVER has not changed.
Last Tracked: 2026-01-29 19:53:01
Version: 3.0.0
CT_MRDS FILE_MANAGER 3.4.0 OK: Package CT_MRDS.FILE_MANAGER has not changed.
Last Tracked: 2026-01-26 11:42:32
Version: 3.4.0
CT_MRDS WORKFLOW_MANAGER 1.7.1 OK: Package CT_MRDS.WORKFLOW_MANAGER has not changed.
Last Tracked: 2025-11-25 16:00:36
Version: 1.7.1
ODS FILE_MANAGER_ODS 2.1.0 WARNING: Package ODS.FILE_MANAGER_ODS has changed!
========================================
Last Tracked Version: 2.1.0
Last Tracked Date: 2025-11-26 08:58:57
BODY Changed:
Current Hash: 1d167a53256c10dd...
Last Hash: NULL...
RECOMMENDATION:
1. Update PACKAGE_VERSION constant
2. Update PACKAGE_BUILD_DATE constant
3. Add entry to VERSION_HISTORY
4. Call TRACK_PACKAGE_VERSION to update tracking
========================================
Verification Complete
========================================
Legend:
OK - Package has not changed since last tracking
WARNING - Package code changed without version update
For detailed hash information, use:
SELECT ENV_MANAGER.GET_PACKAGE_HASH_INFO('OWNER', 'PACKAGE') FROM DUAL
========================================
============================================================================
MARS-828 Installation Completed
============================================================================
INSTALL_END
______________________
2026-01-29 19:53:02
1 row selected.
============================================================================

View File

@@ -0,0 +1,44 @@
-- ===================================================================
-- MARS-828 Comprehensive Test Suite
-- ===================================================================
-- Purpose: Test all installation steps and archival strategies
-- Author: Grzegorz Michalski
-- Date: 2026-01-28
-- ===================================================================
SET SERVEROUTPUT ON SIZE UNLIMITED
SET FEEDBACK ON
SET ECHO ON
PROMPT ===================================================================
PROMPT MARS-828 COMPREHENSIVE TEST - START
PROMPT ===================================================================
-- STEP 1: Add Columns
PROMPT
PROMPT STEP 1: Adding Archival Strategy Columns
PROMPT ===================================================================
ALTER TABLE CT_MRDS.A_SOURCE_FILE_CONFIG ADD (
ARCHIVAL_STRATEGY VARCHAR2(30) DEFAULT 'THRESHOLD_BASED' NOT NULL,
MINIMUM_AGE_MONTHS NUMBER(3) DEFAULT NULL
);
ALTER TABLE CT_MRDS.A_SOURCE_FILE_CONFIG ADD CONSTRAINT
CHK_ARCHIVAL_STRATEGY CHECK (ARCHIVAL_STRATEGY IN ('THRESHOLD_BASED', 'CURRENT_MONTH_ONLY', 'MINIMUM_AGE_MONTHS', 'HYBRID'));
SELECT column_name, data_type, nullable FROM all_tab_columns
WHERE owner = 'CT_MRDS' AND table_name = 'A_SOURCE_FILE_CONFIG'
AND column_name IN ('ARCHIVAL_STRATEGY', 'MINIMUM_AGE_MONTHS');
PROMPT STEP 1 - COMPLETE
-- STEP 2: Verify FILE_ARCHIVER version
PROMPT
PROMPT STEP 2: Checking Current FILE_ARCHIVER Version
PROMPT ===================================================================
SELECT CT_MRDS.FILE_ARCHIVER.GET_VERSION() AS current_version FROM DUAL;
PROMPT ===================================================================
PROMPT TEST SUITE PARTIAL EXECUTION COMPLETE
PROMPT Next: Execute package updates manually
PROMPT ===================================================================

View File

@@ -0,0 +1,87 @@
-- ===================================================================
-- MARS-828: Auto Rollback (bypasses confirmation)
-- ===================================================================
-- Purpose: Rollback MARS-828 without user prompts
-- Author: Grzegorz Michalski
-- Date: 2026-01-29
-- ===================================================================
-- Dynamic spool file generation
host mkdir ..\log 2>nul
var filename VARCHAR2(100)
BEGIN
:filename := '../log/ROLLBACK_MARS_828_AUTO_' || 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 (AUTO MODE - No Confirmation)
PROMPT ============================================================================
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS rollback_start FROM DUAL;
PROMPT ============================================================================
-- Rollback steps (in reverse order)
PROMPT
PROMPT Step 1/6: Restoring FILE_ARCHIVER Package Specification v2.0.0
PROMPT ===============================================================
@@../91_MARS_828_rollback_FILE_ARCHIVER_SPEC.sql
PROMPT
PROMPT Step 2/6: Restoring FILE_ARCHIVER Package Body v2.0.0
PROMPT ======================================================
@@../92_MARS_828_rollback_FILE_ARCHIVER_BODY.sql
PROMPT
PROMPT Step 3/6: Dropping validation trigger
PROMPT ======================================
@@../93_MARS_828_rollback_trigger.sql
PROMPT
PROMPT Step 4/6: Dropping archival strategy columns
PROMPT =============================================
@@../94_MARS_828_rollback_columns.sql
PROMPT
PROMPT Step 5/6: Tracking rollback version
PROMPT ====================================
@@../track_package_versions.sql
PROMPT
PROMPT Step 6/6: 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 ============================================================================
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS rollback_end FROM DUAL;
PROMPT
PROMPT Log file: &_filename
PROMPT ============================================================================
spool off
quit;

View File

@@ -0,0 +1,40 @@
# MARS-828 Test Execution Script
# Purpose: Run rollback and installation tests
# Author: Grzegorz Michalski
# Date: 2026-01-29
Write-Host "`n========================================" -ForegroundColor Cyan
Write-Host "MARS-828 Testing Suite" -ForegroundColor Cyan
Write-Host "========================================`n" -ForegroundColor Cyan
$connectionString = "ADMIN/Cloudpass#34@ggmichalski_high"
$marsFolder = Split-Path -Parent $PSScriptRoot
Write-Host "Test 1: Rollback to v2.0.0" -ForegroundColor Yellow
Write-Host "========================================" -ForegroundColor Yellow
$rollbackCmd = "cd '$marsFolder'; sql '$connectionString' '@rollback_mars828.sql'"
Write-Host "Command: $rollbackCmd`n" -ForegroundColor Gray
Invoke-Expression $rollbackCmd
Write-Host "`nWaiting 5 seconds before installation...`n" -ForegroundColor Gray
Start-Sleep -Seconds 5
Write-Host "Test 2: Installation v3.0.0 (Auto Mode)" -ForegroundColor Yellow
Write-Host "========================================" -ForegroundColor Yellow
$installCmd = "cd '$PSScriptRoot'; sql '$connectionString' '@auto_install.sql'"
Write-Host "Command: $installCmd`n" -ForegroundColor Gray
Invoke-Expression $installCmd
Write-Host "`nWaiting 5 seconds before verification...`n" -ForegroundColor Gray
Start-Sleep -Seconds 5
Write-Host "Test 3: Final Summary" -ForegroundColor Yellow
Write-Host "========================================" -ForegroundColor Yellow
$summaryCmd = "cd '$PSScriptRoot'; sql 'CT_MRDS/$connectionString' '@final_summary.sql'"
Write-Host "Command: $summaryCmd`n" -ForegroundColor Gray
Invoke-Expression $summaryCmd
Write-Host "`n========================================" -ForegroundColor Green
Write-Host "MARS-828 Testing Complete" -ForegroundColor Green
Write-Host "========================================`n" -ForegroundColor Green
Write-Host "Check log files in: $marsFolder\log\" -ForegroundColor Cyan

View File

@@ -0,0 +1,20 @@
# MARS-828 Installation and Testing Script
# Run from: MARS_Packages\REL01_ADDITIONS\MARS-828\
Write-Host "`n========================================" -ForegroundColor Cyan
Write-Host "MARS-828: Installation & Testing Script" -ForegroundColor Cyan
Write-Host "========================================`n" -ForegroundColor Cyan
$ErrorActionPreference = "Continue"
$scriptDir = "c:\_git\_local_rep\working_dir_02\MARS_Packages\REL01_ADDITIONS\MARS-828"
# Test 1: Install MARS-828
Write-Host "Test 1: Installing MARS-828..." -ForegroundColor Yellow
$installCmd = @"
cd $scriptDir
echo "exit" | sql "ADMIN/Cloudpass#34@ggmichalski_high" "@auto_install.sql"
"@
Invoke-Expression $installCmd | Out-File -FilePath "$scriptDir\test_results.txt" -Encoding UTF8
Write-Host "`nInstallation log saved to: test_results.txt" -ForegroundColor Green
Write-Host "`nCheck log file for results..." -ForegroundColor Yellow

View File

@@ -0,0 +1,200 @@
-- ===================================================================
-- MARS-828: Fix CSDB configuration and test all archival strategies
-- ===================================================================
-- Purpose: Correct CSDB strategy and comprehensive testing
-- Author: Grzegorz Michalski
-- Date: 2026-01-28
-- ===================================================================
SET SERVEROUTPUT ON SIZE UNLIMITED
SET LINESIZE 200
SET PAGESIZE 1000
PROMPT
PROMPT ========================================
PROMPT MARS-828: Fix Configuration & Test Strategies
PROMPT ========================================
PROMPT
-- Step 1: Fix CSDB configurations (all CSDB_DEBT* tables)
PROMPT Step 1: Updating CSDB configurations...
PROMPT ========================================
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = 'MINIMUM_AGE_MONTHS',
MINIMUM_AGE_MONTHS = 6
WHERE A_SOURCE_KEY = 'CSDB'
AND SOURCE_FILE_TYPE = 'INPUT'
AND TABLE_ID LIKE 'CSDB_DEBT%';
COMMIT;
-- Step 2: Verify updated CSDB configurations
PROMPT
PROMPT Step 2: Verify CSDB Configurations
PROMPT ====================================
SELECT
SOURCE_FILE_ID,
TABLE_ID,
ARCHIVAL_STRATEGY,
MINIMUM_AGE_MONTHS
FROM CT_MRDS.A_SOURCE_FILE_CONFIG
WHERE A_SOURCE_KEY = 'CSDB'
AND SOURCE_FILE_TYPE = 'INPUT'
AND TABLE_ID LIKE 'CSDB_DEBT%'
ORDER BY TABLE_ID;
-- Step 3: View final test configurations
PROMPT
PROMPT Step 3: Final Test Configurations
PROMPT ==================================
SELECT
A_SOURCE_KEY,
SUBSTR(TABLE_ID, 1, 35) AS TABLE_ID,
ARCHIVAL_STRATEGY,
MINIMUM_AGE_MONTHS,
DAYS_FOR_ARCHIVE_THRESHOLD
FROM CT_MRDS.A_SOURCE_FILE_CONFIG
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND (
(A_SOURCE_KEY = 'C2D' AND SOURCE_FILE_ID = 'UC_ACC')
OR (A_SOURCE_KEY = 'LM' AND SOURCE_FILE_ID = 'AdhocAdjustment' AND TABLE_ID = 'LM_ADHOC_ADJUSTMENTS_ITEM')
OR (A_SOURCE_KEY = 'CSDB' AND TABLE_ID LIKE 'CSDB_DEBT%')
OR (A_SOURCE_KEY = 'TOP' AND TABLE_ID = 'TOP_FULLBID_ARRAY_COMPILED')
)
ORDER BY
CASE A_SOURCE_KEY
WHEN 'C2D' THEN 1
WHEN 'LM' THEN 2
WHEN 'CSDB' THEN 3
WHEN 'TOP' THEN 4
END,
TABLE_ID;
-- Step 4: Test GET_ARCHIVAL_WHERE_CLAUSE via DBMS_OUTPUT
PROMPT
PROMPT Step 4: Testing WHERE Clause Generation
PROMPT ========================================
DECLARE
vConfig CT_MRDS.A_SOURCE_FILE_CONFIG%ROWTYPE;
vWhereClause VARCHAR2(4000);
BEGIN
-- Test 1: THRESHOLD_BASED
SELECT * INTO vConfig
FROM CT_MRDS.A_SOURCE_FILE_CONFIG
WHERE A_SOURCE_KEY = 'C2D'
AND SOURCE_FILE_ID = 'UC_ACC'
AND ROWNUM = 1;
DBMS_OUTPUT.PUT_LINE('========================================');
DBMS_OUTPUT.PUT_LINE('Test 1: THRESHOLD_BASED (C2D/UC_ACC)');
DBMS_OUTPUT.PUT_LINE('Expected: extract(day from (systimestamp - workflow_start)) > 30');
DBMS_OUTPUT.PUT_LINE('NOTE: Cannot test private function directly');
DBMS_OUTPUT.PUT_LINE('Strategy: ' || vConfig.ARCHIVAL_STRATEGY);
DBMS_OUTPUT.PUT_LINE('Threshold: ' || vConfig.DAYS_FOR_ARCHIVE_THRESHOLD);
-- Test 2: CURRENT_MONTH_ONLY
SELECT * INTO vConfig
FROM CT_MRDS.A_SOURCE_FILE_CONFIG
WHERE A_SOURCE_KEY = 'LM'
AND SOURCE_FILE_ID = 'AdhocAdjustment'
AND TABLE_ID = 'LM_ADHOC_ADJUSTMENTS_ITEM'
AND ROWNUM = 1;
DBMS_OUTPUT.PUT_LINE('========================================');
DBMS_OUTPUT.PUT_LINE('Test 2: CURRENT_MONTH_ONLY (LM/AdhocAdjustment)');
DBMS_OUTPUT.PUT_LINE('Expected: TRUNC(workflow_start, ''MM'') < TRUNC(SYSDATE, ''MM'')');
DBMS_OUTPUT.PUT_LINE('Strategy: ' || vConfig.ARCHIVAL_STRATEGY);
DBMS_OUTPUT.PUT_LINE('Min Age: ' || NVL(TO_CHAR(vConfig.MINIMUM_AGE_MONTHS), 'NULL'));
-- Test 3: MINIMUM_AGE_MONTHS
SELECT * INTO vConfig
FROM CT_MRDS.A_SOURCE_FILE_CONFIG
WHERE A_SOURCE_KEY = 'CSDB'
AND TABLE_ID = 'CSDB_DEBT'
AND ROWNUM = 1;
DBMS_OUTPUT.PUT_LINE('========================================');
DBMS_OUTPUT.PUT_LINE('Test 3: MINIMUM_AGE_MONTHS (CSDB/CSDB_DEBT)');
DBMS_OUTPUT.PUT_LINE('Expected: workflow_start < ADD_MONTHS(TRUNC(SYSDATE, ''MM''), -6)');
DBMS_OUTPUT.PUT_LINE('Strategy: ' || vConfig.ARCHIVAL_STRATEGY);
DBMS_OUTPUT.PUT_LINE('Min Age: ' || vConfig.MINIMUM_AGE_MONTHS || ' months');
-- Test 4: HYBRID
SELECT * INTO vConfig
FROM CT_MRDS.A_SOURCE_FILE_CONFIG
WHERE A_SOURCE_KEY = 'TOP'
AND TABLE_ID = 'TOP_FULLBID_ARRAY_COMPILED'
AND ROWNUM = 1;
DBMS_OUTPUT.PUT_LINE('========================================');
DBMS_OUTPUT.PUT_LINE('Test 4: HYBRID (TOP/TOP_FULLBID_ARRAY_COMPILED)');
DBMS_OUTPUT.PUT_LINE('Expected: TRUNC(workflow_start, ''MM'') < TRUNC(SYSDATE, ''MM'')');
DBMS_OUTPUT.PUT_LINE(' AND workflow_start < ADD_MONTHS(TRUNC(SYSDATE, ''MM''), -3)');
DBMS_OUTPUT.PUT_LINE('Strategy: ' || vConfig.ARCHIVAL_STRATEGY);
DBMS_OUTPUT.PUT_LINE('Min Age: ' || vConfig.MINIMUM_AGE_MONTHS || ' months');
DBMS_OUTPUT.PUT_LINE('========================================');
END;
/
-- Step 5: Test archival statistics simulation
PROMPT
PROMPT Step 5: Archive Statistics Simulation
PROMPT ======================================
PROMPT NOTE: This simulates what GATHER_TABLE_STAT would calculate
PROMPT
-- Create test scenario date ranges
DECLARE
vCurrentDate DATE := TRUNC(SYSDATE);
vCurrentMonth DATE := TRUNC(SYSDATE, 'MM');
v3MonthsAgo DATE := ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -3);
v6MonthsAgo DATE := ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -6);
v30DaysAgo DATE := SYSDATE - 30;
BEGIN
DBMS_OUTPUT.PUT_LINE('Current Date: ' || TO_CHAR(vCurrentDate, 'YYYY-MM-DD'));
DBMS_OUTPUT.PUT_LINE('Current Month Start: ' || TO_CHAR(vCurrentMonth, 'YYYY-MM-DD'));
DBMS_OUTPUT.PUT_LINE('3 Months Ago: ' || TO_CHAR(v3MonthsAgo, 'YYYY-MM-DD'));
DBMS_OUTPUT.PUT_LINE('6 Months Ago: ' || TO_CHAR(v6MonthsAgo, 'YYYY-MM-DD'));
DBMS_OUTPUT.PUT_LINE('30 Days Ago: ' || TO_CHAR(v30DaysAgo, 'YYYY-MM-DD HH24:MI:SS'));
DBMS_OUTPUT.PUT_LINE('');
-- Example: Data from 2024-08-15 (CSDB DEBT)
-- Would be archived with MINIMUM_AGE_MONTHS=6?
IF DATE '2024-08-15' < v6MonthsAgo THEN
DBMS_OUTPUT.PUT_LINE('CSDB Example: 2024-08-15 WOULD be archived (older than 6 months)');
ELSE
DBMS_OUTPUT.PUT_LINE('CSDB Example: 2024-08-15 would NOT be archived (within 6 months)');
END IF;
-- Example: Data from 2025-12-20 (LM)
-- Would be archived with CURRENT_MONTH_ONLY?
IF TRUNC(DATE '2025-12-20', 'MM') < vCurrentMonth THEN
DBMS_OUTPUT.PUT_LINE('LM Example: 2025-12-20 WOULD be archived (previous month)');
ELSE
DBMS_OUTPUT.PUT_LINE('LM Example: 2025-12-20 would NOT be archived (current month)');
END IF;
-- Example: Data from 2025-10-10 (TOP HYBRID)
-- Would be archived with HYBRID (current month + 3 months)?
IF TRUNC(DATE '2025-10-10', 'MM') < vCurrentMonth
AND DATE '2025-10-10' < v3MonthsAgo THEN
DBMS_OUTPUT.PUT_LINE('TOP Example: 2025-10-10 WOULD be archived (previous month AND older than 3 months)');
ELSE
DBMS_OUTPUT.PUT_LINE('TOP Example: 2025-10-10 would NOT be archived (within 3 months or current month)');
END IF;
END;
/
PROMPT
PROMPT ========================================
PROMPT MARS-828: Configuration & Testing Complete
PROMPT ========================================
PROMPT
PROMPT Summary:
PROMPT - All 4 strategies configured correctly
PROMPT - CSDB: 4 tables updated to MINIMUM_AGE_MONTHS (6 months)
PROMPT - LM: 1 table configured as CURRENT_MONTH_ONLY
PROMPT - TOP: 1 table configured as HYBRID (3 months)
PROMPT - C2D: 1 table kept as THRESHOLD_BASED (30 days)
PROMPT
PROMPT Next Steps:
PROMPT - Test ARCHIVE_TABLE_DATA with real data
PROMPT - Test GATHER_TABLE_STAT calculations
PROMPT - Verify archival operations in production scenario
PROMPT ========================================

View File

@@ -0,0 +1,253 @@
-- MARS-828: Test archival strategies
-- Author: Grzegorz Michalski
-- Date: 2026-01-27
-- Description: Comprehensive test scenarios for all archival strategies
SET SERVEROUTPUT ON SIZE UNLIMITED
PROMPT ========================================
PROMPT MARS-828: Testing Archival Strategies
PROMPT ========================================
-- Test 1: THRESHOLD_BASED (backward compatibility)
PROMPT
PROMPT Test 1: THRESHOLD_BASED strategy
DECLARE
vTestKey NUMBER := -1000;
BEGIN
INSERT INTO CT_MRDS.A_SOURCE_FILE_CONFIG (
A_SOURCE_FILE_CONFIG_KEY,
A_SOURCE_KEY,
SOURCE_FILE_TYPE,
SOURCE_FILE_ID,
SOURCE_FILE_DESC,
SOURCE_FILE_NAME_PATTERN,
TABLE_ID,
TEMPLATE_TABLE_NAME,
ARCHIVAL_STRATEGY,
DAYS_FOR_ARCHIVE_THRESHOLD
) VALUES (
vTestKey,
'TEST1',
'INPUT',
'TEST_THRESHOLD',
'Test threshold-based',
'test*.csv',
'TEST_TABLE',
'CT_ET_TEMPLATES.TEST',
'THRESHOLD_BASED',
30
);
DBMS_OUTPUT.PUT_LINE('SUCCESS: THRESHOLD_BASED strategy configured');
ROLLBACK;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('FAILED: ' || SQLERRM);
ROLLBACK;
END;
/
-- Test 2: CURRENT_MONTH_ONLY
PROMPT
PROMPT Test 2: CURRENT_MONTH_ONLY strategy
DECLARE
vTestKey NUMBER := -1001;
BEGIN
INSERT INTO CT_MRDS.A_SOURCE_FILE_CONFIG (
A_SOURCE_FILE_CONFIG_KEY,
A_SOURCE_KEY,
SOURCE_FILE_TYPE,
SOURCE_FILE_ID,
SOURCE_FILE_DESC,
SOURCE_FILE_NAME_PATTERN,
TABLE_ID,
TEMPLATE_TABLE_NAME,
ARCHIVAL_STRATEGY
) VALUES (
vTestKey,
'TEST2',
'INPUT',
'TEST_CURRENT_MONTH',
'Test current month only',
'test*.csv',
'TEST_TABLE',
'CT_ET_TEMPLATES.TEST',
'CURRENT_MONTH_ONLY'
);
DBMS_OUTPUT.PUT_LINE('SUCCESS: CURRENT_MONTH_ONLY strategy configured');
ROLLBACK;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('FAILED: ' || SQLERRM);
ROLLBACK;
END;
/
-- Test 3: MINIMUM_AGE_MONTHS (should succeed)
PROMPT
PROMPT Test 3: MINIMUM_AGE_MONTHS strategy with valid config
DECLARE
vTestKey NUMBER := -1002;
BEGIN
INSERT INTO CT_MRDS.A_SOURCE_FILE_CONFIG (
A_SOURCE_FILE_CONFIG_KEY,
A_SOURCE_KEY,
SOURCE_FILE_TYPE,
SOURCE_FILE_ID,
SOURCE_FILE_DESC,
SOURCE_FILE_NAME_PATTERN,
TABLE_ID,
TEMPLATE_TABLE_NAME,
ARCHIVAL_STRATEGY,
MINIMUM_AGE_MONTHS
) VALUES (
vTestKey,
'TEST3',
'INPUT',
'TEST_MIN_AGE',
'Test minimum age months',
'test*.csv',
'TEST_TABLE',
'CT_ET_TEMPLATES.TEST',
'MINIMUM_AGE_MONTHS',
6
);
DBMS_OUTPUT.PUT_LINE('SUCCESS: MINIMUM_AGE_MONTHS strategy configured with 6 months');
ROLLBACK;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('FAILED: ' || SQLERRM);
ROLLBACK;
END;
/
-- Test 4: MINIMUM_AGE_MONTHS without value (should fail)
PROMPT
PROMPT Test 4: MINIMUM_AGE_MONTHS strategy without value (should fail)
DECLARE
vTestKey NUMBER := -1003;
BEGIN
INSERT INTO CT_MRDS.A_SOURCE_FILE_CONFIG (
A_SOURCE_FILE_CONFIG_KEY,
A_SOURCE_KEY,
SOURCE_FILE_TYPE,
SOURCE_FILE_ID,
SOURCE_FILE_DESC,
SOURCE_FILE_NAME_PATTERN,
TABLE_ID,
TEMPLATE_TABLE_NAME,
ARCHIVAL_STRATEGY,
MINIMUM_AGE_MONTHS
) VALUES (
vTestKey,
'TEST4',
'INPUT',
'TEST_MIN_AGE_FAIL',
'Test minimum age months failure',
'test*.csv',
'TEST_TABLE',
'CT_ET_TEMPLATES.TEST',
'MINIMUM_AGE_MONTHS',
NULL -- Should trigger error
);
DBMS_OUTPUT.PUT_LINE('FAILED: Trigger did not fire - this should have failed!');
ROLLBACK;
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE = -20999 THEN
DBMS_OUTPUT.PUT_LINE('SUCCESS: Trigger correctly prevented invalid config');
ELSE
DBMS_OUTPUT.PUT_LINE('FAILED: Unexpected error: ' || SQLERRM);
END IF;
ROLLBACK;
END;
/
-- Test 5: HYBRID strategy
PROMPT
PROMPT Test 5: HYBRID strategy
DECLARE
vTestKey NUMBER := -1004;
BEGIN
INSERT INTO CT_MRDS.A_SOURCE_FILE_CONFIG (
A_SOURCE_FILE_CONFIG_KEY,
A_SOURCE_KEY,
SOURCE_FILE_TYPE,
SOURCE_FILE_ID,
SOURCE_FILE_DESC,
SOURCE_FILE_NAME_PATTERN,
TABLE_ID,
TEMPLATE_TABLE_NAME,
ARCHIVAL_STRATEGY,
MINIMUM_AGE_MONTHS
) VALUES (
vTestKey,
'TEST5',
'INPUT',
'TEST_HYBRID',
'Test hybrid strategy',
'test*.csv',
'TEST_TABLE',
'CT_ET_TEMPLATES.TEST',
'HYBRID',
3
);
DBMS_OUTPUT.PUT_LINE('SUCCESS: HYBRID strategy configured');
ROLLBACK;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('FAILED: ' || SQLERRM);
ROLLBACK;
END;
/
-- Test 6: Invalid strategy (should fail)
PROMPT
PROMPT Test 6: Invalid strategy (should fail)
DECLARE
vTestKey NUMBER := -1005;
BEGIN
INSERT INTO CT_MRDS.A_SOURCE_FILE_CONFIG (
A_SOURCE_FILE_CONFIG_KEY,
A_SOURCE_KEY,
SOURCE_FILE_TYPE,
SOURCE_FILE_ID,
SOURCE_FILE_DESC,
SOURCE_FILE_NAME_PATTERN,
TABLE_ID,
TEMPLATE_TABLE_NAME,
ARCHIVAL_STRATEGY
) VALUES (
vTestKey,
'TEST6',
'INPUT',
'TEST_INVALID',
'Test invalid strategy',
'test*.csv',
'TEST_TABLE',
'CT_ET_TEMPLATES.TEST',
'INVALID_STRATEGY'
);
DBMS_OUTPUT.PUT_LINE('FAILED: Check constraint did not fire!');
ROLLBACK;
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE = -2290 THEN
DBMS_OUTPUT.PUT_LINE('SUCCESS: Check constraint prevented invalid strategy');
ELSE
DBMS_OUTPUT.PUT_LINE('FAILED: Unexpected error: ' || SQLERRM);
END IF;
ROLLBACK;
END;
/
PROMPT
PROMPT ========================================
PROMPT MARS-828: Testing Complete
PROMPT ========================================

View File

@@ -0,0 +1,36 @@
-- MARS-828 Test Installation (Automated)
-- This script bypasses ACCEPT prompts for automated testing
SET SERVEROUTPUT ON SIZE UNLIMITED
SET VERIFY OFF
SET FEEDBACK ON
SET ECHO ON
PROMPT ===============================================
PROMPT MARS-828 Automated Test Installation
PROMPT ===============================================
-- Step 1: Add columns
@@01_MARS_828_install_add_archival_strategy_columns.sql
-- Step 2: Create trigger
@@02_MARS_828_install_archival_strategy_trigger.sql
-- Step 3: Deploy package spec
@@03_MARS_828_install_CT_MRDS_FILE_ARCHIVER_SPEC.sql
-- Step 4: Deploy package body
@@04_MARS_828_install_CT_MRDS_FILE_ARCHIVER_BODY.sql
-- Step 5: Verify
@@05_MARS_828_verify_installation.sql
-- Step 6: Track version
@@06_MARS_828_track_version.sql
-- Step 7: Verify packages
@@verify_packages_version.sql
PROMPT ===============================================
PROMPT Test Installation Complete!
PROMPT ===============================================