Удаление записей из Oracle MAX_PARTITION - PullRequest
0 голосов
/ 17 июня 2019

У нас есть таблица с перегородками.Он также имеет раздел переполнения (максимальный раздел), который действует как универсальный для записей, которые не соответствуют критериям раздела.Идея заключалась в том, чтобы создать разделы заранее, чтобы записи никогда не заканчивались в max_partition.Однако для одной таблицы это было упущено, поэтому все записи оказались в этом единственном разделе.

Теперь большинство этих записей больше не используются, поэтому их можно удалить.Однако наш подход - отбросить разделы, когда они слишком старые.Это не может быть сделано в этом случае.Есть ли простой способ справиться с продувкой?

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

Что было бы лучшим путем вперед, с точки зрения производительности.Мы могли бы справиться с небольшим временем простоя, но ненамного.

Мы используем Oracle 11g.

Скрипт создания таблицы выглядит примерно так:

CREATE TABLE "TRANSACTIONS" 
   ("year" number(4,0) NOT NULL ENABLE)
  PARTITION BY RANGE ("year") 
 (PARTITION "P_OLD" VALUES LESS THAN (2010),
  PARTITION "P_2011"   VALUES LESS THAN (2011),
 ...

  PARTITION "P_MAX"    VALUES LESS THAN (MAXVALUE));

1 Ответ

3 голосов
/ 17 июня 2019

Нет необходимости отбрасывать раздел, вы можете очистить его.

alter table TRANSACTIONS TRUNCATE PARTITION P_MAX UPDATE INDEXES;

или, если хотите, вы также можете удалить строки:

delete from TRANSACTIONS PARTITION (P_MAX);

Вы можете использовать раздел INTERVAL, чтобы упростить его (на самом деле я не понимаю ваш вопрос):

CREATE TABLE TRANSACTIONS ( 
   ...
    TRANSACTION_DATE TIMESTAMP(0) NOT NULL
)    
PARTITION BY RANGE (TRANSACTION_DATE) INTERVAL (INTERVAL '12' MONTH) 
    (PARTITION P_OLD VALUES LESS THAN (TIMESTAMP '2000-01-01 00:00:00' ) )
ENABLE ROW MOVEMENT;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...