【问题标题】:Oracle 11g - Cascade dropping of partitionOracle 11g - 分区的级联删除
【发布时间】:2016-10-27 03:56:28
【问题描述】:

我们有一个以大约 640 万行/月增长的分区表,我们会定期(每月)删除一个分区。我们最近在这个表的主键上引入了一个连接表(带有级联删除)。这引入了参照完整性问题——我们无法删除分区,因为连接表引用了其中的行。

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

我已经读过这个: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. 对撤消/重做日志的影响

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

【问题讨论】:

  • edit您的问题为所有有问题的表添加create table语句。

标签: sql oracle oracle11g database-partitioning


【解决方案1】:

文档还说

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

这种方法最适合小表,或者当被删除的分区包含表中总数据的一小部分时的大表。

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

ALTER TABLE table DROP PARTITION partitionID UPDATE INDEXES;

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

当您跳过 DELETE 时,您不会收到任何撤消日志。

【讨论】:

    【解决方案2】:

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

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

    另一个选项是在子分区中包含与父分区相同的行。这样做的缺点是会增加连接表的大小,但会允许表分区保持同步。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-31
      • 1970-01-01
      • 1970-01-01
      • 2018-11-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多