orcale中如何快速地将某张表的某个分区的数据移动到另外一张分区表中?
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
刚刚想了会,可以先将REALTIME_TABLE表里面属于同一个月的(天)分区合并为一个大分区PARTITION,然后让PARTITION分区与temp表进行“分区交换”,再将temp表与HISTORY_TABLE中的(月)分区进行“分区交换”,这样是可以避免大量的读写操作,不用再把大量地资源浪费在temp表的写入上。就是不知道有没有分区与分区直接进行交换的语句。