Oracle分割槽表基礎運維-03HASH分割槽
Oracle 分割槽表基礎運維 -03HASH 分割槽
Hash Partitioning
Hash partitioning maps data to partitions based on a hashing algorithm that Oracle applies to the partitioning key that you identify.
The hashing algorithm evenly distributes rows among partitions, giving partitions approximately the same size.
Hash partitioning is the ideal method for distributing data evenly across devices. Hash partitioning is also an easy-to-use alternative to range partitioning, especially when the data to be partitioned is not historical or has no obvious partitioning key.
建立 HASH 分割槽表
---建立hash分割槽表hash_part_tab
create table hash_part_tab ( id number , deal_date date , area_code number , contents varchar2 ( 4000 ))
partition by hash ( deal_date )
PARTITIONS 12 ;
--以下是插入一整年日期隨機數和表示福建地區號含義(591到599)的隨機數記錄,共有10萬條,如下:
insert into hash_part_tab
( id , deal_date , area_code , contents )
select rownum ,
to_date ( to_char ( sysdate - 365 , 'J' ) +
TRUNC ( DBMS_RANDOM.VALUE ( 0 , 365 )),
'J' ),
ceil ( dbms_random.value ( 590 , 599 )),
rpad ( '*' , 400 , '*' )
from dual
connect by rownum <= 100000 ;
commit ;
---檢視當前使用者下有哪些分割槽表
select TABLE_NAME from user_tables a where a.partitioned = 'YES' ;
---檢視分割槽表名,分割槽名,表空間等資訊
select table_name , partition_name , tablespace_name , high_value
from user_tab_partitions
where table_name = 'HASH_PART_TAB' ;
---通過object_id檢視每個分割槽資料分佈情況
select * from dba_segments where segment_name = 'HASH_PART_TAB' ;
select * from dba_objects where object_name = 'HASH_PART_TAB' ;
select dbms_rowid.rowid_object ( rowid ) obj_id , count (*)
from HASH_PART_TAB
group by dbms_rowid.rowid_object ( rowid )
order by 1 ;
hash partition不能直接增加分割槽,而是split當前分割槽 , hash bucket總是2的N次方,如果分割槽數不足,則會合並資料,產生不均衡的情況,這樣增加分割槽時,只需要對應分割槽的資料做split即可。同理,減少分割槽也不是簡單的drop,而是合併分割槽。
例如上面我們建立了 12 個分割槽,實際上 hash bucket 數量是 2 的 4 次方,既 16 個 hash bucket ,多出的 4 個 hash bucket 會進行合併,會產生資料不均,也就是有 4 個分割槽的資料會比較多。即 OBJ_ID=77373,77374,77375,77376 四個分割槽資料較多。
---增加新分割槽P1
alter table HASH_PART_TAB add partition P1 ;
此時 OBJ_ID=77373 的分割槽,分裂成 OBJ_ID=77392 和 OBJ_ID=77393 ,資料由 11191 分成 5761 和 5431 分佈存在這兩個分割槽裡。
---增加新分割槽P2
alter table HASH_PART_TAB add partition P2 ;
---增加新分割槽P3
alter table HASH_PART_TAB add partition P3 ;
---增加新分割槽P4
alter table HASH_PART_TAB add partition P4 ;
此時有16 個分割槽了,是 2 的 4 次方,資料較比 12 個分割槽時,分佈更均勻了。
---增加新分割槽P5,第一個分割槽OBJ_ID=77369分裂成兩個新分割槽,其他分割槽資料不變。
alter table HASH_PART_TAB add partition P5 ;
HASH 分割槽表不能通過如下方式進行刪除
alter table HASH_PART_TAB drop partition P5 ;
ORA-14255: table is not partitioned by Range, List, Composite Range or Composite List method
歡迎關注我的微信公眾號"IT小Chen",共同學習,共同成長!!!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29785807/viewspace-2692265/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle分割槽表基礎運維-06分割槽表索引Oracle運維索引
- Oracle分割槽表基礎運維-01分割槽表分類Oracle運維
- Oracle分割槽表基礎運維-04列表分割槽Oracle運維
- Oracle分割槽表基礎運維-02範圍分割槽Oracle運維
- Oracle分割槽表基礎運維-05組合分割槽Oracle運維
- Oracle分割槽表基礎運維-09刪除分割槽Oracle運維
- Oracle分割槽表基礎運維-07增加分割槽(2 HASH分割槽)Oracle運維
- Oracle分割槽表基礎運維-07增加分割槽(3列表分割槽)Oracle運維
- Oracle分割槽表基礎運維-07增加分割槽(1範圍分割槽)Oracle運維
- Oracle分割槽表基礎運維-07增加分割槽(4 RANGE_HASH)Oracle運維
- Oracle分割槽表基礎運維-07增加分割槽(5RANGE_LIST)Oracle運維
- Oracle分割槽表基礎運維-07增加分割槽(6RANGE_RANGE)Oracle運維
- Oracle分割槽表基礎運維-08Coalescing PartitionsOracle運維
- oracle分割槽表和分割槽表exchangeOracle
- Oracle分割槽表及分割槽索引Oracle索引
- oracle分割槽表和非分割槽表exchangeOracle
- oracle分割槽表的維護Oracle
- 【轉】Oracle分割槽表維護Oracle
- 簡單ORACLE分割槽表、分割槽索引Oracle索引
- 分割槽表基礎介紹
- Oracle 表分割槽Oracle
- oracle分割槽表Oracle
- oracle表分割槽Oracle
- Oracle 分割槽表Oracle
- [oracle] expdp 匯出分割槽表的分割槽Oracle
- ORACLE分割槽表梳理系列(二)- 分割槽表日常維護及注意事項Oracle
- Oracle帶區域性分割槽索引的分割槽表刪除舊分割槽新增新分割槽Oracle索引
- 深入學習Oracle分割槽表及分割槽索引Oracle索引
- 全面認識oracle分割槽表及分割槽索引Oracle索引
- oracle 分割槽表move和包含分割槽表的lob moveOracle
- Oracle 建立分割槽表Oracle
- ORACLE分割槽表管理Oracle
- 全面學習分割槽表及分割槽索引(13)--分隔表分割槽索引
- INTERVAL分割槽表鎖分割槽操作
- 如何查詢分割槽表的分割槽及子分割槽
- 全面學習分割槽表及分割槽索引(9)--刪除表分割槽索引
- 全面學習分割槽表及分割槽索引(11)--合併表分割槽索引
- 全面學習分割槽表及分割槽索引(12)--修改list表分割槽索引