oracle表分区的,分区操作,分区查询,⼦分区查询
⼀、摘要
有关表分区的⼀些维护性操作:
注:分区根据具体情况选择。
表分区有以下优点:
1、数据查询:数据被存储到多个⽂件上,减少了I/O负载,查询速度提⾼。
2、数据修剪:保存历史数据⾮常的理想。
3、备份:将⼤表的数据分成多个⽂件,⽅便备份和恢复。
4、并⾏性:可以同时向表中进⾏DML操作,并⾏性性能提⾼。
⼆、分区操作
1. 添加分区
以下代码给SALES表添加了⼀个P3分区
ALTER TABLE SALES ADD PARTITION P3 VALUES LESS THAN(TO_DATE('2003-06-01','YYYY-MM-DD'));
注意:以上添加的分区界限应该⾼于最后⼀个分区界限。
以下代码给SALES表的P3分区添加了⼀个P3SUB1⼦分区
ALTER TABLE SALES MODIFY PARTITION P3 ADD SUBPARTITION P3SUB1 VALUES('COMPLETE');
2. 删除分区
以下代码删除了P3表分区:
ALTER TABLE SALES DROP PARTITION P3;
在以下代码删除了P4SUB1⼦分区:
ALTER TABLE SALES DROP SUBPARTITION P4SUB1;
注意:如果删除的分区是表中唯⼀的分区,那么此分区将不能被删除,要想删除此分区,必须删除表。
3. 截断分区
截断某个分区是指删除某个分区中的数据,并不会删除分区,也不会删除其它分区中的数据。当表中即使只有⼀个分区时,也可以截断该分区。通过以下代码截断分区:
ALTER TABLE SALES TRUNCATE PARTITION P2;
通过以下代码截断⼦分区:
ALTER TABLE SALES TRUNCATE SUBPARTITION P2SUB2;
4. 合并分区
合并分区是将相邻的分区合并成⼀个分区,结果分区将采⽤较⾼分区的界限,值得注意的是,不能将分区合并到界限较低的分区。以下代码实现了P1 P2分区的合并:
ALTER TABLE SALES MERGE PARTITIONS P1,P2 INTO PARTITION P2;
truncate删除数据5. 拆分分区
拆分分区将⼀个分区拆分两个新分区,拆分后原来分区不再存在。注意不能对HASH类型的分区进⾏拆分。
ALTER TABLE SALES SPLIT PARTITION P2 AT(TO_DATE('2003-02-01','YYYY-MM-DD'))
INTO (PARTITION P21,PARTITION P22);
6. 接合分区(coalesca)
结合分区是将散列分区中的数据接合到其它分区中,当散列分区中的数据⽐较⼤时,可以增加散列分区,然后进⾏接合,值得注意的是,接合分区只能⽤于散列分区中。通过以下代码进⾏接合分区:
ALTER TABLE SALES COALESCA PARTITION;
7.重命名表分区
以下代码将P21更改为P2
ALTER TABLE SALES RENAME PARTITION P21 TO P2;
8. 跨分区查询
select sum( *) from (
(select count(*) cn from t_table_SS PARTITION (P200709_1)
union all
select count(*) cn from t_table_SS PARTITION (P200709_2));
9. 查询表上有多少分区
SELECT * FROM useR_TAB_PARTITIONS WHERE TABLE_NAME='tableName'
10. 查询索引信息
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
三、分区查询
1.显⽰所有分区表的信息:
select * from DBA_PART_TABLES
2.显⽰当前⽤户可访问的所有分区表信息:
select * from ALL_PART_TABLES
3.显⽰当前⽤户所有分区表的信息:
select * from USER_PART_TABLES
4.显⽰表分区信息显⽰数据库所有分区表的详细分区信息:
select * from DBA_TAB_PARTITIONS
5.显⽰当前⽤户可访问的所有分区表的详细分区信息:
select * from ALL_TAB_PARTITIONS
6.显⽰当前⽤户所有分区表的详细分区信息:
select * from USER_TAB_PARTITIONS
7.显⽰⼦分区信息显⽰数据库所有组合分区表的⼦分区信息:
select * from DBA_TAB_SUBPARTITIONS
8.显⽰当前⽤户可访问的所有组合分区表的⼦分区信息:
select * from ALL_TAB_SUBPARTITIONS
9.显⽰当前⽤户所有组合分区表的⼦分区信息:
select * from USER_TAB_SUBPARTITIONS
10.显⽰分区列显⽰数据库所有分区表的分区列信息:
select * from DBA_PART_KEY_COLUMNS
11.显⽰当前⽤户可访问的所有分区表的分区列信息:
select * from ALL_PART_KEY_COLUMNS
12.显⽰当前⽤户所有分区表的分区列信息:
select * from USER_PART_KEY_COLUMNS
13.显⽰⼦分区列显⽰数据库所有分区表的⼦分区列信息:
select * from DBA_SUBPART_KEY_COLUMNS
14.显⽰当前⽤户可访问的所有分区表的⼦分区列信息:
select * from ALL_SUBPART_KEY_COLUMNS
15.显⽰当前⽤户所有分区表的⼦分区列信息:
select * from USER_SUBPART_KEY_COLUMNS
16.怎样查询出Oracle数据库中所有的的分区表
select * from user_tables a where a.partitioned='YES'
17.查询表空间⼤⼩
select FILE_NAME,TABLESPACE_NAME,MAXBYTES,MAXBLOCKS,USER_BYTES from dba_data_files;
18.准确计算oracle表分区记录数
1,先对表进⾏分析:
analyze table [table] compute statistics;
2,然后查询表分区记录数
select t.partition_name,t.num_rows from all_tab_partitions t where table_name='table_name'

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。