Регистрация

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

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

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

Сообщение dmitri » Пт мар 24, 2006 8:31 pm

Недавно мне надо было изменить одно поле в таблице 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.

Вернуться в СТАТЬИ

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1