programing

Java JDBC - tnsnames.ora를 사용하여 Oracle에 연결하는 방법

oldcodes 2023. 6. 18. 16:18
반응형

Java JDBC - tnsnames.ora를 사용하여 Oracle에 연결하는 방법

tnsnames.ora파일은 다음을 포함합니다.Databases그리고 그들의 설명 (host+port).

  • 위에 언급된 파일에 의존하여 연결이 가능합니까?(DB 이름만 제공하여 말함):

  • 이 파일을 찾으려면 Windows 레지스트리에서 확인해야 하는 기본 오라클 홈을 알아야 합니다.HKEY_LOCAL_MACHINE\Software\Oracle그리고 나서 모든 것을 갖는 것.KEY_XXX파일을 확인한 다음 어떤 파일이 먼저 표시되는지 확인합니다.%PATH%클라이언트 컴퓨터에서 이 파일을 자동으로 찾을 수 있는 방법이 있습니까?

Thin 드라이버와 함께 tns names를 사용하는 것이 가능하다는 것을 알지도 못했지만, 분명히 버전 10:

http://docs.oracle.com/cd/B19306_01/java.102/b14355/urls.htm#BEIDIJCE

특히:

참고:

JDBC Thin 드라이버와 함께 TNSNames를 사용하는 경우 tnsnames.ora 파일이 포함된 디렉토리에 oracle.net .tns_admin 속성을 설정해야 합니다.

java -Doracle.net.tns_admin=%ORACLE_HOME%\network\admin

언급했듯이, 저는 이것이 실제로 작동하는지 확인하지 않았습니다.

"실제 네트워크 구성 디렉터리 찾기" 논리는 일부 오라클 기능을 통해 사용할 수 없다고 생각합니다.질문에 설명된 대로 수동으로 수행해야 합니다. 그렇지 않으면 TNS_ADMIN 환경 변수가 존재할 수 있습니다.이 경우, 자바 호출은

java -Doracle.net.tns_admin=%TNS_ADMIN%

일부 GUI에서는 TNS 드라이버 구성이 구현되지 않거나 작동하지 않습니다(예: NetBeans).

https://netbeans.org/bugzilla/show_bug.cgi?id=231526

이 주변에는 간단한 해결 방법이 있습니다.다음과 같이 tnsnames.ora 파일에서 직접 항목을 가져와 jdbc 드라이버 문자열에 첨부할 수 있습니다.

odbc7.jar(JDK 7용 Oracle 12c JDBC 드라이버)를 사용하여 Oracle 11gR2 RAC 클러스터에 연결한 경우의 예:

jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(PROTOCOL=TCP)(HOST=hostA)(PORT=1522))(ADDRESS=(PROTOCOL=호스트B)(PORT=1521)(SOURCE_ROUTE=예)(SERVICE_NAME=Service))

다음과 같이 마지막에 ::을(를) 입력할 경우 마지막에 host:port:service로 이중 문자를 입력해야 합니다.

jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(PROTOCOL=TCP)(HOST=hostA)(PORT=1522))(ADDRESS=(PROTOCOL=호스트B)(PORT=1521)(SOURCE_ROUTE=예)(SERVICE_NAME=Service))::

"NL 예외가 생성되었습니다" 예외가 발생합니다.

또 다른 접근 방식은 다음 속성을 구성하는 것입니다.시스템.setProperty("oracle.net .tns_admin", "C:/app/product/11.2.0/client_1/NETWORK/ADMIN");

물론 하드코딩된 값 대신 운영 체제에서 ORACLE_TNS_ADMIN과 같은 환경 변수를 설정한 다음 참조할 수 있습니다.

System.setProperty("oracle.net.tns_admin",System.getenv("ORACLE_TNS_ADMIN"));

또는 Linux의 -D 스위치를 통해 Java 프로세스로 전달합니다.

-Doracle.net.tns_admin=$ORACLE_TNS_ADMIN

및 창:as

-Doracle.net.tns_admin=%ORACLE_TNS_ADMIN%

응용 프로그램이 TNS 구성 파일을 인식하면 다음과 같이 TNSNAMES.ora 파일의 참조 서비스 이름으로 연결할 수 있습니다.

 // tell the driver where to look for the TNSNAMES.ORA file
System.setProperty(
          "oracle.net.tns_admin",
          "C:/app/product/11.2.0/client_1/NETWORK/ADMIN");

// ORCL is net service name from the TNSNAMES.ORA file
String dbURL = "jdbc:oracle:thin:@ORCL";

// load the driver
Class.forName("oracle.jdbc.OracleDriver");

Connection conn = null;
Statement stmt = null;

try {
  conn = DriverManager.getConnection(dbURL,
                                     "your_username",
                                     "your_password");

  stmt = conn.createStatement();

  ResultSet rs = stmt.executeQuery("SELECT dummy FROM dual");

18.3부터는 tnsnames.ora 파일의 위치를 제공하는 TNS_ADMIN을 연결 URL의 일부로 전달할 수 있습니다.구문에 유의하십시오.

jdbc:oracle:thin:@jdbctest_medium?TNS_ADMIN=/test/cloud/network

먼저 SQL Developer 소프트웨어가 컴퓨터에 제대로 설치되어 있는지 확인합니다.씬 드라이버를 사용하는 경우 ojdbcX.jar 파일이 빌드 경로에 있는지 확인합니다.TNS 별칭 이름을 사용하여 Oracle 데이터 원본에 연결하는 단계는 다음과 같습니다.

  • 에 대한 oracle.net.tns_admin은 당신의 것은당있디가를리합니다가 .tnsnames.ORA

    System.setProperty("oracle.net.tns_admin", DIRECTORY_PATH_TO_TNSNAME.ORA_FILE);

  • Oracle 드라이버 등록

    DriverManager.registerDriver(새 OracleDriver());

  • 연결 개체 만들기

    Connection conn = DriverManager.getConnection("jdbc:oracle:thin:username/password@TNS_ALIAS_NAME");

데이터베이스 연결을 설정해야 합니다.

다음을 시도할 수도 있습니다.

몇 시간 동안 문제를 해결한 후에 제가 수정한 샘플을 발견하고 보석처럼 작동합니다.

jdbc:oracle:thin:@(description=(address_list=(address=(protocol=tcp)(port=1521)(host=19.16.200.12)) (address=(protocol=tcp)(port=1521)(host=19.16.200.10)))(load_balance = yes)(connect_data=(SERVICE_NAME=stackdb)))

부하 분산이 없는 샘플은 아래와 같습니다.

jdbc:oracle:thin:@(description=(address_list=(address=(protocol=tcp)
(port=1521)(host=prodHost)))(connect_data=(INSTANCE_NAME=ORCL)))

여기 https://docs.oracle.com/cd/E11882_01/java.112/e16548/jdbcthin.htm#JJDBC28202 에 도움이 된 URL이 있습니다.

언급URL : https://stackoverflow.com/questions/14194750/java-jdbc-how-to-connect-to-oracle-using-tnsnames-ora

반응형