首页 > 数据库 > Oracle > 在生产中把一个普通表变成分区表的实施过程
注意:新建的表名当然要和老表不同,比如我们要把 A表变成分区表,我们新建的分区表就可以叫A_NEW,在第三步切换的过程中会改回到A,让它生效。
2. 添加索引:
1. 注意:分区表不能有主键。所以,在新表中,不设置主键。但我们要新建一个联合索引,按(分区的日期列,原表主键)
的形式,加以创建。
2. 把原表中的联合索引都改成分区索引, 从view
sql中查看,修改,新的索引名字一定要和原表中不同,要不然会报错。在创建索引的SQL最后加local。加以创建。(根据PL/SQL DEVELOPER版本不同,版本高的创建分区索引的元数据最后不显示local)
3.插入历史数据
例如:
insert into BSVCDEVMALRPTLD5_NEW select * from BSVCDEVMALRPTLD5 where DEVMALTIME
---把老表中2011年1月的数据插入到新表。
原理是这样:比如按日分区,今天9月3日,我们把之前到9月2日的数据insert.然后进行下一个步骤:切换表名,让新表生效,这时老表里数据就不会再增长了,因为应用已经不走它了,这时我们再把老表9月3日的数据(也就是切换前当日的数据)插入到新表。如果是月分区的,就把之前到8月份的insert,9月不动,等切换完之后,再插入9月的数据。
总之:先把历史数据导入,然后切换,再把今天的数据,或者当月的数据导入。
4.切换表名,让新表生效
然后开始修改表名:先把现有的表改名,改成当前日期下的格式,这样便于理解。如下:
alter table DVR_ONLINERECORDGD rename to DVR_ONLINERECORDGD_0813;
再把刚刚创建的表名修改成现有的表名。
alter table DVR_ONLINERECORDGD_NEW rename to DVR_ONLINERECORDGD;
这样,表就切换过来了。
5.插入当月或者当日,最后切换前的变化数据。现在在老表中已经静止。
说明:按月分区就把当月,按日分区就把当日的历史数据导入到新表,第二步里已经有详细说明。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25116248/viewspace-1263611/ ,如需转载,请注明出处,否则将追究法律责任。