Oracle 12C 新特性之表分割槽或子分割槽的線上遷移
Oracle 12c 中遷移表分割槽或子分割槽到不同的表空間不再需要複雜的過程。與之前版本中未分割槽表進行線上遷移類似,表分割槽或子分割槽可以線上或是離線遷移至一個不同的表空間。當指定了 ONLINE 語句,所有的 DML 操作可以在沒有任何中斷的情況下,在參與這一過程的分割槽或子分割槽上執行。與此相反,分割槽或子分割槽遷移如果是在離線情況下進行的,DML 操作是不被允許的。
-- 建立實驗表
CREATE TABLE p_andy
(ID number(10), NAME varchar2(40))
PARTITION BY RANGE (id)
(PARTITION p1 VALUES LESS THAN (10),
PARTITION p2 VALUES LESS THAN (20),
PARTITION p3 VALUES LESS THAN (30),
PARTITION p4 VALUES LESS THAN (40)
);
Table created.
-- 插入資料
SQL>
begin
for i in 1 .. 39 loop
insert into p_andy values(i,'andyi');
end loop ;
commit;
end;
/
PL/SQL procedure successfully completed.
-- 建立一個全域性非分割槽索引
SQL> create index idx_pandy_id on p_andy(id);
Index created.
-- 檢視索引狀態
SQL>
col index_name for a25
select table_name,index_name,status,blevel,leaf_blocks,orphaned_entries from user_Indexes where index_name ='IDX_PANDY_ID';
TABLE_NAME INDEX_NAME STATUS BLEVEL LEAF_BLOCKS ORP
------------------------- ------------------------- -------- ---------- ----------- ---
P_ANDY IDX_PANDY_ID VALID 0 1 NO
-- 檢視錶分割槽狀態與分割槽所在的表空間
SQL> select table_name,partition_name,PARTITION_POSITION,tablespace_name,HIGH_VALUE from user_tab_partitions where table_name='P_ANDY';
TABLE_NAME PARTITION_NAME PARTITION_POSITION TABLESPACE_NAME HIGH_VALUE
------------------------- ------------------------- ------------------ ------------------------------ ------------
P_ANDY P1 1 USERS 10
P_ANDY P2 2 USERS 20
P_ANDY P3 3 USERS 30
P_ANDY P4 4 USERS 40
-- 遷移表分割槽p1表空間 ,並帶 UPDATE INDEXES ONLINE 引數。
SQL> ALTER TABLE p_andy move PARTITION p1 TABLESPACE bbb UPDATE INDEXES ONLINE;
Table altered.
說明:引數 UPDATE INDEXES ONLINE 遷移表分割槽或子分割槽時維護表上任何本地或全域性的索引。此外,當使用ONLINE 語句時,DML 操作是不會中斷的。引入加鎖機制來完成這一過程,當然它也會導致效能下降並會產生大量的 redo,這取決於分割槽和子分割槽的大小。
-- 檢視錶分割槽狀態與分割槽所在的表空間
SQL> select table_name,partition_name,PARTITION_POSITION,tablespace_name,HIGH_VALUE from user_tab_partitions where table_name='P_ANDY';
TABLE_NAME PARTITION_NAME PARTITION_POSITION TABLESPACE_NAME HIGH_VALUE
------------------------- ------------------------- ------------------ ------------------------------
P_ANDY P1 1 BBB 10
P_ANDY P2 2 USERS 20
P_ANDY P3 3 USERS 30
P_ANDY P_MERGE 4 USERS 40
-- 檢視索引狀態
SQL> select table_name,index_name,status,blevel,leaf_blocks,orphaned_entries from user_Indexes where index_name ='IDX_PANDY_ID';
TABLE_NAME INDEX_NAME STATUS BLEVEL LEAF_BLOCKS ORP
------------------------- ------------------------- -------- ---------- ----------- ---
P_ANDY IDX_PANDY_ID VALID 0 1 YES
-- 遷移表分割槽p2表空間 ,不帶 UPDATE INDEXES ONLINE 引數。
SQL> ALTER TABLE p_andy move PARTITION p2 TABLESPACE bbb ;
Table altered.
-- 檢視索引狀態
SQL> select table_name,index_name,status,blevel,leaf_blocks,orphaned_entries from user_Indexes where index_name ='IDX_PANDY_ID';
TABLE_NAME INDEX_NAME STATUS BLEVEL LEAF_BLOCKS ORP
------------------------- ------------------------- -------- ---------- ----------- ---
P_ANDY IDX_PANDY_ID UNUSABLE 0 1 NO
說明:不帶 UPDATE INDEXES ONLINE 引數,索引會失效,需要手工 rebulid 。
-- 重建索引
SQL> ALTER INDEX IDX_PANDY_ID REBUILD PARALLEL (DEGREE 2);
Index altered.
-- 檢視索引狀態
SQL> select table_name,index_name,status,blevel,leaf_blocks,orphaned_entries from user_Indexes where index_name ='IDX_PANDY_ID';
TABLE_NAME INDEX_NAME STATUS BLEVEL LEAF_BLOCKS ORP
------------------------- ------------------------- -------- ---------- ----------- ---
P_ANDY IDX_PANDY_ID VALID 0 1 NO
補充:如果分割槽或分割槽索引比較大,可以使用並行move或rebuild,PARALLEL (DEGREE 2) 如:
ALTER TABLE table_name move SUBPARTITION sub_name TABLESPACE tts_name PARALLEL (DEGREE 2);
ALTER INDEX idx_name REBUILD TABLESPACE tts_name PARALLEL (DEGREE 2);
ALTER INDEX local_name REBUILD SUBPARTITION sub_name TABLESPACE tts_name PARALLEL (DEGREE 2);
-- 建立實驗表
CREATE TABLE p_andy
(ID number(10), NAME varchar2(40))
PARTITION BY RANGE (id)
(PARTITION p1 VALUES LESS THAN (10),
PARTITION p2 VALUES LESS THAN (20),
PARTITION p3 VALUES LESS THAN (30),
PARTITION p4 VALUES LESS THAN (40)
);
Table created.
-- 插入資料
SQL>
begin
for i in 1 .. 39 loop
insert into p_andy values(i,'andyi');
end loop ;
commit;
end;
/
PL/SQL procedure successfully completed.
-- 建立一個全域性非分割槽索引
SQL> create index idx_pandy_id on p_andy(id);
Index created.
-- 檢視索引狀態
SQL>
col index_name for a25
select table_name,index_name,status,blevel,leaf_blocks,orphaned_entries from user_Indexes where index_name ='IDX_PANDY_ID';
TABLE_NAME INDEX_NAME STATUS BLEVEL LEAF_BLOCKS ORP
------------------------- ------------------------- -------- ---------- ----------- ---
P_ANDY IDX_PANDY_ID VALID 0 1 NO
-- 檢視錶分割槽狀態與分割槽所在的表空間
SQL> select table_name,partition_name,PARTITION_POSITION,tablespace_name,HIGH_VALUE from user_tab_partitions where table_name='P_ANDY';
TABLE_NAME PARTITION_NAME PARTITION_POSITION TABLESPACE_NAME HIGH_VALUE
------------------------- ------------------------- ------------------ ------------------------------ ------------
P_ANDY P1 1 USERS 10
P_ANDY P2 2 USERS 20
P_ANDY P3 3 USERS 30
P_ANDY P4 4 USERS 40
-- 遷移表分割槽p1表空間 ,並帶 UPDATE INDEXES ONLINE 引數。
SQL> ALTER TABLE p_andy move PARTITION p1 TABLESPACE bbb UPDATE INDEXES ONLINE;
Table altered.
說明:引數 UPDATE INDEXES ONLINE 遷移表分割槽或子分割槽時維護表上任何本地或全域性的索引。此外,當使用ONLINE 語句時,DML 操作是不會中斷的。引入加鎖機制來完成這一過程,當然它也會導致效能下降並會產生大量的 redo,這取決於分割槽和子分割槽的大小。
-- 檢視錶分割槽狀態與分割槽所在的表空間
SQL> select table_name,partition_name,PARTITION_POSITION,tablespace_name,HIGH_VALUE from user_tab_partitions where table_name='P_ANDY';
TABLE_NAME PARTITION_NAME PARTITION_POSITION TABLESPACE_NAME HIGH_VALUE
------------------------- ------------------------- ------------------ ------------------------------
P_ANDY P1 1 BBB 10
P_ANDY P2 2 USERS 20
P_ANDY P3 3 USERS 30
P_ANDY P_MERGE 4 USERS 40
-- 檢視索引狀態
SQL> select table_name,index_name,status,blevel,leaf_blocks,orphaned_entries from user_Indexes where index_name ='IDX_PANDY_ID';
TABLE_NAME INDEX_NAME STATUS BLEVEL LEAF_BLOCKS ORP
------------------------- ------------------------- -------- ---------- ----------- ---
P_ANDY IDX_PANDY_ID VALID 0 1 YES
-- 遷移表分割槽p2表空間 ,不帶 UPDATE INDEXES ONLINE 引數。
SQL> ALTER TABLE p_andy move PARTITION p2 TABLESPACE bbb ;
Table altered.
-- 檢視索引狀態
SQL> select table_name,index_name,status,blevel,leaf_blocks,orphaned_entries from user_Indexes where index_name ='IDX_PANDY_ID';
TABLE_NAME INDEX_NAME STATUS BLEVEL LEAF_BLOCKS ORP
------------------------- ------------------------- -------- ---------- ----------- ---
P_ANDY IDX_PANDY_ID UNUSABLE 0 1 NO
說明:不帶 UPDATE INDEXES ONLINE 引數,索引會失效,需要手工 rebulid 。
-- 重建索引
SQL> ALTER INDEX IDX_PANDY_ID REBUILD PARALLEL (DEGREE 2);
Index altered.
-- 檢視索引狀態
SQL> select table_name,index_name,status,blevel,leaf_blocks,orphaned_entries from user_Indexes where index_name ='IDX_PANDY_ID';
TABLE_NAME INDEX_NAME STATUS BLEVEL LEAF_BLOCKS ORP
------------------------- ------------------------- -------- ---------- ----------- ---
P_ANDY IDX_PANDY_ID VALID 0 1 NO
補充:如果分割槽或分割槽索引比較大,可以使用並行move或rebuild,PARALLEL (DEGREE 2) 如:
ALTER TABLE table_name move SUBPARTITION sub_name TABLESPACE tts_name PARALLEL (DEGREE 2);
ALTER INDEX idx_name REBUILD TABLESPACE tts_name PARALLEL (DEGREE 2);
ALTER INDEX local_name REBUILD SUBPARTITION sub_name TABLESPACE tts_name PARALLEL (DEGREE 2);
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31383567/viewspace-2139035/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle 12C新特性-線上把非分割槽錶轉為分割槽表Oracle
- ORACLE 19c 新特性之混合分割槽表Oracle
- LightDB 22.4 新特性之相容Oracle線上轉換普通表為分割槽表Oracle
- PG的非分割槽表線上轉分割槽表
- oracle分割槽表和分割槽表exchangeOracle
- oracle 19C新特性——混合分割槽表Oracle
- oracle分割槽表和非分割槽表exchangeOracle
- [oracle] expdp 匯出分割槽表的分割槽Oracle
- oracle 線上重新定義,普通表改變分割槽表,分割槽表可以更改型別、分割槽欄位等Oracle型別
- oracle 分割槽表move和包含分割槽表的lob moveOracle
- 移動分割槽表和分割槽索引的表空間索引
- MySQL分割槽如何遷移MySql
- Oracle分割槽表基礎運維-07增加分割槽(2 HASH分割槽)Oracle運維
- Oracle分割槽表基礎運維-07增加分割槽(3列表分割槽)Oracle運維
- Oracle 12.2之後ALTER TABLE .. MODIFY轉換非分割槽表為分割槽表Oracle
- Oracle分割槽表基礎運維-07增加分割槽(1範圍分割槽)Oracle運維
- Oracle12c:建立主分割槽、子分割槽,實現自動分割槽插入效果Oracle
- Oracle分割槽表基礎運維-04列表分割槽Oracle運維
- ORACLE分割槽表梳理系列Oracle
- Oracle分割槽表基礎運維-09刪除分割槽Oracle運維
- Oracle分割槽表基礎運維-05組合分割槽Oracle運維
- Oracle分割槽表基礎運維-02範圍分割槽Oracle運維
- Oracle分割槽表基礎運維-03HASH分割槽Oracle運維
- 【12.2】Oracle 12C R2新特性-外部表支援分割槽了(Partitioning External Tables)Oracle
- Oracle分割槽表基礎運維-06分割槽表索引Oracle運維索引
- PostgreSQL/LightDB 分割槽表之分割槽裁剪SQL
- Oracle分割槽表基礎運維-01分割槽表分類Oracle運維
- 分割槽表之自動增加分割槽(11G)
- MySQL線上轉分割槽表(以及TiDB)MySqlTiDB
- 對oracle分割槽表的理解整理Oracle
- oracle將表配置為分割槽表Oracle
- oracle 普通表-分割槽表改造流程Oracle
- 非分割槽錶轉換成分割槽表
- Linux 分割槽擴容(根分割槽擴容,SWAP 分割槽擴容,掛載新分割槽為目錄)Linux
- 【MYSQL】 分割槽表MySql
- Oracle SQL調優之分割槽表OracleSQL
- Oracle分割槽表基礎運維-07增加分割槽(4 RANGE_HASH)Oracle運維
- Oracle分割槽表基礎運維-07增加分割槽(5RANGE_LIST)Oracle運維
- Oracle分割槽表基礎運維-07增加分割槽(6RANGE_RANGE)Oracle運維