老張拉呱:thomas zhang,甲骨文雲平臺事業部資深技術顧問,2008年加入甲骨文公司資料庫諮詢部門,10+年甲骨文解決方案諮詢支援經驗,資深系統工程師、Oracle OCM認證專家,具有豐富的Cloud /IT專案經驗。目前主要負責甲骨文中國北方區(醫院/衛生、交通、製造、教育、政府、證券、媒體、金融、零售等行業)客戶的資料庫、中介軟體、IaaS/PaaS、整合系統等相關技術解決方案諮詢工作。
簽名:我為人人,人人為我,三人行,必有我師。
新浪微博: http://weibo.com/tomszrp
Oracle 的分割槽是一種“分而治之”的技術,透過將大表、索引分成可以獨立管理的、小的 Segment,從而避免了對每個物件作為一個大的、單獨的 Segment 進行管理,為海量資料訪問提供了可伸縮的效能。自從 Oracle 引入分割槽技術以來,Oracle 公司在每次推出重要版本時都會對分割槽方法或功能上有所增強。從後面的分割槽方法中我們也可以清晰的看到 Oracle 分割槽技術的發展、成長歷程。Oracle 公司一直在致力於不斷完善分割槽技術,確保滿足所有的業務需求。
版本 | 新支援的分割槽方法 | 說明 | |
7.3.x | 邏輯分割槽/分割槽檢視 | ◊在Oracle 8版本前,DBAs和Consultants 根據系統需要實現了”Home-Grown”(自產的/土生土長的)分割槽方法,他們藉助UNION-ALL Views或Partition Views(7.3開始提供的分割槽檢視,需要配合初始化引數PARTITION_VIEW_ENABLED=TRUE來使用Optimizer Prunes特性)實現,即使到今天,如果不採購Oracle Database Enterprise Edition下的Partitioning Option License,從許可上來講,也必須藉助這種Home-Grown的方法來實現。 ◊這種方法對DML是不透明的 ◊Partition Views in 7.3: Examples and Tests (檔案 ID 43194.1) |
|
8.0.x | Oracle 8.5 開始支援分割槽表/索引,
首先提供範圍分割槽(range) |
1)使Oracle成為了第一個支援物理分割槽的RDBMS供應商 2)Oracle 8 僅支援表和索引級的分割槽( Clustered tables/indexes and snapshots are not supported) 3)Oracle 8中不可以update partition key columns,否則會遇到ORA-14402錯誤 4)只實現了靜態的分割槽裁剪功能 5)支援索引的Local and global Range |
|
8i | 新增加希分割槽(hash)
開始支援範圍-雜湊複合分割槽(range-hash) |
8.1.7實現了動態智慧裁剪(Dynamic partition pruning)和智慧連線(Partition-wise joins) | |
9iR1 | 新增串列分割槽(list)
開始支援全域性索引維護 |
1)在9i(9.0.1)之前, IOT表只支援range分割槽,實際上是從8.1.5版本開始支援對IOT的range分割槽 2)從9i開始支援對IOT的range、hash分割槽 3)在9iR2 hash分割槽支援IOT表中包含lob列(9i中暫不支援包含lob型別的IOT hash 分割槽) 4)支援Global index maintenance |
|
9iR2 | 開始支援範圍-串列複合分割槽(range-list) | 1)Fast Split 2)DEFAULT Partition for LIST |
|
10gR1 | 1)增加了對索引組織表(IOT) 串列(list)分割槽功能 2)增加了對全域性分割槽索引的hash分割槽策略 3)10gR2開始一個表可以支援1024K-1個分割槽(以前是64K-1) |
1)擴充套件了global indexes on partitioned IOTs的維護支援 2)Local partitioned bitmap indexes on partitioned IOTs 3)LOB columns are now supported in all types of partitioned IOTs. 4)fast split partition支援分割槽IOT表 |
|
10gR2 | |||
11g | Interval Partitioning | 實現了範圍分割槽的自動化 | |
System Partitioning(系統分割槽) | 在這個新的型別中,我們不需要指定任何分割槽鍵,資料會進入哪個分割槽完全由應用程式決定,實際上也就是由SQL來決定,終於我們在Insert陳述句中可以指定插入哪個分割槽了 | ||
More Composite Partitioning (更多的複合分割槽) | 在9i、10g中,複合分割槽只支援Range-List和Range-Hash 在11gR1中複合分割槽的型別大大增加,現在Range,List,Interval都可以作為Top level分割槽,而Second level則可以是Range,List,Hash,也就是在11gR1中可以有3*3=9種複合分割槽,可以滿足更多的業務需要. 在11gR2中,又增加了hash-hash複合分割槽 |
||
Reference Partitioning(外來鍵也叫取用分割槽) | 分割槽方案的引入是以相關表格透過相同的分割槽策略獲得好處作為前提設想的。Detail表格透過PK-FK關係從master表格繼承相同的分割槽方案.我們不需要把分割槽鍵儲存在detail表格中,透過關鍵詞“PARTITION BY REFERENCE,detail表格獲得master表格的分割槽方案 | ||
虛擬列分割槽(Virtual Column-Based Partitioning) | 在11g之前,只有分割槽鍵存在於表格中才可以實現對錶格的分割槽功能。而Oracle 11g的新功能“虛擬列”打破了這一限制,允許透過使用表格中的一列或多列的計算式作為分割槽鍵。 | ||
分割槽建議器 | SQL Access Advisor 不但可以為索引、物化檢視和物化檢視日誌提供建議,還可以生成分割槽建議。執行 SQL Access Advisor 生成的建議,您將會看到預期的效能收益。可以手動實施生成的指令碼,也可以將其提交給 Oracle Enterprise Manager 中的一個佇列。藉助分割槽建議擴充套件,客戶不僅可以獲得專門針對分割槽的建議,還可以獲得 SQL Access Advisor 的更全面的整體建議,從而在總體上提高 SQL 陳述句的整體效能。
Partition Advisor 已整合到 SQL Access Advisor 中,是 Oracle Tuning Pack(一個額外的許可選件)的組成部分。 |
||
12cR1 | Online Partition 維護 | 1)線上移動、壓縮分割槽或子分割槽,不阻賽DML操作
alter table sales move partition p1 tablespace lowtbs update indexes online; alter table sales move partition p1 ROW STORE COMPRESS BASIC update indexes online;
select table_name,compression,compress_for from dba_tables; 參見示例 2)Restrictions on the ONLINE Clause –詳見官方檔案裡的說明 |
|
Reference Partitioning的增強 | 1)支援Interval-Reference分割槽 2)提供truncate partition、exchange [SUB]partition操作的CASCADE級聯選項 |
||
多分割槽維護操作 | add/truncate/drop/split/merge分割槽操作允許在一個操作中一次操作多個分割槽 | ||
部分索引 | Local和Global indexes可以在部分分割槽上建立,這個特性(Partial Indexing on Partitioned Tables)是透過表表上的indexing屬性來控制的。註意,部分索引不能建立全域性唯一索引。 | ||
全域性索引非同步維護 | 1)對於Drop和Truncate Parition 操作,支援非同步維護全域性索引,Update Indexes字句僅僅維護metadata,真正的索引維護是透過一個JOB(SYS.PMO_DEFERRED_GIDX_MAINT_JOB)非同步完成的。預設情況下該job是每天凌晨2:00執行,也可手工呼叫dbms_part.cleanup_gidx來完成
PROCEDURE CLEANUP_GIDX – To clean up the global indexes 2)DBA_INDEXES 和DBA_IND_PARTITIONS新增加了ORPHANED_ENTRIES列。該列用來指出whether or not a global index (partition) contains stale entries due to deferred index maintenance during DROP/TRUNCATE PARTITION, or MODIFY PARTITION operations. 有三種取值: |
||
12cR2 | Multi-Column List Partition | 1)12.2.0.1.0開始支援,最大16個列
2)支援分割槽和子分割槽 3)支援heap tables、external tables 4)支援Reference Partitioning and Auto-List |
|
Auto-List Partitioning | 1)實現了list分割槽的自動化管理,類似11g版本開始支援的Interval Partitioning
2)沒有default分割槽,必須至少指定一個分割槽 3)系統自動增加的分割槽會自動命名 4)list分割槽到Auto-List可以轉換,前提是List分割槽表定義上沒有DEFAULT分割槽 |
||
Interval Subpartioning | 1) 從11g版本中開始支援的Interval Partitioning技術不支援子分割槽,從12cR2版本開始支援。
2) Interval Subpartioning和Interval Partitioning的使用條件及要求是一樣的,如: –沒有MAXVALUE –沒有Add Partition 3) Interval-subpartitoning strategy set at table level 4) 每個表最大100萬個[sub]partitions –From one partition with one million subpartitions .. |
||
Partitioned External Tables | Partitioned external tables will provide both the functionality to map partitioned Hive tables into the Oracle ecosystem as well as providing declarative partitioning on top of any Hadoop Distributed File System (HDFS) based data store. | ||
分割槽與Sharding | –資料垂直分割槽到多個獨立的資料庫中 –線性擴充套件 –自動部署 –支援HASH、RANGE、LIST和複合方式的自動資料分割槽 –自動Rebalance和Resharding |
||
分割槽表相關維護維護方面的增強 | |||
Online分割槽維護(DDL)的 | 11g | Create index Add column Add constraint |
|
12cR1 | Drop index Drop Constraint Alter table set unused column Alter table move partition |
||
12cR2 | Alter table modify non-partitioned table to partitioned table Alter table move online for heap tables Alter table split partition online |
||
Filtered分割槽維護操作 | 該特性允許我們在維護(Move/merge/split)分割槽表的時候進行資料過濾
alter table orders_move_part |
||
快速建立分割槽交換中間表 | Oracle Database 12c 第 2 版中的FOR EXCHANGE WITH子句消除了分割槽交換的檢測性工作,Indexes are not created as part of this command. eg:
create table sales_exch for exchange with sales; |
||
只讀分割槽 | 分割槽/子分割槽可以被設定為read only或read write(default)。
註意:只讀分割槽不允許drop,但對應的base table是可以被drop的,所以不要寄望於這個做更加級別的安全保護,還是要配合許可權和其他安全措施來保護。 tips:這樣從12cR2/18c開始,可以做到Service->Oracle_Home->Instance–>PDB->Tablespace ->Table/MV/外部表->Partition->subpartition等各個級別的只讀設定,配合物件只讀許可權(read)、系統只讀許可權(read any table)及Schema Only Accounts等特性,可以滿足各個層次的資料保護需求。 |
||
18c | 18.1.0 | Enhanced Parallel Partition-wise Operations
參見這裡 · Partition-Wise Operations · Partition-Wise Joins in a Data Warehouse 相關知識:Partition-Wise Operations – New Features in 12c and 18c |
|
Modifying the Partitioning Strategy 參見這裡的檔案說明。 | |||
Online Merging of Partitions and Subpartitions
這是18c(18.1.0)中針對分割槽技術的一個很酷的改進,在不影響業務的情況下,可以線上合併分割槽或子分割槽。參見這裡的檔案說明。 |
|||
19c | 19.2 | Hybrid partitioned tables–混合分割槽表 |
原創:老張拉呱