質問

レガシー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メーリングリストのアドバイスに従って、私は試しました:

  1. mysqlに接続されている間、すべてをダンプします:python manage.py dumpdata> fixture.json

  2. 空のスキーマを持つ新しいOracleユーザーを作成し、DB接続をOracleに切り替えました(SyncDBを実行しませんでした)

  3. 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'
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top