【ASK_ORACLE】使用insert語句將普通錶轉換成分割槽表

Attack_on_Jager發表於2022-11-30

實驗環境

搭建平臺:VMware Workstation

OS:OL 6.10

DB:Oracle 11.2.0.4


轉換步驟

本文將scott使用者的emp表為例,轉換成分割槽表

1.先建立一個空的分割槽表,這裡使用範圍分割槽

SQL> conn scott/tiger

SQL> create table emppart (ename varchar2(15) ,sal number(4))

partition by range (sal)

(partition p1 values less than (1000),

partition p2 values less than (2000),

partition p3 values less than (3000),

partition p4 values less than (4000),

partition pmax values less than (maxvalue));

 

2.將emp資料插入到新建的分割槽表 (如果欄位的對應關係正確,Oracle會自動幫我們按分割槽分類)

SQL> insert into emppart (ename,sal) select ename ,sal from emp;

 

3.驗證

(1)任意檢視幾個分割槽的資料,看是否正確分類

SQL> select * from emppart partition (p1);

 

       QTY NAME

---------- ------------------------------

       800 SMITH

       950 JAMES

 

SQL> select * from emppart partition (p3);

 

       QTY NAME

---------- ------------------------------

      2975 JONES

      2850 BLAKE

      2450 CLARK

 

SQL> select * from emppart partition (pmax);

 

       QTY NAME

---------- ------------------------------

      5000 KING

 

##插入一行資料試試

SQL> insert into emppart values (6800,'HHW');

 

1 row created.

 

SQL> select * from emppart partition (pmax);  ##正常輸出

 

       QTY NAME

---------- ------------------------------

      5000 KING

      6800 HHW

 

(2)將pmax再分割槽驗證下

SQL> alter table emppart split partition pmax at (6000) into (partition p5 ,partition pmax);

 

Table altered.

 

SQL> select * from emppart partition (pmax);

 

       QTY NAME

---------- ------------------------------

      6800 HHW

 

SQL> select * from emppart partition (p5);  ## 驗證新分割槽沒問題

 

       QTY NAME

---------- ------------------------------

      5000 KING

 

4. 重新命名分割槽表

SQL> drop table emp; ##刪掉原表才能重新命名

SQL> alter table emppart rename to emp;

 

注:

1. 如果表過大,為了加快insert的速度,可以使用下面的方法:

(1)SQL>alter session enable parallel dml;

(2)SQL> insert /*+APPEND PARALLEL*/ into emppart (ename,sal) select ename ,sal from emp;

(3)SQL>alter session disable parallel dml;

 

2. 還可以簡化成 一行命令直接轉換

(1)SQL>alter session enable parallel dml;

(2)create table emppart (ename varchar2(15) ,sal number(4)) partition by range (sal)

(<此處省略>) as insert /*+PARALLEL*/ into emppart (ename,sal) select ename ,sal from emp;

(3)SQL>alter session disable parallel dml;



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69992972/viewspace-2926015/,如需轉載,請註明出處,否則將追究法律責任。

相關文章