orcale中如何快速地将某张表的某个分区的数据移动到另外一张分区表中?

发布于 2022-09-11 16:49:17 字数 1128 浏览 23 评论 0

1.orcale11g的某个库中存在两张表:REALTIME_TABLE(业务实时表)和HISTORY_TABLE(业务历史表),如下所示(两张表字段是一致的,下面列出的只是部分字段):

REALTIME_TABLE表                  HISTORY_TABLE表
    ID        TIME                     ID         TIME
     1  2019-01-01 00:00:00             1   2018-12-31 23:59:58
     2  2019-01-01 00:00:01             2   2018-12-31 23:59:59

其中“REALTIME_TABLE”是一个以TIME为分区字段并自动按天创建主分区的分区表,每个分区大约有80W的数据量,没有建任何索引,里面只保留近两年的数据提供给用户使用,包括批量插入、批量更新、小范围时间内的报表统计;“HISTORY_TABLE”是一个以TIME为分区字段并自动按月创建主分区的分区表,里面有五个分区位图索引,用来做数据统计。
2.现在有这么一个场景。由于orcale11g的分区个数不能超过1024个,所以我必须得把REALTIME_TABLE表中超过两年以上的数据转移到HISTORY_TABLE表中,请问各路大神有没有什么好的解决方案?有没有分区与分区直接进行数据交换的sql用法?

注:

1.当时没有考虑二级分区的方案是因为二级分区的维护成本比较高(人员变动、掌握ORCALE JOB及分区用法等命令),因为二级分区必须得手动创建,导致子分区的JOB每天都得执行一次,同时也没有合理利用orcale11g里面自动分区的这个显著特点;

2.目前的解决方案是将REALTIME_TABLE表中符合要求的(天)分区数据写到temp表中,保证一个temp表对应一个自然月的数据,然后将temp表和HISTORY_TABLE中的(月)分区进行“分区交换”的操作,最后删除temp表。整个流程是用存储过程实现的,不会影响到线上的相关业务,并且每年只会执行一次这个JOB。这个方案的好处就是流程简单,由于建表时考虑到自动分区,所以所有的分区操作都交给数据库来处理;弊端就是在做temp表写入的时候耗时较长;

3.解决方案应以“减少人工干预”为优先考虑的原则(小公司资源不足呀)。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

独木成林 2022-09-18 16:49:17

刚刚想了会,可以先将REALTIME_TABLE表里面属于同一个月的(天)分区合并为一个大分区PARTITION,然后让PARTITION分区与temp表进行“分区交换”,再将temp表与HISTORY_TABLE中的(月)分区进行“分区交换”,这样是可以避免大量的读写操作,不用再把大量地资源浪费在temp表的写入上。就是不知道有没有分区与分区直接进行交换的语句。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文