2016-12-03 49 views
1

我试图将数据从MySQL数据库(5.6.32-78)移动到Oracle数据库(11g)。使用mysqldump时,在oracle中创建表时,输出会导致“缺少右括号”错误。即... mysqldump的输出:mysqldump输出不是一个有效的Oracle“创建表”格式

CREATE TABLE "table1" (
    "ID" int(11) NOT NULL, 
    "column1" int(11) NOT NULL DEFAULT '0', 
    "column2" varchar(255) NOT NULL DEFAULT '', 
    PRIMARY KEY ("ID") 
); 

甲骨文期待以下(在NOT NULL和DEFAULT的顺序切换):

CREATE TABLE "table1" (
    "ID" int(11) NOT NULL, 
    "column1" int(11) DEFAULT '0' NOT NULL, 
    "column2" varchar(255) DEFAULT '' NOT NULL, 
    PRIMARY KEY ("ID") 
); 

是有我丢失纠正这一个选项?我有几百张桌子可以移动,不想通过编写程序来“重新发明轮子”来获得正确的输出。 (--compatible = oracle没有任何区别)。 谢谢。 Doug


我会尝试使问题更具体。

我想将MySQL迁移到Oracle数据库,并尝试使用mysqldump和各种选项,但它不会生成Oracle可用输出。我不能使用Oracle的SQL Developer,因为它需要同时连接到MySQL数据库(互联网)和Oracle数据库(在“无互联网访问”防火墙内)。有没有人知道创建Oracle友好的MySQL数据库导出的方法?

+2

mysql和oracle在很多方面都是两种不同的动物 –

回答

2

订单NOT NULLDEFAULT只是您将要面对的一个问题。 MySQL和Oracle之间有许多不同之处,不能用mysqldump选项修复。

http://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_compatible说:

该选项并不能保证与其它服务器的兼容性。它只启用当前可用于使转储输出更加兼容的SQL模式值。例如,--compatible=oracle不会将数据类型映射到Oracle类型或使用Oracle注释语法。

因此,您必须在将转储文件导入Oracle之前手动编辑一些转储文件。

您最好使用Oracle SQL Developer将您的MySQL数据库迁移到Oracle。您可以在这里找到带有视频的分步指南:http://www.oracle.com/technetwork/database/migration/index.html

请注意,可以通过单击其他商用RDBMS产品列表下方的链接“and others ...”来找到MySQL的步骤。这里有一个直接链接:http://www.oracle.com/technetwork/database/migration/mysql-093223.html

+0

谢谢比尔。我确实读过并尝试了几乎所有可用的mysqldump选项,以获得所需的DDL,但没有成功。我知道使用mysqldump的免责声明。我无法使用SQL Developer选项,因为Oracle数据库位于“从不连接到互联网”防火墙后面,而蓝色主机上的MySQL数据库(无法同时连接到两个防火墙)。我很好奇,如果有人已经使用mysqldump成功完成了MySQL到Oracle的迁移。我的选择是写一个DDL包或者在防火墙内设置一个mySQL数据库,然后导入到这个数据库中。 – Doug