正在从 Oracle MAX_PARTITION 中删除记录

Deleting records from Oracle MAX_PARTITION

我们有一个带隔板的 table。它还有一个溢出分区(最大分区),它可以充当不符合分区标准的记录的全部。想法是提前创建分区,这样记录就永远不会在 max_partition 中结束。然而,对于一个 table,这被遗漏了,所以所有记录最终都在那个单独的分区中。

现在这些记录中的大部分都不再使用了,所以可以删除它们。然而,我们的方法是在太旧时删除分区。在这种情况下不能这样做。有没有简单的方法来处理清除?

也许现在创建分区并将记录移动到它们然后现在删除分区是一个想法,但它似乎在性能上会很差。另一种选择是创建一个临时文件 table,其中记录的子集从那里移动和删除,但再次单独移动记录似乎很耗时。 table 有大约 500 万条记录。

从性能方面来看,这将是最好的前进方式。我们可以管理一点停机时间,但不会太多。

我们使用 Oracle 11g。

table 创建脚本如下所示:

CREATE TABLE "TRANSACTIONS" 
   ("year" number(4,0) NOT NULL ENABLE)
  PARTITION BY RANGE ("year") 
 (PARTITION "P_OLD" VALUES LESS THAN (2010),
  PARTITION "P_2011"   VALUES LESS THAN (2011),
 ...

  PARTITION "P_MAX"    VALUES LESS THAN (MAXVALUE));

不需要删除分区,您可以清除它。

alter table TRANSACTIONS TRUNCATE PARTITION P_MAX UPDATE INDEXES;

或者如果您愿意,也可以删除行:

delete from TRANSACTIONS PARTITION (P_MAX);

你可以使用INTERVAL分区来简化(其实我不明白你的问题):

CREATE TABLE TRANSACTIONS ( 
   ...
    TRANSACTION_DATE TIMESTAMP(0) NOT NULL
)    
PARTITION BY RANGE (TRANSACTION_DATE) INTERVAL (INTERVAL '12' MONTH) 
    (PARTITION P_OLD VALUES LESS THAN (TIMESTAMP '2000-01-01 00:00:00' ) )
ENABLE ROW MOVEMENT;