我想设计一个表,如表F和分区它的方式,通过添加一个新的数据,假设它不在现有的分区创建一个新的分区。(分区基于日期列和1分区为每一天)。我是新的甲骨文,请帮助我,什么是最好的主意?我该如何写这个代码。表F是:
DATE Amount ID
2015-05-18 1000 1
2015-05-19 2000 2
2015-05-20 3000 3
2015-05-21 4000 4
2015-05-21 5000 5
2015-05-21 3000 6
2015-05-22 2002 7
1条答案
按热度按时间qxgroojn1#
您可以在日期列上创建几个不同的分区,即(每日、每周、每月、每季度或每年),并在您需要确定的列上包含本地或全局索引
下面是一个具有全局索引的每周PARTITION的示例。当向表中插入新日期时,PARTITION将自动添加系统生成的名称。
每次创建新分区时,Oracle都会生成一个系统名称,该名称非常神秘
下面是PARTITION名称的列表,它是Oracle在我加载上面的数据时生成的
尽管PARTITION管理将使用系统生成的PARTITION名称,但我使用下面的过程将它们重命名为更有意义的名称。
让我们创建并运行该过程,然后再次查看名称。正如您所看到的,由于我们使用的是周分区,因此名称P_表示分区YYYY(4位数)所在的年份,W表示一年中的周,##表示一年中的周数。
我建议使用调度器每天至少运行一次这个进程。你可以运行它很多次,因为它不会造成任何伤害。
下一步是设置RETENTION表。每个间隔范围PARTITION都应该有一个条目。
RETENTION值由您决定。在我的示例中,我为表T1选择了30天。这意味着,当PARTITION的最大值大于30天时,它就有资格被删除。因此,在设置这些值时要明智地选择。
注意:我列出了其他表的名称,以显示每个表如何拥有自己的值。
以下是需要创建的3个程序。
ddl过程是一个 Package 器,它向您显示正在处理的内容以及所需的时间。
rebuild_index过程显然会重建任何无效的索引。正如我上面提到的,如果您使用的是全局索引,并且删除了PARTITION,则需要重建索引。在本例中,我硬编码了并行4,但如果您有足够的CPU能力,则可能需要增加数量以满足您的需要。
此外,还有其他方法可以将索引标记为不可用,因此您可能需要考虑安排该任务。
最后是匿名块。它实际上删除了已经过了保留期的PARTITIONS。这需要每天安排一次!!
如果你仔细观察匿名块,最后一步是调用重建索引过程,所以如果一个索引不可用,它将被重建。
现在,让我们运行该流程,看看会发生什么。