2012-05-17 4 views
20

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

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

VERSUS

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

Сколько строк существует в таблице USER? –

+0

В таблице пользователя существует 10 000 строк. –

+0

Можете ли вы измерить производительность? – Kiquenet

ответ

17

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

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

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

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

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

0

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

0

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

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