Перенос проекта Django из MySQL в Oracle

У меня есть проект Django1.1, который работает с устаревшей базой данных MySQL. Я пытаюсь перенести этот проект в Oracle (xe и 11g). У нас есть два варианта миграции: - Используйте SQL-разработчик для создания сценария миграции SQL. - Используйте светильники Django.

Схема, созданная с помощью сценария sql от разработчика sql, не совпадает со схемой, созданной из syncdb. Например, Django ожидает столбцы TIMESTAMP, в то время как SQL-разработчик создает столбцы DATE.

Использование syncdb с приспособлениями Django может быть полезным, но при попытке загрузить приспособления MySQL в Oracle, после использования syncdb, я получаю: IntegrityError: ORA-00001: уникальное ограничение (USER.SYS_C004253) нарушено

Как я могу найти какую часть создать ошибку целостности?

обновление: следуя совету в списке рассылки django, который я пробовал:

  1. выгрузить все данные при подключении к MySQL: python manage.py dumpdata > fixture.json

  2. Создал нового пользователя Oracle с пустой схемой и переключил соединение db на Oracle (не делал syncdb)

  3. загрузить данные в Oracle с помощью: python manage.py loaddata fixture.json

Я не получаю сообщение об ошибке при использовании loaddata, но при запуске сервера и переходе на localhost:8000 я получаю: ORA-00942: таблица или представление не существует

Спасибо

1 ответ

Решение

Вы можете запросить информационную схему оракула (называемую Oracle Datadictionary), чтобы запросить список ограничений для всех таблиц, чтобы определить имя таблицы и столбец для указанного ограничения.

select TABLE_NAME, COLUMN_NAME from user_cons_columns where CONSTRAINT_NAME = 'SYS_C004253'

Обновить

Из-за требований безопасности словарь данных разделен на отдельные части. Пользователь A не может видеть таблицы и ограничения от пользователя B.

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

connect system/<the_secret_password>
select TABLE_NAME, COLUMN_NAME from dba_cons_columns 
where CONSTRAINT_NAME = 'SYS_C004253' and OWNER = 'USER'
Другие вопросы по тегам