2010-05-06 6 views
0

Хорошо, поскольку клиент хочет автоматизировать определенный процесс, который включает в себя создание новой структуры ключей в базе данных LIVE, мне нужно создать отношения между tables.columns. Теперь я нашел таблицы ALL_CONS_COLS en USER_CONSTRAINTS для хранения информации об ограничениях. Если бы я вручную создавал ограничения, вставляя их в эти таблицы, я мог бы воссоздать исходные ограничения. Мой вопрос: есть ли еще таблицы, на которые я должен обратить внимание? Есть ли у вас альтернативные предложения, так как это звучит ОЧЕНЬ грязно и склонно к ошибкам.Oracle вручную добавляет ограничение FK

Текущих ментаторы

  • Создать новый столбец в каждой таблице для рк;

  • Создайте направляющую для этого ПК;

  • Создайте новый столбец в каждой таблице для FK;

  • Извлечь направляющую, связанную с
    FK;

....... сделал ГНФАР ......

  • Добавить новое ограничение, основанный на старой
    один;

  • Удалить старое ограничение;

  • Переименовать новые столбцы;

Это своего рода изворотливый, и я бы скорее изменил свой метод, любые идеи были бы полезными.

Чтобы сказать, что клиент хочет изменить ключевую структуру от int до guid в живой базе данных. Каков наилучший способ приблизиться к этому?

ответ

4

Прежде всего, вы не создаете/изменяете/удаляете ограничения, вступая в действие с помощью словаря данных, но с обычным синтаксисом ALTER TABLE t ADD/MODIFY/DROP CONSTRAINT.

В вашем случае я думаю, вы должны использовать следующий сценарий:

1) Убедитесь, что никто не изменяет данные в то время как эта операция происходит

2) Отбросьте старые ограничения внешних ключей первым избегайте столкновения имени с новыми ограничениями.

3) Отбросьте старые ограничения первичного ключа

4) Создание новых первичных ключей на Guid колонках

5) Создание новых внешних ключей

И тогда вы сделали.

С уважением, Роб.

+0

Хорошо, ALTER TABLE это так, но как я могу автоматизировать его для копирования существующих отношений? Единственный способ, который я могу себе представить, - это запросить отношения в таблице all_cons_cols и user_constraints, сделав ее копию, для «новых» столбцов и DROPping «старых». – Oxymoron

+0

Создайте скрипт, который генерирует команды для вас. Что-то вроде «select» alter table '|| table_name ||' drop constraint '|| constraint_name ||'; ' из user_constraints, где constraint_type = 'P' ", чтобы удалить все первичные ключи. И что-то похожее на удаление внешних ключей и создание новых ограничений. –

+0

Так что мне нужно, чтобы пользователь user_constraints стол в точности так же, как я делаю сейчас;) Готов в виду, что мы говорим о живой базе данных с записями. ОТКЛЮЧЕНИЕ или РАЗРЕШЕНИЕ не будет возможно из-за ссылок. – Oxymoron

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