概述
前面已经对Oracle数据库分区方面一些概念性东西做了一些介绍,所以今天就不多讲概念性东西了,主要分享一些表分区常用的维护命令。
添加分区
1、给SALES表添加一个P3分区
ALTER TABLE SALES ADD PARTITION P3 VALUES LESS THAN(TO_DATE('2003-06-01','YYYY-MM-DD'));
注意:以上添加的分区界限应该高于最后一个分区界限。
2、给SALES表的P3分区添加了一个P3SUB1子分区
ALTER TABLE SALES MODIFY PARTITION P3 ADD SUBPARTITION P3SUB1 VALUES('COMPLETE');
删除分区
1、删除了P3表分区:
ALTER TABLE SALES DROP PARTITION P3;
2、删除了P4SUB1子分区:
ALTER TABLE SALES DROP SUBPARTITION P4SUB1;
注意:如果删除的分区是表中唯一的分区,那么此分区将不能被删除,要想删除此分区,必须删除表。
截断分区
截断某个分区是指删除某个分区中的数据,并不会删除分区,也不会删除其它分区中的数据。当表中即使只有一个分区时,也可以截断该分区。
1、截断分区:
ALTER TABLE SALES TRUNCATE PARTITION P2;
2、截断子分区:
ALTER TABLE SALES TRUNCATE SUBPARTITION P2SUB2;
合并分区
合并分区是将相邻的分区合并成一个分区,结果分区将采用较高分区的界限,值得注意的是,不能将分区合并到界限较低的分区。
实现P1 P2分区的合并:
ALTER TABLE SALES MERGE PARTITIONS P1,P2 INTO PARTITION P2;
拆分分区
拆分分区将一个分区拆分两个新分区,拆分后原来分区不再存在。注意不能对HASH类型的分区进行拆分。
ALTER TABLE SALES SBLIT PARTITION P2 AT(TO_DATE('2003-02-01','YYYY-MM-DD')) INTO (PARTITION P21,PARTITION P22);
接合分区(coalesca)
结合分区是将散列分区中的数据接合到其它分区中,当散列分区中的数据比较大时,可以增加散列分区,然后进行接合,值得注意的是,接合分区只能用于散列分区中。
接合分区:
ALTER TABLE SALES COALESCA PARTITION;
重命名表分区
将P21更改为P2
ALTER TABLE SALES RENAME PARTITION P21 TO P2;
相关查询
1、跨分区查询
select sum( *) from(select count(*) cn from t_table_SS PARTITION (P200709_1)union allselect count(*) cn from t_table_SS PARTITION (P200709_2));
2、查询表上有多少分区
SELECT * FROM useR_TAB_PARTITIONS WHERE TABLE_NAME='tableName'
![50078acc8caa601370b2d0d24decfcd1.png](https://i-blog.csdnimg.cn/blog_migrate/1ca2ab3daf06cf06cc7ebfa736629750.jpeg)
3、查询索引信息
select object_name, object_type, tablespace_name, sum(value) from v$segment_statistics where statistic_name IN ('physical reads', 'physical write', 'logical reads') and object_type = 'INDEX' group by object_name, object_type, tablespace_name order by 4 desc;
![dc934e83d990282283bf4e33f5de98b4.png](https://i-blog.csdnimg.cn/blog_migrate/2fd6f87cc2a8eb9b05723e73c8f2ac87.jpeg)
4、显示分区表信息
--显示数据库所有分区表的信息select * from DBA_PART_TABLES--显示当前用户可访问的所有分区表信息select * from ALL_PART_TABLES--显示当前用户所有分区表的信息select * from USER_PART_TABLES
![40268987340000b5870485bb668ca4b8.png](https://i-blog.csdnimg.cn/blog_migrate/9d98496b3e65de6bcd8c6c20a831b3a4.jpeg)
5、显示表分区信息
-- 显示数据库所有分区表的详细分区信息select * from DBA_TAB_PARTITIONS--显示当前用户可访问的所有分区表的详细分区信息:select * from ALL_TAB_PARTITIONS--显示当前用户所有分区表的详细分区信息:select * from USER_TAB_PARTITIONS
6、显示子分区信息
--显示子分区信息 显示数据库所有组合分区表的子分区信息:select * from DBA_TAB_SUBPARTITIONS--显示当前用户可访问的所有组合分区表的子分区信息:select * from ALL_TAB_SUBPARTITIONS--显示当前用户所有组合分区表的子分区信息:select * from USER_TAB_SUBPARTITIONS
![71508342c39f38483a6d211c2e87d887.png](https://i-blog.csdnimg.cn/blog_migrate/60883318a27336306e0a25da7b990807.jpeg)
7、显示分区列
-- 显示数据库所有分区表的分区列信息:select * from DBA_PART_KEY_COLUMNS--显示当前用户可访问的所有分区表的分区列信息:select * from ALL_PART_KEY_COLUMNS--显示当前用户所有分区表的分区列信息:select * from USER_PART_KEY_COLUMNS
8、显示子分区列
--显示数据库所有分区表的子分区列信息:select * from DBA_SUBPART_KEY_COLUMNS--显示当前用户可访问的所有分区表的子分区列信息:select * from ALL_SUBPART_KEY_COLUMNS--显示当前用户所有分区表的子分区列信息:select * from USER_SUBPART_KEY_COLUMNS
Oracle分区大致的命令就这些了,大家有需要也可以自己测试一下。
后面会分享更多DBA方面内容,感兴趣的朋友可以关注下!
![d44601b86e268da072b599685c38b38a.png](https://i-blog.csdnimg.cn/blog_migrate/29f6e521d8ff87788854f94b0ea60b9d.jpeg)