Ограничения резервного копирования и восстановления Oracle, позволяющие изменять тип столбца

Мне нужно изменить тип столбца в более чем 200 таблицах. Я следую следующему рецепту:

  1. Отключите все внешние ограничения, если на столбец ссылается какой-либо FK
  2. Сохраняйте столбцы в varray и удаляйте первичный ключ, если столбец является частью PK
  3. Создайте временный новый столбец в таблице с тем же типом
  4. Обновите временный новый столбец с исходными значениями
  5. Удалить значения из исходного столбца
  6. Изменить тип столбца исходного столбца
  7. Обновить исходный столбец значениями временного столбца
  8. Восстановить первичный ключ, если он был применен
  9. Включить FK, если применяется

У меня возникают проблемы со следующими случаями

. Когда первичный ключ является составным (несколько столбцов). Мне нужно сохранить исходные подписи FK и PK, чтобы я мог восстановить их после изменения.

------- Мои идеи --------

  1. Сделайте резервную копию записей all_constraints и all_cons_columns во временной таблице и после изменения типа столбца восстановите информацию об ограничениях.

  2. Придерживайтесь той же идеи хранения подписи FK и PK, чтобы восстановить их после изменения типа столбца.

Какие-либо предложения ? был бы признателен, спасибо!!


person Jimmy    schedule 28.03.2012    source источник
comment
Какие «старые» и «новые» типы данных изменяемого столбца?   -  person Bob Jarvis - Reinstate Monica    schedule 28.03.2012
comment
старый тип NUMBER(10) новый тип VARCHAR2(10)   -  person Jimmy    schedule 28.03.2012
comment
Вы можете взглянуть на пакет DBMS_REDEFINITION (который, как мне кажется, является стандартной частью Oracle начиная с 9i), который может помочь вам со всеми этими проблемами.   -  person Bob Jarvis - Reinstate Monica    schedule 29.03.2012


Ответы (1)


Вы можете попробовать старый CTAS, а затем переименовать метод:

в принципе:

  1. создайте новую таблицу, выбрав c1,c1,c3... из старой таблицы (включите здесь преобразование типа данных;
  2. установить какие-либо индексы, ограничения...
  3. удалить старую таблицу (возможно, сначала потребуется отключить донстрейнтс)
  4. переименовать новую таблицу в старую таблицу
person Roger Cornejo    schedule 04.04.2012