Перенос проекта 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, который я пробовал:
выгрузить все данные при подключении к MySQL: python manage.py dumpdata > fixture.json
Создал нового пользователя Oracle с пустой схемой и переключил соединение db на Oracle (не делал syncdb)
загрузить данные в 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'