對Maxvalue上限範圍分割槽進行spilt操作
Oracle分割槽表是對關鍵資料表,特別是海量資料表的一種普適性很好的技術方案。藉助分割槽表,通常都可以有效的提升資料表訪問效能,增強系統可管理能力。對分割槽表設計通常具有三個方面的決策點,分別為分割槽型別分割槽鍵、建表分割槽規劃和分割槽儲存規劃。
ü 分割槽型別分割槽鍵:資料表使用什麼分割槽鍵和分割槽型別進行分割槽。這個通常是分割槽表設計中最重要的環節。目前,Oracle支援範圍Range、列表List、雜湊Hash等分割槽型別。不同型別的分割槽還可以實現組合Composite分割槽。分割槽鍵的選取方式很多,大都是對資料列或者列的處理值進行。選擇分割槽型別、分割槽鍵的準則有兩個:易於管理和均衡化訪問。易於管理的含義就是讓系統中分割槽的資料不宜過多,過多的分割槽只能帶來管理上的困難。均衡化訪問就是儘可能實現將資料訪問集中在分割槽內部,儘可能避免出現跨分割槽型別操作;
ü 建表分割槽規劃:在開發和測試環境下,我們可以比較隨意的進行資料表分割槽的增加修改和刪除。但是對真正的海量資料,特別是生產環境下的海量資料,要提前規劃出預想分割槽。比如,對於一個按自然月分割槽的資料表,最好事先規劃出提前兩到三年的資料分割槽。如果分割槽設定過小或者缺少,那麼在生產環境下進行表重構的壓力是比較大的;
ü 分割槽儲存規劃:同一般資料表的不同,分割槽表是多個段segment組成的。這樣,資料表就可以貯存在不同tablespaces中的可能,更進一步可以分佈在不同的資料檔案和磁碟上。分割槽表是否要使用多tablespace儲存以分散IO,要進行統一嚴謹的規劃;
範圍分割槽(Range Partition)是我們經常使用分割槽型別。Range Partition將資料依據資料列範圍上下限設定為不同的分割槽。最後的MaxValue關鍵字,可以保證資料一定會落入分割槽。問題來了,如果我們沒有預先規劃好分割槽,就可能出現多個資料分割槽集中的情況。
比如:我們使用日期進行分割槽,2010年每個月都劃分了分割槽,大於2010年12月的月份都用Maxvalue進行收底。但是到了2011年,發現系統仍在執行,2011年資料全部集中到了最後分割槽。這種情況如何處理呢?本篇使用spilt partition語句進行型別情況的處理演示。
1、 資料環境準備
我們使用Oracle 10gR2環境進行試驗。
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 – Production
資料表emp_par設定為分割槽表,使用sal列進行範圍分割槽。資料表採用2000和4000兩個範圍。最後使用Maxvalue進行過大值容納。
SQL> create table emp_par (sal number(7,2))
2 partition by range(sal)
3 (partition emp_p1 values less than (2000),
4 partition emp_p2 values less than (4000),
5 partition emp_po values less than (MAXVALUE));
Table created
Executed in 0.031 seconds
//插入了一些資料;
SQL> select table_name, partition_name, high_value, tablespace_name, num_rows from dba_tab_partitions where table_name='EMP_PAR';
TABLE_NAME PARTITION_NAME HIGH_VALUE TABLESPACE_NAME NUM_ROWS
----------------------------------------- ----------------------
EMP_PAR EMP_P1 2000 SYSTEM 8
EMP_PAR EMP_P2 4000 SYSTEM 5
EMP_PAR EMP_PO MAXVALUE SYSTEM 3
Executed in 0.078 seconds
三個分割槽中,均包括了一些資料,其中的emp_po分割槽中包括資料如下。
SQL> select * from emp_par where sal>4000;
SAL
---------
5000.00
6000.00
8000.00
Executed in 0.047 seconds
2、Spilt分割槽操作
需求:將emp_po分割槽進行再次劃分,將4000到6000的資料作為一個新的分割槽出現。emp_po之後就包括6000以上的資料。
實現這個分割槽操作,可以按照如下步驟完成:
ü 建立資料表,儲存新分割槽資料
建立一個資料表,使用新的分割槽條件將資料儲存出來。之後,將原有資料表中相應記錄剔除掉。
SQL> create table emp_temp as select * from emp_par where sal>=4000 and sal<6000;
Table created
Executed in 0.078 seconds
SQL> delete emp_par where sal>=4000 and sal<6000;
1 row deleted
Executed in 0 seconds
ü 使用spilt partition劃分目標分割槽
使用alter table xxx spilt partition進行分割槽。
SQL> alter table emp_par split partition EMP_PO at(6000) into (partition EMP_P3, partition EMP_PO);
Table altered
Executed in 0.031 seconds
從emp_po的基礎上,劃分出新的分割槽emp_p3和emp_po。分割槽標準點在6000的位置上。
ü 使用exchange partition進行分割槽替換
下面,要使用exchange partition進行分割槽資料表替換。將資料表emp_temp替換為emp_p3分割槽。
SQL> alter table emp_par exchange partition EMP_P3 with table emp_temp;
Table altered
Executed in 0.046 seconds
在之前筆者的文章中,已經探討過exchange partition的本質(http://space.itpub.net/17203031/viewspace-704826)。exchange partition不是進行資料複製,而是進行後設資料替換。將兩個段segment物件後設資料進行交換。所以相對於複製,exchange partition操作更高效些。
此時,我們檢視資料資訊。
SQL> select table_name, partition_name, high_value, tablespace_name, num_rows from dba_tab_partitions where table_name='EMP_PAR';
TABLE_NAME PARTITION_NAME HIGH_VALUE TABLESPACE_NAME NUM_ROWS
----------- ------------------------------ -----------------------
EMP_PAR EMP_P1 2000 SYSTEM 8
EMP_PAR EMP_P2 4000 SYSTEM 5
EMP_PAR EMP_P3 6000 SYSTEM
EMP_PAR EMP_PO MAXVALUE SYSTEM 3
Executed in 0.078 seconds
SQL> exec dbms_stats.gather_table_stats(user,'EMP_PAR',cascade => true);
PL/SQL procedure successfully completed
SQL> select table_name, partition_name, high_value, tablespace_name, num_rows from dba_tab_partitions where table_name='EMP_PAR';
TABLE_NAME PARTITION_NAME HIGH_VALUE TABLESPACE_NAME NUM_ROWS
------------------------------- --------------- -----------------------
EMP_PAR EMP_P1 2000 SYSTEM 8
EMP_PAR EMP_P2 4000 SYSTEM 5
EMP_PAR EMP_P3 6000 SYSTEM 1
EMP_PAR EMP_PO MAXVALUE SYSTEM 2
Executed in 0.063 seconds
3、 結論
分割槽表是一種需要我們傾注很多研究精力和管理精力的物件。運維DBA日常工作中很多操作都是圍繞著分割槽表進行的。對關鍵資料表採用分割槽表技術,意味著很多的決策方案的制定。進行合理的分割槽規劃方案,進行合理的未來預計,可以減少我們很多的維護工作。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17203031/viewspace-704922/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 範圍分割槽
- 檢視分割槽範圍
- Oracle分割槽表基礎運維-02範圍分割槽Oracle運維
- Oracle分割槽表基礎運維-07增加分割槽(1範圍分割槽)Oracle運維
- mysql 進行表分割槽MySql
- MySql資料分割槽操作之新增分割槽操作MySql
- Linux系統如何進行分割槽?swap分割槽是什麼?Linux
- Spark操作Hive分割槽表SparkHive
- Linux系統對分割槽有哪些要求?操作方法!Linux
- win10怎麼快速給磁碟分割槽_win10如何進行磁碟分割槽Win10
- 用GParted給linux系統進行磁碟分割槽?Linux
- kafka指定key進行分割槽遇到的問題Kafka
- 多路徑格式化,對磁碟操作提示要分割槽,對別名操作正常格式化
- SSD固態硬碟要分割槽嗎?SSD固態硬碟分割槽與不分割槽的效能對比硬碟
- DiskGenius分割槽行動硬碟硬碟
- Linux下進行格式化行動硬碟(U盤)以及分割槽Linux硬碟
- linux掛載新硬碟並進行分割槽格式化Linux硬碟
- 對oracle分割槽表的理解整理Oracle
- 對Oracle分割槽表進行表空間遷移並處理ORA-14511問題Oracle
- Linux分割槽方案、分割槽建議Linux
- win10新增硬碟分割槽怎麼操作 win10硬碟如何增加新分割槽Win10硬碟
- Linux 擴充套件磁碟分割槽(命令列操作)Linux套件命令列
- thinkpad自帶win10系統怎麼進行分割槽 thinkpad電腦win10系統如何分割槽ThinkPadWin10
- oracle分割槽表和分割槽表exchangeOracle
- PostgreSQL/LightDB 分割槽表之分割槽裁剪SQL
- Linux系統對分割槽有哪些要求?Linux
- Linux 分割槽擴容(根分割槽擴容,SWAP 分割槽擴容,掛載新分割槽為目錄)Linux
- win10硬碟分割槽怎麼分_win10系統如何對硬碟分割槽Win10硬碟
- Oracle分割槽表基礎運維-07增加分割槽(2 HASH分割槽)Oracle運維
- oracle分割槽表和非分割槽表exchangeOracle
- 非分割槽錶轉換成分割槽表
- [oracle] expdp 匯出分割槽表的分割槽Oracle
- WINDOWS還原系統後原多個分割槽合併為一個分割槽後怎麼進行資料恢復Windows資料恢復
- python可以對excel進行那些操作PythonExcel
- win10無損分割槽的步驟_win10如何對硬碟無損分割槽Win10硬碟
- openGauss 分割槽
- mysql 分割槽MySql
- 分割槽Partition
- lvs 分割槽