|
|
|
|
@@ -7,7 +7,7 @@ AS
|
|
|
|
|
/**
|
|
|
|
|
* @name GET_ARCHIVAL_WHERE_CLAUSE
|
|
|
|
|
* @desc Private function that generates WHERE clause based on ARCHIVAL_STRATEGY configuration.
|
|
|
|
|
* Supports four strategies: THRESHOLD_BASED, CURRENT_MONTH_ONLY, MINIMUM_AGE_MONTHS, HYBRID.
|
|
|
|
|
* Supports three strategies: THRESHOLD_BASED, MINIMUM_AGE_MONTHS, HYBRID.
|
|
|
|
|
* @param pSourceFileConfig - Source file configuration record with ARCHIVAL_STRATEGY
|
|
|
|
|
* @return VARCHAR2 - WHERE clause for filtering archival candidates
|
|
|
|
|
**/
|
|
|
|
|
@@ -120,17 +120,26 @@ AS
|
|
|
|
|
vTableStat := GET_TABLE_STAT(pSourceFileConfigKey => pSourceFileConfigKey);
|
|
|
|
|
end if;
|
|
|
|
|
|
|
|
|
|
-- Strategy-based trigger logic (MARS-828)
|
|
|
|
|
IF vSourceFileConfig.ARCHIVAL_STRATEGY = 'MINIMUM_AGE_MONTHS' THEN
|
|
|
|
|
-- MINIMUM_AGE_MONTHS: Archive based on age only, ignore thresholds
|
|
|
|
|
vArchivalTriggeredBy := 'AGE_BASED';
|
|
|
|
|
ENV_MANAGER.LOG_PROCESS_EVENT('Archival strategy: MINIMUM_AGE_MONTHS (threshold-independent)','INFO');
|
|
|
|
|
ELSE
|
|
|
|
|
-- THRESHOLD_BASED and HYBRID: Check thresholds
|
|
|
|
|
if vTableStat.OVER_ARCH_THRESOLD_FILE_COUNT >= vSourceFileConfig.FILES_COUNT_OVER_ARCHIVE_THRESHOLD then vArchivalTriggeredBy := 'FILES_COUNT';
|
|
|
|
|
elsif vTableStat.OVER_ARCH_THRESOLD_ROW_COUNT >= vSourceFileConfig.ROWS_COUNT_OVER_ARCHIVE_THRESHOLD then vArchivalTriggeredBy := vArchivalTriggeredBy||', ROWS_COUNT';
|
|
|
|
|
elsif vTableStat.OVER_ARCH_THRESOLD_SIZE >= vSourceFileConfig.BYTES_SUM_OVER_ARCHIVE_THRESHOLD then vArchivalTriggeredBy := vArchivalTriggeredBy||', BYTES_SUM';
|
|
|
|
|
else ENV_MANAGER.LOG_PROCESS_EVENT('Non of archival triggers reached','INFO');
|
|
|
|
|
end if;
|
|
|
|
|
END IF;
|
|
|
|
|
|
|
|
|
|
if LENGTH(vArchivalTriggeredBy)>0 THEN
|
|
|
|
|
ENV_MANAGER.LOG_PROCESS_EVENT('Archival Triggered By: '||vArchivalTriggeredBy,'INFO');
|
|
|
|
|
vTableName := DBMS_ASSERT.SCHEMA_NAME(vSourceFileConfig.ODS_SCHEMA_NAME) || '.'||DBMS_ASSERT.simple_sql_name(vSourceFileConfig.TABLE_ID)||'_ODS';
|
|
|
|
|
|
|
|
|
|
-- Use strategy-based WHERE clause (MARS-828)
|
|
|
|
|
-- Using GROUP BY instead of DISTINCT to avoid ORA-22950 (object type ordering issue)
|
|
|
|
|
vQuery := '
|
|
|
|
|
select t_filename(
|
|
|
|
|
file$name
|
|
|
|
|
@@ -138,11 +147,11 @@ AS
|
|
|
|
|
, to_char(h.workflow_start,''yyyy'')
|
|
|
|
|
, to_char(h.workflow_start,''mm'')
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
from '||vTableName||' s
|
|
|
|
|
join CT_MRDS.a_workflow_history h
|
|
|
|
|
on s.a_workflow_history_key = h.a_workflow_history_key
|
|
|
|
|
where ' || GET_ARCHIVAL_WHERE_CLAUSE(vSourceFileConfig)
|
|
|
|
|
where ' || GET_ARCHIVAL_WHERE_CLAUSE(vSourceFileConfig) || '
|
|
|
|
|
group by file$name, file$path, to_char(h.workflow_start,''yyyy''), to_char(h.workflow_start,''mm'')'
|
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
-- Get all files that will be archived into "vfiles" collection ("regular data files")
|
|
|
|
|
|