1

従来のMySQLデータベースで動作するDjango1.1プロジェクトがあります。このプロジェクトをOracle(xeおよび11g)に移行しようとしています。移行には2つのオプションがあります。-SQL開発者を使用して移行SQLスクリプトを作成します。-Djangoフィクスチャを使用します。

SQL DeveloperのSQLスクリプトで作成されたスキーマが、syncdbから作成されたスキーマと一致しません。たとえば、SQL開発者がDATE列を作成する間、DjangoはTIMESTAMP列を予期します。

Djangoフィクスチャでsyncdbを使用することは素晴らしいかもしれませんが、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 loaddatafixture.json

loaddataを使用してもエラーは発生しませんが、サーバーを実行してlocalhost:8000に移動すると、次のようになります。ORA-00942:テーブルまたはビューが存在しません

ありがとう

4

1 に答える 1

0

Oracle情報スキーマ(Oracle Datadictionaryと呼ばれる)を照会して、すべての表の制約のリストを照会し、その制約の表名と列を識別することができます。

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

アップデート

セキュリティ要件により、データディクショナリは個別の部分に分割されています。ユーザーAは、ユーザーBからのテーブルと制約を表示できません。

情報が見つからない場合は、グローバルアクセス権を持つdba user-acountを使用して、データディクショナリのdba部分をクエリできます。

connect system/<the_secret_password>
select TABLE_NAME, COLUMN_NAME from dba_cons_columns 
where CONSTRAINT_NAME = 'SYS_C004253' and OWNER = 'USER'
于 2010-04-21T07:28:18.510 に答える