从Oracle迁移到MySql
问题描述:
我想从oracle迁移到MySql。我正在使用MySql迁移工具5.0。 迁移向导中出现问题。从Oracle迁移到MySql
错误消息
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服务器上本地主机上运行。
我该如何解决这些错误?
答
您可以将使用的服务名称添加到oracle数据库,或将输入的值'OracleServiceXE'修改为正确的值'XE'。输入的值看起来很像默认的Windows服务名称,可能会与Oracle数据库服务名称混淆。
要改变当前实例服务名称OracleServiceXE:
alter system set service_name = 'OracleServiceXE';
lsnrctl services
也应该表现出病房后,服务名称,除非该数据库实例使用是受限制的状态,在这种情况下,连接服务名称将失败。
答
它在我看来,你的Oracle的jdbc连接URL是错误的。通常,它看起来是这样的:
jdbc:oracle:thin:@localhost:1521:xe
如果去掉双斜线//
和一个冒号:
更换斜线1521/OracleServiceXE
之间/
会发生什么?
我的oracle服务名已经是'OracleServiceXE' 不需要改变它。 – smitrp 2011-05-15 18:59:07
@ smitpatel24你是正确的,如果lsnrctl显示服务确实将OracleServiceXE显示为受支持的Oracle服务。从您写的内容来看,实例处于受限会话中或不支持OracleServiceXE。那么,lsnrctl显示服务显示什么? – 2011-05-15 19:06:20
对于XE,数据库实例名称是XE,这是TNSNAMES.ORA中服务的名称。这就是你所需要的JDBC。您不使用Windows服务名称,因为(震动,恐怖)并非每个人都使用Windows。 – 2011-05-15 22:58:46