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分割槽表基礎運維-04列表分割槽Oracle運維
- Oracle分割槽表基礎運維-09刪除分割槽Oracle運維
- Oracle分割槽表基礎運維-05組合分割槽Oracle運維
- Oracle分割槽表基礎運維-02範圍分割槽Oracle運維
- Oracle分割槽表基礎運維-07增加分割槽(2 HASH分割槽)Oracle運維
- Oracle分割槽表基礎運維-07增加分割槽(3列表分割槽)Oracle運維
- Oracle分割槽表基礎運維-06分割槽表索引Oracle運維索引
- Oracle分割槽表基礎運維-07增加分割槽(1範圍分割槽)Oracle運維
- Oracle分割槽表基礎運維-01分割槽表分類Oracle運維
- Oracle分割槽表基礎運維-07增加分割槽(4 RANGE_HASH)Oracle運維
- Oracle分割槽表基礎運維-07增加分割槽(5RANGE_LIST)Oracle運維
- Oracle分割槽表基礎運維-07增加分割槽(6RANGE_RANGE)Oracle運維
- Oracle分割槽表基礎運維-08Coalescing PartitionsOracle運維
- oracle分割槽表和分割槽表exchangeOracle
- oracle分割槽表和非分割槽表exchangeOracle
- [oracle] expdp 匯出分割槽表的分割槽Oracle
- oracle 分割槽表move和包含分割槽表的lob moveOracle
- ORACLE分割槽表梳理系列Oracle
- PostgreSQL/LightDB 分割槽表之分割槽裁剪SQL
- oracle 線上重新定義,普通表改變分割槽表,分割槽表可以更改型別、分割槽欄位等Oracle型別
- oracle將表配置為分割槽表Oracle
- oracle 普通表-分割槽表改造流程Oracle
- 非分割槽錶轉換成分割槽表
- Oracle 12.2之後ALTER TABLE .. MODIFY轉換非分割槽表為分割槽表Oracle
- PG的非分割槽表線上轉分割槽表
- 【MYSQL】 分割槽表MySql
- 對oracle分割槽表的理解整理Oracle
- Oracle SQL調優之分割槽表OracleSQL
- Oracle12c:建立主分割槽、子分割槽,實現自動分割槽插入效果Oracle
- 移動分割槽表和分割槽索引的表空間索引
- Oracle drop分割槽表單個分割槽無法透過閃回恢復Oracle
- 【Linux】MBR磁碟分割槽表只能有四個分割槽?Linux
- Linux交換分割槽相關都有哪些命令?Linux運維基礎Linux運維
- Oracle 12C新特性-線上把非分割槽錶轉為分割槽表Oracle
- ORACLE刪除-表分割槽和資料Oracle
- MySQL 分割槽表探索MySql
- 分割槽表-實戰
- Linux分割槽方案、分割槽建議Linux