2011-05-15 2 views
1

Oracle에서 MySql으로 마이그레이션하려고합니다. MySql Migration 도구 5.0을 사용하고 있습니다. 마이그레이션 마법사에서 문제가 발생했습니다.Oracle에서 MySql으로 마이그레이션

Error while establishing connection

오류 메시지는 모두 SQL 서버가 로컬 호스트에서 실행중인

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) 

입니다.

어떻게 이러한 오류를 해결할 수 있습니까?

답변

2

사용 된 서비스 이름을 oracle 데이터베이스에 추가하거나 입력 된 값인 'OracleServiceXE'를 올바른 값인 'XE'로 수정할 수 있습니다. 입력 된 값은 기본 Windows 서비스 이름과 매우 유사하므로 Oracle 데이터베이스 서비스 이름과 혼동 될 수 있습니다.

는 OracleServiceXE에 현재 인스턴스의 서비스 이름을 변경하려면 :

alter system set service_name = 'OracleServiceXE'; 

lsnrctl services

데이터베이스 인스턴스가 사용하는 경우 연결에 제한 상태에있는 경우가 아니면, 병동 후 서비스 이름을 표시해야합니다 서비스 이름은 실패합니다.

+0

Oracle 서비스 이름이 이미 'OracleServiceXE'입니다. 변경할 필요가 없습니다. – smitrp

+0

@ smitpatel24 lsnrctl show services가 OracleServiceXE를 지원되는 Oracle 서비스로 표시하는 경우에 맞습니다. 작성한 것으로부터 인스턴스가 제한된 세션에 있거나 OracleServiceXE를 지원하지 않습니다. 그렇다면 lsnrctl show services는 무엇을 보여줍니까? –

+0

XE의 경우 데이터베이스 인스턴스 이름은 XE이며 TNSNAMES.ORA의 서비스 이름입니다. 이것이 바로 JDBC에 필요한 것입니다. 모두가 Windows를 사용하지는 않기 때문에 (충격, 공포) Windows 서비스 이름을 사용하지 마십시오. –

0

Oracle 용 jdbc 연결 URL이 잘못되었습니다. 일반적으로는 다음과 같은 :

당신이 이중 슬래시 //을 제거하고 콜론 :에 의해 슬래시를 1521/OracleServiceXE 사이 /을 대체하면 어떻게됩니까
jdbc:oracle:thin:@localhost:1521:xe 

?

+0

MySql 마이그레이션 도구가 연결 문자열을 설정합니다. MySql이 없으면 데이터를 가져올 데이터베이스 (시스템 스키마)를 선택할 수 없으므로 username pass가 필요합니다. – smitrp

+0

하지만 그 값을 어딘가에 구성해야합니까? 구성된 값은 무엇입니까? –

+0

예 마법사의 "원본 데이터베이스 연결"단계에서 해당 값을 구성했습니다. 그것들은 "필수"값입니다. 마법사가 없으면 어떤 행동도 취하지 않습니다. – smitrp

관련 문제