Oracle 11g - 级联删除分区

Oracle 11g - Cascade dropping of partition

我们有一个 table 以大约 640 万行/月的速度增长,它是分区的,我们定期(每月)删除一个分区。我们最近在此 table 的主键上引入了一个连接 table(具有级联删除)。这引入了引用完整性问题,我们不能删除分区,因为连接 table 引用其中的行。

我们收到了让我们的应用程序代码执行此操作的建议,但我们认为这不是最佳解决方案。

我读过这篇文章:https://docs.oracle.com/cd/E11882_01/server.112/e25523/part_admin002.htm#i1007479 看来他们建议先 DELETE FROM table partition (partitionID); 然后 ALTER TABLE table DROP PARTITION partitionID;

我们担心的是:

  1. 处理负载
  2. 对 undo/redo 日志的影响

我想知道是否有人有更好的主意。或者可以再次向我保证这不是一个坏主意。

文档还说

DELETE FROM sales partition (dec98);
ALTER TABLE sales DROP PARTITION dec98;

This method is most appropriate for small tables, or for large tables when the partition being dropped contains a small percentage of the total data in the table.

我认为在这种情况下,性能可能会比 通常的 方式稍微好一些,例如:

ALTER TABLE table DROP PARTITION partitionID UPDATE INDEXES;

ALTER TABLE table DROP PARTITION partitionID;
ALTER INDEX ... REBUILD;

当您跳过 DELETE 时,您将不会获得任何撤消日志。

Wernfried 的回答非常有帮助,但我想要的是能够像主 table 一样对连接 table 进行分区。这样我们就可以删除join table的分区,然后是父分区。这避免了引用完整性问题而无需删除。由于 table 的大小,删除不是一个选项,我们的 undo/redo 日志很可能不会承受压力。

这可以通过两种方式实现,第一种是最简单的,但可能不适用于较旧的数据库版本。我们可以在连接 table 上创建一个参考分区,这将使两个分区保持同步。

另一种选择是将与父分区相同的行包含到子分区中。这有增加连接大小的缺点 table 但它会允许 table 分区保持同步。

Oracle 在此处有更多信息:https://docs.oracle.com/database/121/VLDBG/GUID-54D18B18-6838-4115-9389-E1FB0D20A8CA.htm