Разделить максимальное значение в Oracle с новым шаблоном подраздела - PullRequest
0 голосов
/ 03 марта 2020

Как разделить раздел maxvalue на Oracle с новым шаблоном подраздела.

Или

Как разделить раздел maxvalue на Oracle и добавить, а также добавить параллельно новые разделы

Ответы [ 2 ]

0 голосов
/ 03 марта 2020

Вы можете установить шаблон подразделов для таблицы. Но это влияет только на новые разделы. Это не влияет на существующие разделы:

create table t (
  c1 int, c2 int
) partition by range ( c1 ) 
  subpartition by hash ( c2 )
  subpartition template 2 
  (
    partition p0 values less than ( 1 ),
    partition pmax values less than ( maxvalue )
  );

select partition_name, subpartition_name
from   user_tab_subpartitions
where  table_name = 'T';

PARTITION_NAME    SUBPARTITION_NAME   
P0                SYS_SUBP2922         
P0                SYS_SUBP2923         
PMAX              SYS_SUBP2924         
PMAX              SYS_SUBP2925   

alter table t 
  set subpartition template 1;

select partition_name, subpartition_name
from   user_tab_subpartitions
where  table_name = 'T';

PARTITION_NAME    SUBPARTITION_NAME   
P0                SYS_SUBP2922         
P0                SYS_SUBP2923         
PMAX              SYS_SUBP2924         
PMAX              SYS_SUBP2925  

Вы также можете установить шаблон при разбиении. Но опять же, это не влияет на существующие разделы:

alter table t 
  split partition pmax at ( 2 )
  into ( 
    partition p1 set subpartition template 1, 
    partition pmax set subpartition template 1
  );

select partition_name, subpartition_name
from   user_tab_subpartitions
where  table_name = 'T';

PARTITION_NAME    SUBPARTITION_NAME   
P0                SYS_SUBP2922         
P0                SYS_SUBP2923         
P1                SYS_SUBP2926         
P1                SYS_SUBP2927         
PMAX              SYS_SUBP2924         
PMAX              SYS_SUBP2925  

Если вы хотите изменить подразделы при разбиении раздела, определите их в предложении подразделов:

alter table t 
  split partition pmax at ( 3 )
  into ( 
    partition p2 subpartitions 1, 
    partition pmax subpartitions 4
  );

select partition_name, subpartition_name
from   user_tab_subpartitions
where  table_name = 'T';

PARTITION_NAME    SUBPARTITION_NAME   
P0                SYS_SUBP2936         
P0                SYS_SUBP2937         
P1                SYS_SUBP2940         
P1                SYS_SUBP2941         
P2                SYS_SUBP2942         
PMAX              SYS_SUBP2943         
PMAX              SYS_SUBP2944         
PMAX              SYS_SUBP2945         
PMAX              SYS_SUBP2946 
0 голосов
/ 03 марта 2020

Вы можете использовать SPLIT PARTITION следующим образом:

Oracle setup:

SQL> CREATE TABLE PART_EXAMPLE (
  2      ID             NUMBER,
  3      CREATED_DATE   DATE
  4  )
  5      PARTITION BY RANGE (
  6          CREATED_DATE
  7      )
  8      ( PARTITION T1_2019
  9          VALUES LESS THAN ( MAXVALUE )
 10      );

Table created.

Проверка разделов :

SQL> SELECT
  2      TABLE_NAME,
  3      PARTITION_NAME
  4  FROM
  5      USER_TAB_PARTITIONS
  6  WHERE TABLE_NAME = 'PART_EXAMPLE';

TABLE_NAME      PARTITION_
--------------- ----------
PART_EXAMPLE    T1_2019

Разделение раздела на два раздела:

SQL> ALTER TABLE PART_EXAMPLE
  2    SPLIT PARTITION T1_2019 AT (TO_DATE('31-DEC-2017 23:59:59', 'DD-MON-YYYY HH24:MI:SS'))
  3    INTO (PARTITION T1_2017, PARTITION T1_2019)
  4    ONLINE;

Table altered.

Теперь, проверяя разделы:

SQL> SELECT
  2      TABLE_NAME,
  3      PARTITION_NAME
  4  FROM
  5      USER_TAB_PARTITIONS
  6  WHERE TABLE_NAME = 'PART_EXAMPLE';

TABLE_NAME      PARTITION_
--------------- ----------
PART_EXAMPLE    T1_2017
PART_EXAMPLE    T1_2019

SQL>

Надеюсь, это понятно.

Ура !!

...