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;

 

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'  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM