2014年8月19日 星期二

Oracle 12c - Table partition 指令功能增強





11G Table partition 要新增 partition 分區時或進行其他維護時,都要針對每個分區一個一個下 alter table add partition 指令

現在12C 只要一條指令就可以完成新增刪除分割 partition 的動作,就不用麻煩的下多條指令



以下是對新增 Partition 的簡單示範

先建立Partition
  1. create table test_par2 
  2.   (
  3.        seq_id  number,
  4.        txt     varchar2(4000 char),
  5.        t_time  date
  6.   )
  7. partition by range (t_time)
  8. (  
  9.   partition p_time_2014_06 values less than (to_date(' 2014-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),  
  10.   partition p_time_2014_07 values less than (to_date(' 2014-08-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
  11. );


  1. SQL>  select partition_name from dba_tab_partitions where table_name = 'TEST_PAR2';

  2. PARTITION_NAME
  3. ---------------
  4. P_TIME_2014_07
  5. P_TIME_2014_06

新增 Partition 分區
  1. ALTER TABLE  test_par2  ADD 
  2.   PARTITION P_TIME_2014_08 VALUES LESS THAN (TO_DATE(' 2014-09-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
  3.   PARTITION P_TIME_2014_09 VALUES LESS THAN (TO_DATE(' 2014-10-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
  4.   PARTITION P_TIME_2014_10 VALUES LESS THAN (TO_DATE(' 2014-11-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'));


  1. SQL>  select partition_name from dba_tab_partitions where table_name = 'TEST_PAR2';

  2. PARTITION_NAME
  3. ---------------
  4. P_TIME_2014_07
  5. P_TIME_2014_06
  6. P_TIME_2014_08
  7. P_TIME_2014_09
  8. P_TIME_2014_10

新增成功,只要 Maxvalue 分區沒建立,你就可以新增多個 Partition 進去


對於刪除 Partition 的簡單示範
  1. SQL>     alter table check_db.test_par2 drop partitions p_time_2014_09,p_time_2014_10;

  2. 已更改表格.

  3. SQL>

  1. SQL>   alter table check_db.test_par2 truncate partitions p_time_2014_09,p_time_2014_10;

  2. 已更改表格.

  3. SQL>


對於分割 Partition 的簡單示範
  1. create table test_par2
  2. (
  3.    seq_id   number,
  4.    txt      varchar2 (4000 char),
  5.    nb       number
  6. )
  7. partition by range (nb)
  8.    (
  9.       partition p_01 values less than (1000),
  10.       partition p_02 values less than (2000),
  11.       partition p_max values less than (maxvalue)
  12. );


  1. alter table test_par2  split partition p_max
  2.       into (partition p3 values less than (2500),
  3.               partition p4 values less than (4000),
  4.               partition p_max);

查看是否成功

  1. SQL>  select partition_name, high_value from dba_tab_partitions
  2.   2      where table_name = 'TEST_PAR2';

  3.   PARTITION_NAME        HIGH_VALUE
  4. ------------------------ ------------------------------
  5. P_03                                          2500
  6. P_04                                          4000
  7. P_01                                          1000
  8. P_02                                          2000
  9. P_MAX                                     MAXVALUE

成功分割!!!


對於合併 Partition 的簡單示範

  1. alter table test_par2 merge partitions p2,p3,p4 into partition p_sum;


  1. SQL>  select partition_name, high_value from dba_tab_partitions
  2.   2      where table_name = 'TEST_PAR2';

  3. PARTITION_NAME            HIGH_VALUE
  4. -----------------------------         ------------------------
  5. P_SUM                                    4000
  6. P_01                                          1000
  7. P_MAX1                                  MAXVALUE

合併後的 HIGH_VALUE 會是指定 Partition 的最大值


















沒有留言:

張貼留言