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
'programing' 카테고리의 다른 글
*.so 파일에서 기능하도록 기능 주소를 매핑하는 방법 (0) | 2023.06.18 |
---|---|
j선택한 값 가져오기 라디오 버튼 쿼리 (0) | 2023.06.18 |
Intents를 사용하여 한 Android 활동에서 다른 활동으로 개체를 보내는 방법은 무엇입니까? (0) | 2023.06.18 |
텍스트 필드에서 여러 열을 결합하는 MVC 선택 목록 (0) | 2023.06.18 |
R 벡터의 모든 요소에서 마지막 n자를 제거하는 방법 (0) | 2023.06.18 |