【问题标题】:Oracle database manual table partitioningOracle数据库手动表分区
【发布时间】:2016-11-23 08:37:39
【问题描述】:

我们的系统中有实时数据库和档案数据库。来自实时数据库的日常数据被移动到档案数据库中。每天我们将大约 200 万条数据生成到不同的表中。

由于我们需要将数据保存 10 年,我们创建了另一个 oracle 数据库用于存档目的,并使用批处理在每个午夜推送数据。

由于数据快速增长,我们关心将数据存储在档案数据库的表中。由于我们没有 oracle 分区许可证,我们已经为每个月创建了 10 年的表(总共 120 个表)。

我们的档案数据库更多是写的,只读的很少。通过将表拆分为多个表,在性能/存储方面是否有任何已证实的优势?

问候, 马玉兰

【问题讨论】:

  • 1 天 = 200 万条记录... 1 个月 = 60 百万... 我认为您的解决方案还可以。如果您将所有数据放在一张表中,由于同一张表中的数据量很大,将来可能会出现问题

标签: oracle partitioning oracle12c


【解决方案1】:

是的,有。当您没有分区许可证并将整个数据存储在一个表中时,您无法将其拆分为多个表空间。但是当您创建多个表时,您可以为假设每年创建一个表空间。这使您可以存储 10 年以前的数据,这些数据的查询频率较低,读取的空间比查询频率更高的新数据要差。
另一个优势是索引的大小,如果你有的话。当然,您需要一些逻辑来决定要查询哪个表(例如,基于传递给 proc 的月份返回 ref cursor 的过程)但是当您在应用程序或数据库端应用此手动决定时,您的索引将小于一个巨大的索引。
下一次冒险,当某个时期超过 10 年时,您只需删除后缀为 _1015 的表(我建议使用月份和年份的后缀)。无需删除、收缩等操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    • 1970-01-01
    • 2017-06-02
    • 1970-01-01
    • 2011-01-11
    相关资源
    最近更新 更多