Массовое удаление через вставку - полное пространство для отмены

у меня есть таблица со 100 миллионами записей.
Я хочу удалить 60%. Теперь я прочитал, что должен скопировать таблицу и вставить допустимые значения (потому что это быстрее)

Пример: INSERT INTO Person_New SELECT * FROM Person_old where p.name is not null.

Проблема: Через несколько минут место для отмены заполнено, И я не могу! изменить его размер, потому что у меня не было на это прав.

Вопрос: Должен ли я разделить вставку на несколько частей, например, с диапазоном идентификаторов? Или есть лучший способ?

Изменить для первого комментария Error-Output:
ORA-30036: невозможно расширить сегмент на 8 в табличном пространстве отмены...


person pL4Gu33    schedule 22.05.2014    source источник
comment
Вы уверены, что это ваше пространство UNDO?   -  person gustavodidomenico    schedule 22.05.2014
comment
да, я добавляю сообщение. Или я что-то там не так понял?   -  person pL4Gu33    schedule 22.05.2014
comment
Поэтому попробуйте выполнить вставку с подсказкой /*+APPEND*/. Чтобы выполнить вставку прямого пути.   -  person gustavodidomenico    schedule 22.05.2014
comment
Позвольте мне ответить на этот вопрос на подходящем примере. Секундочку.   -  person gustavodidomenico    schedule 22.05.2014


Ответы (1)


Лучший вариант — избежать генерации UNDO с помощью оператора DDL:

CREATE TABLE PERSON_NEW NOLOGGING AS
   SELECT * FROM Person_old where p.name is not null

NOLOGGING заключается в том, чтобы избежать генерации REDO и выполнить создание быстрее.

Однако, если вы должны выполнить INSERT, рассмотрите возможность вставки прямого пути с использованием подсказки /*+APPEND*/:

INSERT /*+APPEND*/ INTO PERSON_NEW
  SELECT * FROM Person_old where p.name is not null

Создание таблицы PERSON_NEW с атрибутом NOLOGGING будет полезно (а также опасно), но использование атрибута NOLOGGING внутри операции DML не даст никакого эффекта.

person gustavodidomenico    schedule 22.05.2014
comment
я не могу проверить это в данный момент, но я похоже, что мне нужно. Если это сработает, я отмечу ваш ответ позже как правильный. Спасибо за это хорошее объяснение! - person pL4Gu33; 22.05.2014
comment
Без проблем. Невозможно узнать, поможет ли это вам, потому что мы не знаем конфигурацию вашего оборудования и конфигурацию установки оракула. Но я уверен, что приведенные выше концепции помогут вам в некотором роде :) - person gustavodidomenico; 22.05.2014