Создание разделов даты года в существующей несекционированной таблице

Я хочу знать простой подход к разделению существующей таблицы. Я думаю, что по диапазонам и с использованием поля даты будет работать.

Однако я вижу два варианта на сайте Oracle (см. Ссылку ниже)

https://docs.oracle.com/database/122/VLDBG/evolve-nopartition-table.htm#VLDBG00302

Преобразование несекционированной таблицы в секционированную кажется проще, чем использование онлайн-переопределения для разбиения таблиц коллекции, просто за счет соответствующих шагов.

Однако я вижу здесь (см. Ссылку ниже)

https://asktom.oracle.com/pls/apex/f?p=100:11:::NO:RP:P11_QUESTION_ID:9533887100346178338

мы видим

SQL> ALTER TABLE a MODIFY
  2  PARTITION BY RANGE(x) INTERVAL (10)
  3  ( PARTITION P1 VALUES LESS THAN (10),
  4  PARTITION P2 VALUES LESS THAN (20),
  5  PARTITION P3 VALUES LESS THAN (30)
  6  )
  7  update indexes
  8  (xpa local,
  9  xiea global partition by range(y)
 10  (partition ip1 values less than (MAXVALUE))
 11  ) ;

Table altered.

И все это работает только в 12.2. Если вы используете версию 12.1, вам необходимо использовать DBMS_REDEFINITION. См. Здесь пример

https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:869096700346654484

Так как я использую ..

Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production    0
PL/SQL Release 12.1.0.2.0 - Production  0
"CORE   12.1.0.2.0  Production" 0
TNS for Linux: Version 12.1.0.2.0 - Production  0
NLSRTL Version 12.1.0.2.0 - Production  0

Могу ли я использовать (ограниченное) переопределение в режиме онлайн только для таблиц разделов?

Какой чистый способ создавать перегородки по годам?


person JohnnyO    schedule 20.09.2017    source источник
comment
Да, если вы используете 12.1, ваш единственный выбор - использовать dbms_redefinition.   -  person a_horse_with_no_name    schedule 21.09.2017


Ответы (1)


Если вам все еще нужен ответ на советы по разделению, вы можете найти правильный здесь объяснение.

Что касается второго вопроса, вы можете использовать автоматическое создание разделов из Oracle 11g. Вот несколько примеров кода:

PARTITION BY RANGE (date_col) 
  INTERVAL(NUMTOYMINTERVAL(1, 'YEAR'))
    ( PARTITION p0 VALUES LESS THAN (TO_DATE('01-01-2016', 'DD-MM-YYYY')),
      PARTITION p1 VALUES LESS THAN (TO_DATE('01-01-2017', 'DD-MM-YYYY')),
      PARTITION p2 VALUES LESS THAN (TO_DATE('01-01-2018', 'DD-MM-YYYY')),
      PARTITION p3 VALUES LESS THAN (TO_DATE('01-01-2019', 'DD-MM-YYYY')) );

Высокое значение разделов диапазона является точкой перехода. База данных автоматически создает интервальные разделы для данных за пределами этой точки перехода. В нашем примере точка перехода - 01-01-2019, потому что 01-01-2019 - максимальная дата. Вам не нужно создавать раздел MAX_VALUE.

Как включить или изменить интервал?

ALTER TABLE t_part SET INTERVAL(NUMTOYMINTERVAL(1,'YEAR'));

Как его отключить?

ALTER TABLE <TABLE name> SET INTERVAL ();

Здесь вы можете найти некоторую информацию об этой функции. Если вам нужна дополнительная информация, дайте мне знать.

person adimoise91    schedule 18.09.2018