oracle在線將普通錶轉換成分區表

背景介紹:有時候隨着業務的發展,需要將普通的錶轉換成分區表。這裏主要介紹在線自動轉換的方式。


一:源表和索引創建

源表創建

CREATE TABLE  EDC_SEPERATOR

(

  SEPERATOR_ID   NUMBER(15)                     NOT NULL,

  EQUIPMENTINFO  NVARCHAR2(20),

  RECORD         NVARCHAR2(50),

  TITLE          NVARCHAR2(50),

  ID             NVARCHAR2(50),

  TESTDATE       NVARCHAR2(50),

  TESTTIME       VARCHAR2(50 BYTE),

  COMT           NVARCHAR2(50),

  OPERATOR       NVARCHAR2(50),

  CLASSIFIC      NVARCHAR2(50),

  BIN            NVARCHAR2(50),

  UOC            NVARCHAR2(50),

  ISC            NVARCHAR2(50),

  RSERIEC        NVARCHAR2(50),

  RSH            NVARCHAR2(50),

  FF             NVARCHAR2(50),

  ETA            NVARCHAR2(50),

  IREV2          NVARCHAR2(50),

  TCELL          NVARCHAR2(50),

  TMONICELL      NVARCHAR2(50),

  INSOL          NVARCHAR2(50),

  UMPP           NVARCHAR2(50),

  IMPP           NVARCHAR2(50),

  PMPP           NVARCHAR2(50),

  JSC            NVARCHAR2(50),

  ENTITY_RRN     NUMBER(15),

  SORTER_SEQ     NUMBER(15),

  IMPORTTIME     DATE,

  DBIMPORTTIME   DATE

)

 

Table created.

源表建立索引


SQL> CREATE INDEX  INDX_EDC_SEPERATOR ON  EDC_SEPERATOR(IMPORTTIME);

 

Index created.

 

SQL> CREATE INDEX  INDX3_EDC_SEPERATOR ON  EDC_SEPERATOR(COMT);

 

Index created.


 二:開始在線重定義源表

如果有主鍵,基於主鍵重定義

 begin

 dbms_redefinition.can_redef_table('TEST','EDC_SEPERATOR');

 end;

沒有主鍵,基於row_id重定義(兩種寫法)

1

begin

 dbms_redefinition.can_redef_table('TEST','EDC_SEPERATOR',2);

 end;

2:

begin

dbms_redefinition.can_redef_table('TEST','EDC_SEPERATOR',dbms_redefinition.cons_use_rowid);

end;

 

創建中間表

CREATE TABLE  TMP_P

(

  SEPERATOR_ID   NUMBER(15)                     NOT NULL,

  EQUIPMENTINFO  NVARCHAR2(20),

  RECORD         NVARCHAR2(50),

  TITLE          NVARCHAR2(50),

  ID             NVARCHAR2(50),

  TESTDATE       NVARCHAR2(50),

  TESTTIME       VARCHAR2(50 BYTE),

  COMT           NVARCHAR2(50),

  OPERATOR       NVARCHAR2(50),

  CLASSIFIC      NVARCHAR2(50),

  BIN            NVARCHAR2(50),

  UOC            NVARCHAR2(50),

  ISC            NVARCHAR2(50),

  RSERIEC        NVARCHAR2(50),

  RSH            NVARCHAR2(50),

  FF             NVARCHAR2(50),

  ETA            NVARCHAR2(50),

  IREV2          NVARCHAR2(50),

  TCELL          NVARCHAR2(50),

  TMONICELL      NVARCHAR2(50),

  INSOL          NVARCHAR2(50),

  UMPP           NVARCHAR2(50),

  IMPP           NVARCHAR2(50),

  PMPP           NVARCHAR2(50),

  JSC            NVARCHAR2(50),

  ENTITY_RRN     NUMBER(15),

  SORTER_SEQ     NUMBER(15),

  IMPORTTIME     DATE,

  DBIMPORTTIME   DATE

)

PARTITION BY RANGE (IMPORTTIME)

INTERVAL (NUMTOYMINTERVAL(1,'MONTH'))

(

PARTITION P1 VALUES LESS THAN (to_date('20160101','YYYYMMDD'))

) TABLESPACE TEST

 

在線重定義

SQL> execute dbms_redefinition.start_redef_table('TEST','EDC_SEPERATOR','TMP_P',null,2);

 

PL/SQL procedure successfully completed.

 

在線同步

execute dbms_redefinition.sync_interim_table('TEST','EDC_SEPERATOR','TMP_P');

 

中間表創建索引

SQL> CREATE INDEX  INDX_P_SEPERATOR ON  TMP_P(IMPORTTIME);

 

Index created.

 

SQL> CREATE INDEX  INDX3_P_SEPERATOR ON  TMP_P (COMT);

Index created.

 

 

完成重定義

 

SQL> execute dbms_redefinition.finish_redef_table('TEST','EDC_SEPERATOR','TMP_P');

 

PL/SQL procedure successfully completed.

 

刪除中間表

drop table tmp_p

 

檢查是否已經分區

SQL>select TABLE_NAME,PARTITIONED from DBA_tables WHERE TABLE_NAME='EDC_SEPERATOR';

 

TABLE_NAME                     PAR

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

EDC_SEPERATOR                  YES

發佈了64 篇原創文章 · 獲贊 51 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章