Как я могу удалить разделы таблицы из таблицы Oracle? - PullRequest
2 голосов
/ 02 декабря 2009

Я обнаружил, что разделы, используемые в конкретной таблице, снижают производительность запросов и хотели бы удалить разделы из таблицы. Есть простой способ сделать это? В рассматриваемой таблице 64 раздела. Основываясь на некоторых первоначальных исследованиях, я предложил следующие варианты. Есть ли лучший способ?

  1. Скопируйте данные в другую таблицу, удалите все разделы, затем скопируйте данные обратно в исходную таблицу
  2. Скопируйте данные в другую таблицу, удалите исходную таблицу, затем переименуйте новую таблицу и перестройте индексы
  3. Используйте MERGE PARTITION, чтобы объединить все разделы в один раздел

Мысли

1 Ответ

3 голосов
/ 02 декабря 2009

Лично я думаю, что вариант в варианте 2 звучит как лучший подход.

  1. Создать новую таблицу как select * from старый стол
  2. Создание индексов на новой таблице (*)
  3. Переименуйте старую таблицу во что-то отличается
  4. Переименовать новую таблицу в старое имя таблицы
  5. Переключение любых ограничений внешнего ключа с старый стол на новый стол. Также переводите любые гранты, синонимы и т. Д.
  6. Отбросить старый стол в медленном времени

(*) Для однораздельной таблицы, вероятно, потребуются другие индексы от многораздельной. Если вы особенно привязаны к именам индексов, вы можете использовать синтаксис ALTER INDEX ... RENAME TO ... после шага 6.

Преимущество этого подхода состоит в том, что он сводит к минимуму время простоя (в основном шаги 3, 4 и 5).

...