Alter table table_name enable row movement;oracle
通查在三種情景下,須要啓用row movement。性能
1:分區表spa
當咱們容許分區表的分區鍵是可更新的時候,若是分區鍵的更新致使當前修改的數據條目須要移動到其餘分區,此時就會發生rowid的改變.net
2:閃回操做對象
在閃回操做時,咱們一樣須要開啓表的row movement特性。blog
3:回收空間get
在收縮空間時,也會形成行的移動.hash
Shrink space操做(without compact)會致使全部已經打開的遊標失效,所以須要謹慎使用.it
select owner, row_movement from dba_tables where table_name = 'A'; 查看當前table 的 row 狀態io
1、建立分區表
分區表分爲四類:一、範圍分區表 二、列表分區表 三、哈希分區表 四、組合分區表
CREATE TABLE range_example(
range_key_column DATE,
DATA VARCHAR2(20),
ID integer
) PARTITION BY RANGE(range_key_column)
(
PARTITION part01 VALUES LESS THAN (TO_DATE('2008-07-1 00:00:00','yyyy-mm-dd hh24:mi:ss')) TABLESPACE tbs01,
PARTITION part02 VALUES LESS THAN (TO_DATE('2008-08-1 00:00:00','yyyy-mm-dd hh24:mi:ss')) TABLESPACE tbs02,
PARTITION part03 VALUES LESS THAN (TO_DATE('2008-09-1 00:00:00','yyyy-mm-dd hh24:mi:ss')) TABLESPACE tbs03
);
CREATE TABLE list_example(
dname VARCHAR2(10),
DATA VARCHAR2(20)
)PARTITION BY LIST(dname)
(
PARTITION part01 VALUES('ME','PE','QC','RD'),
PARTITION part02 VALUES('SMT','SALE')
);
CREATE TABLE hash_example(
hash_key_column DATE,
DATA VARCHAR2(20)
) PARTITION BY HASH(hash_key_cloumn)
(
PARTITION part01 ,
PARTITION part02
)
CREATE TABLE range_hash_example(
range_column_key DATE,
hash_column_key INT,
DATA VARCHAR2(20)
)
PARTITION BY RANGE(range_column_key)
SUBPARTITION BY HASH(hash_column_key) SUBPARTITIONS 2
(
PARTITION part_1 VALUES LESS THAN (TO_DATE('2008-08-01','yyyy-mm-dd'))(
SUBPARTITION part_1_sub_1,
SUBPARTITION part_1_sub_2,
SUBPARTITION part_1_sub_3
),
PARTITION part_2 VALUES LESS THAN (TO_DATE('2008-09-01','yyyy-mm-dd'))(
SUBPARTITION part_2_sub_1,
SUBPARTITION part_2_sub_2
)
);
普通錶轉爲分區表
分區表
優勢:
a.改善查詢性能:對分區對象的查詢能夠僅搜索本身關心的分區,提升檢索速度。
b.加強可用性:若是表的某個分區出現故障,表在其餘分區的數據仍然可用。
c.維護方便:若是表的某個分區出現故障,須要修復數據,只修復該分區便可。
d.均衡I/O:能夠把不一樣的分區映射到磁盤以平衡I/O,改善整個系統性能。
缺點:
分區表相關,已經存在的表沒有方法能夠直接轉化爲分區表。不過oracle提供了在線重定義表的功能