分割槽表split操作及maxvalue處理

路途中的人2012發表於2018-01-23

 

CREATE TABLE DFMS.WIP_D_WO_DETAIL
(
  WORK_ORDER          VARCHAR2(25 CHAR)         NOT NULL,
  PART_NO             VARCHAR2(35 BYTE)         NOT NULL,
  PART_REV            VARCHAR2(10 BYTE)         DEFAULT 'N/A'                 NOT NULL,
  ALT_FLAG            VARCHAR2(1 BYTE)          DEFAULT '0'                   NOT NULL,
  SUBSTITUTE_PN       VARCHAR2(35 BYTE),
  UNIT_QTY            NUMBER                    DEFAULT 0                     NOT NULL,
  SOURCE_DEPT         VARCHAR2(5 BYTE)          DEFAULT 'SFC'                 NOT NULL,
  CREATOR             VARCHAR2(20 BYTE)         NOT NULL,
  CREATE_DATE         DATE                      DEFAULT SYSDATE,
  UPDATER             VARCHAR2(20 BYTE),
  UPDATE_DATE         DATE,
  SCH_PART_NO         VARCHAR2(35 BYTE),
  MAIN_WHID           VARCHAR2(10 BYTE),
  REPLACE_GROUP       VARCHAR2(50 BYTE)         NOT NULL,
  MOD_NO              VARCHAR2(20 BYTE),
  PHANTOM_FLAG        VARCHAR2(10 BYTE)
)
TABLESPACE PART_D_TS1
PCTUSED    0
PCTFREE    10
INITRANS   1
MAXTRANS   255
LOGGING
PARTITION BY RANGE (CREATE_DATE)

  PARTITION P200907 VALUES LESS THAN (TO_DATE(' 2009-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS',

'NLS_CALENDAR=GREGORIAN'))
    LOGGING
    NOCOMPRESS
    TABLESPACE PART_D_TS1
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                INITIAL          50M
                NEXT             50M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                PCTINCREASE      0
                BUFFER_POOL      DEFAULT
               ), 
  PARTITION P201001 VALUES LESS THAN (TO_DATE(' 2010-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS',

'NLS_CALENDAR=GREGORIAN'))
    LOGGING
    NOCOMPRESS
    TABLESPACE PART_D_TS1
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                INITIAL          50M
                NEXT             50M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                PCTINCREASE      0
                BUFFER_POOL      DEFAULT
               ), 
  PARTITION P201007 VALUES LESS THAN (TO_DATE(' 2010-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS',

'NLS_CALENDAR=GREGORIAN'))
    LOGGING
    NOCOMPRESS
    TABLESPACE PART_D_TS1
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                INITIAL          50M
                NEXT             50M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                PCTINCREASE      0
                BUFFER_POOL      DEFAULT
               ), 
  PARTITION P201101 VALUES LESS THAN (TO_DATE(' 2011-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS',

'NLS_CALENDAR=GREGORIAN'))
    LOGGING
    NOCOMPRESS
    TABLESPACE PART_D_TS1
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                INITIAL          50M
                NEXT             50M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                PCTINCREASE      0
                BUFFER_POOL      DEFAULT
               ), 
  PARTITION P201107 VALUES LESS THAN (TO_DATE(' 2011-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS',

'NLS_CALENDAR=GREGORIAN'))
    LOGGING
    NOCOMPRESS
    TABLESPACE PART_D_TS1
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                INITIAL          50M
                NEXT             50M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                PCTINCREASE      0
                BUFFER_POOL      DEFAULT
               ), 
  PARTITION P201201 VALUES LESS THAN (TO_DATE(' 2012-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS',

'NLS_CALENDAR=GREGORIAN'))
    LOGGING
    NOCOMPRESS
    TABLESPACE PART_D_TS1
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                INITIAL          50M
                NEXT             50M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                PCTINCREASE      0
                BUFFER_POOL      DEFAULT
               ), 
  PARTITION P201207 VALUES LESS THAN (TO_DATE(' 2012-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS',

'NLS_CALENDAR=GREGORIAN'))
    LOGGING
    NOCOMPRESS
    TABLESPACE PART_D_TS1
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                INITIAL          50M
                NEXT             50M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                PCTINCREASE      0
                BUFFER_POOL      DEFAULT
               ), 
  PARTITION P201301 VALUES LESS THAN (TO_DATE(' 2013-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS',

'NLS_CALENDAR=GREGORIAN'))
    LOGGING
    NOCOMPRESS
    TABLESPACE PART_D_TS1
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                INITIAL          50M
                NEXT             50M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                PCTINCREASE      0
                BUFFER_POOL      DEFAULT
               ), 
  PARTITION PMAX VALUES LESS THAN (MAXVALUE)
    LOGGING
    NOCOMPRESS
    TABLESPACE PART_D_TS1
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                INITIAL          50M
                NEXT             50M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                PCTINCREASE      0
                BUFFER_POOL      DEFAULT
               )
)
NOCOMPRESS
NOCACHE
NOPARALLEL
MONITORING
ENABLE ROW MOVEMENT; 

 


假設沒有maxvalue部分,那麼加入分割槽: 


ALTER TABLE DFMS.WIP_D_WO_DETAIL
ADD PARTITION P201307 VALUES LESS THAN (TO_DATE(' 2013-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS',

NLS_CALENDAR=GREGORIAN'))
    LOGGING
    NOCOMPRESS
    TABLESPACE PART_D_TS1
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
                INITIAL          50M
                NEXT             50M
                MINEXTENTS       1
                MAXEXTENTS       UNLIMITED
                PCTINCREASE      0
                BUFFER_POOL      DEFAULT
               )  ;

 

這裡有maxvalue部分,那麼加入分割槽需要split : 

備註: 
split partition時,根據split point原來的partition分裂成兩個partition。
如果其中一個partition是空的,則不需要move原來的partition,也不需要rebuild
index,這種我們稱之為fast split。

不過如果在split的時候指定了tablespace,即使其中一個partition是空的,而且該
tablespace與parent partition的tablespace不同,oracle會move整個partition到
新的tablespace中。因為這個tablespace引數,導致了原來的fast split不成功,而
需要move segment和rebuild index。

ALTER TABLE DFMS.WIP_D_WO_DETAIL
SPLIT PARTITION  PMAX  AT (TO_DATE(' 2013-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', NLS_CALENDAR=GREGORIAN'))
INTO  (PARTITION  P201307  TABLESPACE PART_D_TS1, PARTITION  PMAX  TABLESPACE  PART_D_TS1) ;

 

如果你需要取消maxvalue部分,那麼split幾部分後,檢視最後一部分是否有值,如果沒有,直接
drop掉最後split出去的那部分。 然後就可以直接add partition 了。

ALTER TABLE DFMS.WIP_D_WO_DETAIL
SPLIT PARTITION  PMAX  AT (TO_DATE(' 2013-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', NLS_CALENDAR=GREGORIAN'))
INTO  (PARTITION  P201307  TABLESPACE PART_D_TS1, PARTITION  P2014  TABLESPACE  PART_D_TS1) ;

ALTER TABLE DFMS.WIP_D_WO_DETAIL
SPLIT PARTITION  P2014  AT (TO_DATE(' 2014-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', NLS_CALENDAR=GREGORIAN'))
INTO  (PARTITION  P201401  TABLESPACE PART_D_TS1, PARTITION  P201407  TABLESPACE  PART_D_TS1) ;

ALTER TABLE DFMS.WIP_D_WO_DETAIL
SPLIT PARTITION  P201407  AT (TO_DATE(' 2014-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', NLS_CALENDAR=GREGORIAN'))
INTO  (PARTITION  P201407  TABLESPACE PART_D_TS1, PARTITION  P201501  TABLESPACE  PART_D_TS1) ;

ALTER TABLE DFMS.WIP_D_WO_DETAIL DROP PARTITION  P201501  ;

然後就可以類似沒有設定maxvalue一樣加入後面的partiton .

ALTER TABLE DFMS.WIP_D_WO_DETAIL
ADD PARTITION P201501 VALUES LESS THAN (TO_DATE(' 2015-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS',

NLS_CALENDAR=GREGORIAN')) ;

ALTER TABLE DFMS.WIP_D_WO_DETAIL
ADD PARTITION P201507 VALUES LESS THAN (TO_DATE(' 2015-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS',

NLS_CALENDAR=GREGORIAN')) ;

..... 

 


如果在split的時候將tablespace更換了,那麼需要rebuild index .

下面的語句用於rebuild local index partitions或子分割槽
(子分割槽一般指range-hash等組合分割槽中的子分割槽) : 
ALTER INDEX ... REBUILD PARTITION/SUBPARTITION


ALTER TABLE ... MODIFY PARTITION/SUBPARTITION ... REBUILD UNUSABLE LOCAL INDEXES
這個語句找出所有的unusable的index, 然後rebuild他們。

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

相關文章