2010-04-21 134 views
1

我有一个Django1.1项目,它可以与传统的MySQL数据库一起工作。 我正尝试将此项目迁移到Oracle(xe和11g)。 我们有两种迁移选项: - 使用SQL开发人员创建迁移sql脚本。 - 使用Django灯具。将Django项目从MySQL迁移到Oracle

使用来自sql developer的sql脚本创建的模式与从syncdb创建的模式不匹配。例如,Django预期TIMESTAMP列,而sql开发者创建DATE列。

使用执行syncdb Django的固定装置可能是伟大的,但要加载MySQL的灯具到Oracle时,使用后执行syncdb,我越来越: IntegrityError:ORA-00001:唯一约束(USER.SYS_C004253)违反

我怎样才能找到哪个部分创建完整性错误?

更新: 继Django的邮件列表中的建议,我已经试过:

  1. 转储一切,而连接到MySQL: 蟒蛇manage.py dumpdata> fixture.json

  2. 创建一个具有空模式的新Oracle用户并将数据库连接切换到Oracle(没有执行syncdb)

  3. loaddata到Oracle: python manage.py loaddata fixture.json

使用loaddata但在运行服务器和浏览到本地主机的时候,当我没有得到一个错误:8000我越来越: ORA-00942:表或视图不存在

感谢

回答

0

您可以查询Oracle信息架构(称为Oracle数据字典)查询所有表上的约束的列表来确定表名和列中所述的约束。

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' 
+0

我会试试看。谢谢 – pablo 2010-04-21 07:42:18

+0

这就是我得到的: TABLE_NAME ------------------------------------ -------------------------------------------- COLUMN_NAME --- -------------------------------------------------- --------------------------- AUTH_PERMISSION CONTENT_TYPE_ID AUTH_PERMISSION 代号 – pablo 2010-04-21 18:20:34

+1

尝试ALL_CONS_COLUMNS,因为它听起来像你从不同的用户查询/ schema – 2010-04-22 00:07:46