Friday, 4 July 2025

Filled under:

 heuristic analysis


Common Suffix Patterns (LIKE '%XYZ')

PatternMeaning / Use Case
_BAKBackup copy of the table
_BACKUPSame as above
_TMPTemporary version of the table
_TEMPTemporary or interim data
_COPYCopy of an original table
_OLDOld version, before a structural/data change
_NEWNew version during migration/ETL
_TESTUsed for testing
_ARCHIVEArchived data
_STAGEStaging table before transformation
_HISTHistorical data
_HISTORYExtended historical storage
_SNAPSnapshot of a live table
_MIGMigration purposes
_EXPORTTable used for export/dump
_IMPORTTable used during import
_VALIDATIONFor data validation during ETL
_DUPDuplicate copy
_ROLLBACKUsed to rollback or undo a change

🛠️ Common Prefix Patterns (LIKE 'XYZ%')

PatternMeaning / Use Case
TMP_Temporary table
STG_Staging table
BK_Backup copy
OLD_Old version
NEW_New version
ARCH_Archived data
COPY_Duplicate
TEST_Testing tables
SNAP_Snapshots
VAL_Validation tables
DUP_Duplicate
ROLLBACK_Used for undo / rollback testing
T_Often used as temp or test table




WITH table_defs AS (
  SELECT table_name,
         LISTAGG(column_name || ':' || data_type || ':' || data_length, ',') 
           WITHIN GROUP (ORDER BY column_id) AS col_signature
  FROM all_tab_columns
  WHERE owner = 'YOUR_SCHEMA'
  GROUP BY table_name
)
SELECT col_signature, COUNT(*), LISTAGG(table_name, ', ') WITHIN GROUP (ORDER BY table_name) AS tables
FROM table_defs
GROUP BY col_signature
HAVING COUNT(*) > 1;



SELECT 
    owner,
    table_name,
    num_rows,
    blocks,
    avg_row_len,
    ROUND(blocks * 8 / 1024, 2) AS size_mb, -- 1 block = 8KB by default
    last_analyzed
FROM dba_tables
WHERE owner = 'YOUR_SCHEMA'
  AND REGEXP_LIKE(table_name, 
       '(_BAK$|_BACKUP$|_TMP$|_TEMP$|_COPY$|_OLD$|_NEW$|_TEST$|_ARCH$|_ARCHIVE$|_STAGE$|_SNAP$|_DUP$|_EXPORT$|_IMPORT$|_HIST$|_HISTORY$|^TMP_|^STG_|^BK_|^OLD_|^NEW_|^TEST_|^ARCH_|^SNAP_|^COPY_|^VAL_|^DUP_)',
       'i') -- case-insensitive
  AND num_rows IS NOT NULL -- ensure stats exist
ORDER BY size_mb DESC;



SELECT 
    t.owner,
    t.table_name,
    t.tablespace_name,
    t.num_rows,
    t.blocks,
    ROUND(t.blocks * 8 / 1024, 2) AS size_mb,
    t.last_analyzed,
    MAX(s.end_time) AS last_access_time
FROM dba_tables t
JOIN dba_hist_seg_stat_obj o
    ON t.owner = o.owner AND t.table_name = o.object_name
JOIN dba_hist_seg_stat s
    ON o.obj# = s.obj#
WHERE t.owner = 'YOUR_SCHEMA'
  AND REGEXP_LIKE(t.table_name, 
       '(_BAK$|_BACKUP$|_TMP$|_TEMP$|_COPY$|_OLD$|_NEW$|_TEST$|_ARCH$|_ARCHIVE$|_STAGE$|_SNAP$|_DUP$|_EXPORT$|_IMPORT$|_HIST$|_HISTORY$|^TMP_|^STG_|^BK_|^OLD_|^NEW_|^TEST_|^ARCH_|^SNAP_|^COPY_|^VAL_|^DUP_)',
       'i')
GROUP BY 
    t.owner, t.table_name, t.tablespace_name, t.num_rows, t.blocks, t.last_analyzed
ORDER BY size_mb DESC;

0 comments:

Post a Comment