Можем ли мы изменить интервал для раздела? - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть таблица, разделенная по диапазону с интервалом.Тогда у меня есть раздел с этой конфигурацией:

PARTITION "SYS_P657531"  VALUES LESS THAN (18100000000)

Существует команда alter для изменения значения этого раздела?

Пример: изменить его на PARTITION "SYS_P657531" VALUES LESS THAN (17493458497)

У меня Oracle 12c.

Спасибо,

1 Ответ

0 голосов
/ 25 апреля 2018

[есть] команда alter для изменения значения этого раздела?

Не как таковой. Рассмотрим проблему того, что должно происходить со значениями в текущей позиции, которые лежат между 17493458497 и 1809999999. База данных не может их удалить, но изменение высокого значения раздела сделает их бездомными.

Раздел не заполнен .. так что нет таких значений, как вы сказали

Это не меняет ситуацию. Oracle не поддерживает уменьшение (или повышение) высокого значения раздела.

Что мы можем сделать, это разделить существующий раздел на два:

alter table your_table split partition SYS_P657531 into
  (partition p_17493458497 values less than (17493458497),
   partition p_18100000000);

Существуют различные варианты разделения различных типов разделов. Например, со списком разделов диапазона мы могли бы сделать это вместо:

alter table your_table split partition SYS_P657531
    at (17493458497) into
      (partition p_17493458497,
        partition p_18100000000);

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

Узнать больше .


Если у вас нет значений выше 17493458497 и / или вы не хотите сохранять, вы можете удалить оставшийся раздел p_18100000000 после операции SPLIT. В качестве альтернативы, если в рамках соответствующего упражнения вам нужно поднять потолок оставшегося раздела выше 18100000000, то вы создадите новый раздел с требуемым высоким значением (при условии, что он еще не существует) и объедините два раздела.

alter table your_table merge partitions p_18100000000, p_whatever 
    into p_19000000000;

Узнать больше .

...