SID 대신 서비스 이름을 사용하여 Oracle에 연결하는 방법
나는 다음과 같이 호스트 이름, 포트, 오라클 SID를 사용하여 개발 데이터베이스에 연결하던 JDBC(JPA를 통해)를 사용하는 Java 애플리케이션을 가지고 있다.
jdbc:oracle:thin:@oracle.hostserver1.mydomain.ca:1521:XYZ
XYZ는 오라클 SID였다.이제 SID를 사용하지 않고 오라클 "서비스 이름"을 사용하는 다른 오라클 데이터베이스에 연결해야 한다.
나도 해봤는데 안 되네.
jdbc:oracle:thin:@oracle.hostserver2.mydomain.ca:1522:ABCD
ABCD는 다른 데이터베이스의 서비스 이름이다.
내가 뭘 잘못하고 있는 거지?
http://download.oracle.com/docs/cd/B28359_01/java.111/b31224/urls.htm#BEIDHCBA
씬 유형 서비스 이름 구문
씬 스타일의 서비스 이름은 JDBC Thin 드라이버에서만 지원된다.구문은 다음과 같다.
@//host_name:port_number/service_name
예를 들면 다음과 같다.
jdbc:snm:thin:din:snm:snm:snm/snmyhost@//myservicename:
그래서 나는 다음과 같이 노력하겠다.
jdbc:flash:thin:@//oracle.hostserver2.mydomain.ca:1522/ABCD
또한 로버트 그레이트하우스의 답변에 따라 아래와 같이 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가 게시한 솔루션은 정상 작동한다.이를 위한 형식은 다음과 같다.
jdbc:oracle:thin:@//HOSTNAME:PORT/SERVICENAME
그러나 다른 Oracle별 연결 속성을 제공해야 하는 경우 긴 TNSNAMES 스타일을 사용하십시오.최근에 오라클 공유 연결을 실행하기 위해 이 작업을 수행해야 했다(서버가 자체 연결 풀링을 수행하는 위치).TNS 형식:
jdbc:oracle:thin:@(description=(address=(host=HOSTNAME)(protocol=tcp)(port=PORT))(connect_data=(service_name=SERVICENAME)(server=SHARED)))
Oracle TNSNAMES 파일 형식에 익숙하다면 이 형식은 익숙해 보일 것이다.만약 그렇지 않다면 세부사항을 구글로 검색하면 된다.
또한 아래와 같이 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
(참고하다)//
)
여기 도움이 되는 기사에 대한 링크가 있다.
이 토론은 내가 며칠 동안 고민하던 문제를 해결하는 데 도움이 되었다.나는 5월 18일 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
이:이기능이작동해야 함 일을 하게 될 것:jdbc:oracle:thin//hostname:Port/ServiceName=SERVICE_NAME
'programing' 카테고리의 다른 글
Java에서 코어 수 찾기 (0) | 2022.05.06 |
---|---|
Java에서 동기화되지 않도록 하시겠습니까? (0) | 2022.05.06 |
스프링 @트랜잭션 - 격리, 전파 (0) | 2022.05.06 |
C / C++ 컴파일러 경고: 코드를 모두 정리하여 제거하시겠습니까, 아니면 그대로 두십니까? (0) | 2022.05.06 |
해당 계산된 속성 방법 내에서 계산된 속성의 현재 값을 읽는 방법? (0) | 2022.05.06 |