类型2维表的Oracle分区/归档策略

jutyujz0  于 2023-06-05  发布在  Oracle
关注(0)|答案(1)|浏览(119)

我在Oracle中有一个非常宽的表,它是2维的类型。
记录具有from_dates和to_dates,其中最新的“当前”记录具有9999年12月31日的最高结束日期。表上当前有两个分区,一个用于“当前”记录,一个用于“历史”记录。
有一个新的要求,只保留过去12个月的记录在'历史'分区。我将此解释为保存过去12个月内有效的记录,即其中记录的to_date <(this month- 11 months)。
通常情况下,如果我想删除记录,我只会删除一个分区,但在这种情况下,这将不起作用,因为我需要保留现有的“历史”分区中的一些记录。
是否有任何分区策略可以支持这一点,或者我是不是找错了树?

kse8i1jr

kse8i1jr1#

仅仅使用“current”和“history”这两个分区并不能完成很多工作。你需要按月重新划分。然后,您可以对超过12个月的分区实现滚动分区删除,这需要一些脚本。
通常我们使用间隔分区INTERVAL(NUMTOYMINTERVAL(1,'MONTH')),所以我们不必手动或通过脚本来维护分区添加。* 然而 *,不幸的是,在您的情况下,您将无法,因为您使用的特殊日期12/31/9999。这是Oracle中允许的最大日期。当决定是否需要一个新的分区时,间隔分区将在内部将间隔添加到日期值,这将溢出允许的最大日期值并引发错误。这个特殊日期的使用实质上禁止了间隔分区的使用。
您别无选择,只能将特殊的“永恒”日期更改为距离12/31/9999小于一个间隔的日期(任何小于12/01/9999的日期都允许每月间隔分区,或者任何小于12/31/9998的日期都允许每年间隔分区)。或者,由于必须更改代码以适应这些解决方案,因此通常会发生这种情况,您必须提前手动构建分区,或者创建一个预定的脚本来为您完成此任务。

相关问题