Подтвердить что ты не робот

Лучший способ добавить столбец со значением по умолчанию при загрузке

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

ALTER TABLE user ADD country VARCHAR2(4) DEFAULT 'GB' NOT NULL

СРАВНЕНИЯ

ALTER TABLE user ADD country VARCHAR2(2)
UPDATE user SET country = 'GB'
COMMIT
ALTER TABLE user MODIFY country DEFAULT 'GB' NOT NULL
4b9b3361

Ответ 1

Производительность зависит от используемой версии Oracle. В любом случае создаются блокировки.

Если версия <= Oracle 11.1, то # 1 делает то же самое, что и # 2. В любом случае, он медленный. Начиная с Oracle 11.2, Oracle представила большую оптимизацию для первого оператора (одна команда делает все). Вам не нужно менять команду - Oracle просто ведет себя по-другому. Он сохраняет значение по умолчанию только в словаре данных вместо обновления каждой физической строки.

Но я также должен сказать, что я столкнулся с некоторыми ошибками в прошлом, связанными с этой функцией (в Oracle 11.2.0.1)

  • отказ от традиционного импорта, если экспорт был выполнен с прямым = Y Оператор
  • merge может вызывать ORA-600 [13013] (внутренняя ошибка оракула)
  • проблема с производительностью в запросах с использованием таких таблиц

Я думаю, что эти проблемы исправлены в текущей версии 11.2.0.3, поэтому я могу рекомендовать использовать эту функцию.

Ответ 2

Некоторое время назад мы оценили возможные решения одной и той же проблемы. В нашем проекте нам пришлось удалить все индексы в таблицу, выполнить изменения и восстановить индексы.

Ответ 3

Если ваша система должна использовать таблицу, то DBMS_Redefinition - это действительно ваш единственный выбор.