2011-05-15 155 views
1

我想从oracle迁移到MySql。我正在使用MySql迁移工具5.0。 迁移向导中出现问题。从Oracle迁移到MySql

Error while establishing connection

错误消息

Connecting to source database and retrieve schemata names. 
Initializing JDBC driver ... 
Driver class Oracle Thin JDBC Driver using Service 
Opening connection ... 
Connection jdbc:oracle:thin:system/**********@//127.0.0.1:1521/OracleServiceXE 
The list of schema names could not be retrieved (error: 0). 
ReverseEngineeringOracle.getSchemata :Listener refused the connection with the following error: 
ORA-12514, TNS:listener does not currently know of service requested in connect descriptor 
The Connection descriptor used by the client was: 
//127.0.0.1:1521/OracleServiceXE 

Details: 
oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:125) 
oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:280) 
oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:328) 
oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:361) 
oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:151) 
oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32) 
oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:595) 
java.sql.DriverManager.getConnection(Unknown Source) 
java.sql.DriverManager.getConnection(Unknown Source) 
com.mysql.grt.modules.ReverseEngineeringGeneric.establishConnection(ReverseEngineeringGeneric.java:141) 
com.mysql.grt.modules.ReverseEngineeringOracle.getSchemata(ReverseEngineeringOracle.java:43) 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
java.lang.reflect.Method.invoke(Unknown Source) 
com.mysql.grt.Grt.callModuleFunction(Unknown Source) 

两个SQL服务器上本地主机上运行。

我该如何解决这些错误?

回答

2

您可以将使用的服务名称添加到oracle数据库,或将输入的值'OracleServiceXE'修改为正确的值'XE'。输入的值看起来很像默认的Windows服务名称,可能会与Oracle数据库服务名称混淆。

要改变当前实例服务名称OracleServiceXE:

alter system set service_name = 'OracleServiceXE'; 

lsnrctl services

也应该表现出病房后,服务名称,除非该数据库实例使用是受限制的状态,在这种情况下,连接服务名称将失败。

+0

我的oracle服务名已经是'OracleServiceXE' 不需要改变它。 – smitrp 2011-05-15 18:59:07

+0

@ smitpatel24你是正确的,如果lsnrctl显示服务确实将OracleServiceXE显示为受支持的Oracle服务。从您写的内容来看,实例处于受限会话中或不支持OracleServiceXE。那么,lsnrctl显示服务显示什么? – 2011-05-15 19:06:20

+0

对于XE,数据库实例名称是XE,这是TNSNAMES.ORA中服务的名称。这就是你所需要的JDBC。您不使用Windows服务名称,因为(震动,恐怖)并非每个人都使用Windows。 – 2011-05-15 22:58:46

0

它在我看来,你的Oracle的jdbc连接URL是错误的。通常,它看起来是这样的:

jdbc:oracle:thin:@localhost:1521:xe 

如果去掉双斜线//和一个冒号:更换斜线1521/OracleServiceXE之间/会发生什么?

+0

MySql迁移工具设置连接字符串。 用户名密码是必需的,因为没有密码,MySql无法选择要从中提取数据的数据库(系统模式)。 – smitrp 2011-05-15 17:36:46

+0

但是你必须在某处配置这些值?什么是配置值? – 2011-05-15 17:41:28

+0

是的,我已经在向导中的“源数据库连接”步骤中配置了这些值。这些是“必须”的价值。没有他们,巫师不会采取任何行动。 – smitrp 2011-05-15 17:45:55