起因:今天是8月16日,数据库的分区表为日分区的格式,分区最晚只分到 8 月 8 日,现在 8 月 9 日的数据分到了 P_MAX 里,数据文件这时又不合时宜的满了,导致现在不能往里写数据,现在这个表已经不能用了。
1.我先添加了数据文件:
SQL:
ALTER TABLESPACE TBS_APTS_BSVC_CAN ADD DATAFILE 'D:…..TBS_APTS_BSVC_CAN08.DBF' size 10G autoextend on next 2000m;
这时,应用往里P_MAX分区里写今天的数据。
2.我开始从P_MAX里切分P_20140809分区
SQL:
alter table BSVCBUSCANDATA split partition P_MAX at (to_date('2014-08-10','YYYY-MM-DD')) into (partition P_20140809 tablespace tbs_apts_bsvc_can,partition P_MAX);
报:ORA-14080无法按指定的上限来分割分区
在网上搜了了一下,按解释说,这个错误的原因就是:切分的分区P_20140809范围大于P_MAX,这也不可能啊。
3.后来跟一个大哥进行了讨论,决定试试能不能切分明天的分区
SQL:
alter table BSVCBUSCANDATA split partition P_MAX at (to_date('2014-08-17','YYYY-MM-DD'))into (partition P_20140816 tablespace tbs_apts_bsvc_can,partition P_MAX);
注意:这块挺有意思,这里是小于8-17,就是8-16了。
语句执行成功,这时我又往后切分,也成功。
4.但是这样不行,我们势必要把9-15的分区添加上,如果刚开始用P_MAX切,会报错:这次我尝试把刚分出来的16号的,离之前最近的分区切了,这时就可以切了:
alter table BSVCBUSCANDATA split partition P_20140816 at (to_date('2014-08-10','YYYY-MM-DD')) into (partition P_20140809 tablespace tbs_apts_bsvc_can,partition P_20140816);
alter table BSVCBUSCANDATA split partition P_20140816 at (to_date('2014-08-11','YYYY-MM-DD')) into (partition P_20140810 tablespace tbs_apts_bsvc_can,partition P_20140816);
alter table BSVCBUSCANDATA split partition P_20140816 at (to_date('2014-08-12','YYYY-MM-DD')) into (partition P_20140811 tablespace tbs_apts_bsvc_can,partition P_20140816);
总结:
当我们split分区,当使用P_MAX的时候,只能切出今天之后的分区,不能切过去的分区,切完之后,再用离过去最近的将来分区,比如此例是明天的分区,进行切分,才能切出过去的分区。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25116248/viewspace-1263458/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/25116248/viewspace-1263458/