호스트 이름, 포트 및 Oracle SID를 사용하여 개발 데이터베이스에 연결하는 JDBC (JPA를 통해)를 사용하는 Java 응용 프로그램이 있습니다.
jdbc : oracle : thin : @ oracle.hostserver1.mydomain.ca : 1521 : XYZ
XYZ는 Oracle SID였습니다. 이제 SID를 사용하지 않고 Oracle “서비스 이름”을 사용하는 다른 Oracle 데이터베이스에 연결해야합니다.
나는 이것을 시도했지만 작동하지 않습니다 :
jdbc : oracle : thin : @ oracle.hostserver2.mydomain.ca : 1522 : ABCD
ABCD는 다른 데이터베이스의 서비스 이름입니다.
내가 뭘 잘못하고 있죠?
답변
http://download.oracle.com/docs/cd/B28359_01/java.111/b31224/urls.htm#BEIDHCBA
씬 스타일 서비스 이름 구문
Thin 스타일 서비스 이름은 JDBC Thin 드라이버에서만 지원됩니다. 구문은 다음과 같습니다.
@ // host_name : 포트 _ 번호 / 서비스 _ 이름
예를 들면 다음과 같습니다.
jdbc : oracle : thin : scott / tiger @ // myhost : 1521 / myservicename
그래서 시도 할 것입니다 :
jdbc : oracle : thin : @ // oracle.hostserver2.mydomain.ca:1522/ABCD
또한 Robert Greathouse의 답변에 따라 JDBC URL에서 아래와 같이 TNS 이름을 지정할 수 있습니다.
jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL=TCP)(HOST=blah.example.com)(PORT=1521)))(CONNECT_DATA=(SID=BLAHSID)(GLOBAL_NAME=BLAHSID.WORLD)(SERVER=DEDICATED)))
답변
이 작업을 수행하는 두 가지 쉬운 방법이 있습니다. Bert F가 게시 한 솔루션은 다른 특정 Oracle 관련 연결 속성을 제공 할 필요가 없으면 제대로 작동합니다. 그 형식은 다음과 같습니다.
jdbc:oracle:thin:@//HOSTNAME:PORT/SERVICENAME
그러나 다른 Oracle 특정 연결 속성을 제공해야하는 경우 긴 TNSNAMES 스타일을 사용해야합니다. 최근 서버에서 자체 연결 풀링을 수행하는 Oracle 공유 연결을 활성화하기 위해이 작업을 수행해야했습니다. TNS 형식은 다음과 같습니다.
jdbc:oracle:thin:@(description=(address=(host=HOSTNAME)(protocol=tcp)(port=PORT))(connect_data=(service_name=SERVICENAME)(server=SHARED)))
Oracle TNSNAMES 파일 형식에 익숙하면 익숙 할 것입니다. 그렇지 않은 경우 Google에서 세부 정보를 제공합니다.
답변
아래와 같이 JDBC URL에 TNS 이름을 지정할 수도 있습니다.
jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL=TCP)(HOST=blah.example.com)(PORT=1521)))(CONNECT_DATA=(SID=BLAHSID)(GLOBAL_NAME=BLAHSID.WORLD)(SERVER=DEDICATED)))
답변
이 시도: jdbc:oracle:thin:@oracle.hostserver2.mydomain.ca:1522/ABCD
편집 : 아래 주석마다 실제로 맞습니다 : jdbc:oracle:thin:@//oracle.hostserver2.mydomain.ca:1522/ABCD
(참고 //
)
유용한 기사에 대한 링크 는 다음과 같습니다.
답변
이 토론은 내가 며칠 동안 고투하던 문제를 해결하는 데 도움이되었습니다. Jim Tough가 5 월 18 일 11시 15 분 17 초에 답변을 찾을 때까지 인터넷 전체를 둘러 보았습니다. 그 대답으로 나는 연결할 수있었습니다. 이제 저는 완전한 예를 들어주고 다른 사람들을 돕고 싶습니다. 간다 :
import java.sql.*;
public class MyDBConnect {
public static void main(String[] args) throws SQLException {
try {
String dbURL = "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=whatEverYourHostNameIs)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=yourServiceName)))";
String strUserID = "yourUserId";
String strPassword = "yourPassword";
Connection myConnection=DriverManager.getConnection(dbURL,strUserID,strPassword);
Statement sqlStatement = myConnection.createStatement();
String readRecordSQL = "select * from sa_work_order where WORK_ORDER_NO = '1503090' ";
ResultSet myResultSet = sqlStatement.executeQuery(readRecordSQL);
while (myResultSet.next()) {
System.out.println("Record values: " + myResultSet.getString("WORK_ORDER_NO"));
}
myResultSet.close();
myConnection.close();
} catch (Exception e) {
System.out.println(e);
}
}
}
답변
SID없이 오라클을 연결하기 위해 일식을 사용하는 경우. 선택할 수있는 두 가지 드라이버가 있습니다. 즉, Oracle thin 드라이버와 다른 드라이버입니다. 다른 드라이버를 선택하고 데이터베이스 열에 서비스 이름을 입력하십시오. 이제 SID없이 서비스 이름을 사용하여 직접 연결할 수 있습니다.
답변
dag
대신에 사용하면 thin
서비스 이름을 가리키는 아래 구문이 효과적이었습니다. jdbc:thin
위 의 솔루션은 작동하지 않았습니다.
jdbc:dag:oracle://HOSTNAME:1521;ServiceName=SERVICE_NAME