MySQLからOracleにDjangoプロジェクトを移行します
質問
レガシーmysql dbで動作するDjango1.1プロジェクトがあります。このプロジェクトをOracle(XEと11G)に移行しようとしています。移行には2つのオプションがあります。 -SQL開発者を使用して、移行SQLスクリプトを作成します。 -Djangoフィクスチャーを使用します。
SQL開発者のSQLスクリプトで作成されたスキーマは、SyncDBから作成されたスキーマと一致しません。たとえば、Djangoはタイムスタンプの列を期待し、SQL開発者は日付列を作成します。
syncdbをdjangoフィクスチャーで使用するのは素晴らしいことかもしれませんが、mysqlフィクスチャーをOracleにロードしようとすると、syncdbを使用した後、InteglityError:ora-00001:unique Constraint(user.sys_c004253)違反しています。
どの部分が整合性エラーを作成するかをどのように見つけることができますか?
更新:Djangoメーリングリストのアドバイスに従って、私は試しました:
mysqlに接続されている間、すべてをダンプします:python manage.py dumpdata> fixture.json
空のスキーマを持つ新しいOracleユーザーを作成し、DB接続をOracleに切り替えました(SyncDBを実行しませんでした)
loaddata to oracle with:python manage.py loaddata fixture.json
LoadDataを使用するときはエラーが発生しませんが、サーバーを実行してLocalHostに移動するとき:8000私は取得しています:ORA-00942:テーブルまたはビューが存在しません
ありがとう
解決
Oracle Information Schema(Oracle Datadictionaryと呼ばれる)を照会して、すべてのテーブルの制約のリストをクエリして、上記の制約のテーブル名と列を識別できます。
select TABLE_NAME, COLUMN_NAME from user_cons_columns where CONSTRAINT_NAME = 'SYS_C004253'
アップデート
セキュリティ要件により、データ辞書は異なる部分に分離されます。ユーザーAは、ユーザーBからのテーブルと制約を確認できません。
情報が見つからない場合は、Global Accessを持ち、データ辞書のDBA部分を照会したDBAユーザーAcountを使用できます。
connect system/<the_secret_password>
select TABLE_NAME, COLUMN_NAME from dba_cons_columns
where CONSTRAINT_NAME = 'SYS_C004253' and OWNER = 'USER'