Oracle 存档和清除选项

Oracle Archive and Purge Options

根据我们的情况,我正在尝试找出执行存档和清除的最佳选项。

我们大约有 5000 万条记录 说 Table A。我们想 将数据归档到目标 table 然后 清除源 table 中的那些数据。我们希望根据相互重叠的几个标准保留数据库。例如,除了保留 Indicator='True' 的所有记录外,我们还想保留过去 5 个月的数据。 Indicator='True' 可能会 return 超过 5 个月的记录。这意味着我必须使用 OR 条件才能捕获数据。根据条件,我们需要保留1000万条记录archive/purge4000万条记录。我需要创建一个流程,每 6 个月 运行 执行此操作。

我的问题是,最有效的选择 是什么来完成归档和清除? PROC/bulk delete/insert 是我最好的选择吗?

Partition似乎是不可能的,因为有几个条件相互重叠。

使用composite partitioning,例如range(对于你的时间维度)和list(区分应该保留很长时间和有限时间的行。

例子

带有KEEP_ID='N'的行应该在5个月后被淘汰。

CREATE TABLE tab
  ( id            NUMBER(38,0),
    trans_dt      DATE,
    keep_id       VARCHAR2(1)
  )
 PARTITION BY RANGE (trans_dt) INTERVAL (NUMTOYMINTERVAL(1,'MONTH'))
 SUBPARTITION BY LIST (keep_id)
   SUBPARTITION TEMPLATE
   ( SUBPARTITION p_catalog VALUES ('Y'),
     SUBPARTITION p_internet VALUES ('N')
   )
 (PARTITION p_init VALUES LESS THAN (TO_DATE('01-JAN-2019','dd-MON-yyyy'))
  );

填充 6 个月的示例数据

insert into tab (id, trans_dt, keep_id)
select rownum, add_months(date'2019-08-01', trunc((rownum-1) / 2)), decode(mod(rownum,2),0,'Y','N') 
from dual connect by level <= 12;

select * from tab
order by trans_dt, keep_id; 

        ID TRANS_DT            KEEP_ID
---------- ------------------- -------
         1 01.08.2019 00:00:00 N       --- this subpartition should be deleted
         2 01.08.2019 00:00:00 Y       
         3 01.09.2019 00:00:00 N       
         4 01.09.2019 00:00:00 Y       
         5 01.10.2019 00:00:00 N       
         6 01.10.2019 00:00:00 Y       
         7 01.11.2019 00:00:00 N       
         8 01.11.2019 00:00:00 Y       
         9 01.12.2019 00:00:00 N       
        10 01.12.2019 00:00:00 Y       
        11 01.01.2020 00:00:00 N       
        12 01.01.2020 00:00:00 Y 

现在使用partition extended names引用应该删除的子分区。

删除超过 5 个月的子分区,但仅适用于 KEEP_ID = 'N'

 alter table tab drop subpartition for (DATE'2019-08-01','N');   

新数据

        ID TRANS_DT            KEEP_ID
---------- ------------------- -------
         2 01.08.2019 00:00:00 Y       
         3 01.09.2019 00:00:00 N       
         4 01.09.2019 00:00:00 Y   
.....