Как можно быстро изменить тип поля (change field data type)

Готовим статьи для FAQ
Аватара пользователя
dmitri
Старожил
Сообщения: 1016
Зарегистрирован: 04 авг 2005, 16:19
Откуда: Pennsylvania, USA
Контактная информация:

Как можно быстро изменить тип поля (change field data type)

Сообщение dmitri » 24 мар 2006, 19:31

Недавно мне надо было изменить одно поле в таблице order с integer на decimal. Таблица Order имеет 100 миллионов записей. Поэтому копировать одно поле в другое дело долгое, и я не могу останавливать базы данных на многие часы. Вот что было сделано:

1. Останавливаем базу. Создаем новое поле new_field-name as decimal.
2. Сделан триггер. Write trigger for order
if order.field-name <> Old-order.field-name then
assign order.new_field-name = order.field-name.
Триггер будет гарантировать что значения обоих полей одинаковые.
3. Запускаем базу данних.
4. Копируем значения order.field-name (int) в order.new_field-name (dec) для всех ххх миллионов записей таблизы. Сколько бы это времени ни заняло.
5. Останавливаем базу. Меняем (rename) field-name (int) на junk_field-name и new_field-name (dec) на field-name. Перекомпилируем код. Все готово.
6. Проверяем что все работает. Удалаем junk_field-name.