如果新插入的数据logtime是2013年的 对比上面的分区不在p1-p9分区范围 那么它会默认放进p10分区
这时候2013这个logtime值的数据只有在p10分区内才能查询到
时间一长p10 分区内的数据将会越来越多,当然需要维护,就需要新增分区
--在有maxvalue的情况下添加分区要用split语法
alter table sys_log split partition p10 at (to_date('2013-12-1', 'yyyy-mm-dd'))
into (partition p11, partition p10);
执行完这句 p10分区内已经查询不到2013年的数据了,只能在p11分区内查询到(实验得出,绝非理论推断)
如果不想每次都手动写新增分区语句去数据库执行 那么久可以写一个定时job
可以每个月 月么生成一个下个月的分区,(哎,用过oracle 11G的分区后就觉得9I 的分区好麻烦- -!)
下面是常用的分区表sql
--查询当前用户下分区表的分区信息:
SELECT * FROM USER_TAB_PARTITIONS T WHERE T.TABLE_NAME='SYS_LOG';
--查询某分区下的数据量:
SELECT COUNT(*) FROM sys_log PARTITION(P2);
--查询索引、表上在那些列上创建了分区:
SELECT * FROM USER_PART_KEY_COLUMNS;
--添加分区 – 在最后一个分区之后添加新分区
ALTER TABLE SALES ADD PARTITION P4 VALUES LESS THAN (4000);
--拆分分区 - 将一个大分区中的记录拆分到两个分区中
[sql]
ALTER TABLE SALES SPLIT PARTITION P2 AT (1500) INTO (PARTITION P21, PARTITION P22);
--查询每个分区表的分区的大小以及分区表的索引等
SELECT * FROM dba_segments t WHERE t.segment_name ='表名' and owner='用户名';