2016-10-27 3 views
0

У нас есть таблица, которая растет с примерно 6,4 миллионами строк/месяц, которые разделены, и мы периодически (ежемесячно) удаляем раздел. Недавно мы представили таблицу соединений первичного ключа этой таблицы (с каскадным удалением). Это вводит проблемы с ссылочной целостностью, в которых мы не можем удалить раздел, потому что таблица join ссылается на строки внутри него.Oracle 11g - Каскадное удаление раздела

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

Я так прочитать: https://docs.oracle.com/cd/E11882_01/server.112/e25523/part_admin002.htm#i1007479 и кажется, что они рекомендуют к первому DELETE FROM table partition (partitionID);, а затем ALTER TABLE table DROP PARTITION partitionID;

Мы обеспокоены:

  1. Нагрузка обработки
  2. Воздействие на отменить/переделать журналы

Мне интересно, есть ли у кого-то лучшая идея. Или может заверить меня, что это не плохая идея.

+0

Пожалуйста [править] Ваш вопрос добавить 'создать table' заявления для всех таблиц в вопросе. –

ответ

0

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

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

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

Oracle имеет больше информации здесь: https://docs.oracle.com/database/121/VLDBG/GUID-54D18B18-6838-4115-9389-E1FB0D20A8CA.htm

1

Документация также говорит

DELETE FROM sales partition (dec98); 
ALTER TABLE sales DROP PARTITION dec98; 

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

Я предполагаю, что в таких случаях производительность может быть немного лучше, чем обычно способ, как:

ALTER TABLE table DROP PARTITION partitionID UPDATE INDEXES; 

или

ALTER TABLE table DROP PARTITION partitionID; 
ALTER INDEX ... REBUILD; 

Когда вы прыгаете DELETE тогда вы не получите любые журналы отмены.

Смежные вопросы