JDBC 연결에서 TNS 이름과 서비스 이름을 사용하는 것의 차이점
JDBC 연결을 사용하여 Oracle 데이터베이스에 연결하는 Java 기반 서버(Tomcat)가 있습니다.데이터베이스에 연결하는 방법은 SID, TNS 이름, 서비스 이름 등 여러 가지가 있습니다.
클러스터된 데이터베이스에 연결하는 경우 이러한 각 연결의 차이점과 권장되는 연결(SID, TNS 또는 서비스)이 무엇인지 알고 싶습니다.다음은 데이터베이스에 대한 TNS 이름입니다.
MY_NICE_TNS_NAME.MY_COMPANY.COM =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = myhostname)(PORT = 1521))
(LOAD_BALANCE = YES)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = MY_NICE_SERVICE_NAME.MY_COMPANY.COM)
(FAILOVER_MODE =
(TYPE = SELECT)(METHOD = BASIC)(RETRIES = 180)(DELAY = 5)
)
)
)
감사합니다!
SERVICE_NAME데이터베이스 인스턴스(또는 여러 인스턴스)에 대한 별칭입니다.기본 목적은 클러스터를 실행하는 경우입니다.이를 사용하여 클러스터 내의 특정 데이터베이스를 연결할 수 있습니다.그리고 다른 방법으로, 사용.SID(시스템 IDentifier) Oracle 데이터베이스 인스턴스의 고유한 이름인 데이터베이스 인스턴스에 연결할 수 있습니다.
간단히 말해 SID = DB의 고유 이름, SERVICE_NAME = 연결 시 사용되는 별칭입니다.
직접 지정, tnsnames.ora(예: TNS 이름), LDAP 디렉토리, 네트워크 정보 서비스와 같은 데이터베이스 정보를 제공하는 몇 가지 방법이 있습니다.
TNS(Transparent Network Substrate) 이름은 다음 항목의 이름입니다.tnsnames.ora보관되어 있는 파일$ORACLE_HOME/network/admin
이 파일에는 시스템이 오라클 데이터베이스에 연결하는 데 사용하는 정보가 들어 있습니다.이를 통해 클라이언트는 서버 관련 정보를 투명하게 가져올 수 있습니다.다음과 같은 정보가 포함되어 있습니다.
PROTOCOL
HOST IP ADDRESS
PORTNO
SID or SERVICE_NAME
예
mydb =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.35.15.1)(PORT = 1521))
(CONNECT_DATA = (SID = mydb))
JDBC 드라이버는 다음과 같이 TNS를 사용하여 연결 문자열로 연결합니다.
System.setProperty("oracle.net.tns_admin", PATH_TO_TNSNAMES.ORA);
Class.forName ("oracle.jdbc.OracleDriver");
dbUrl = "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST="+IPHOST+")(PORT="+PORT+"))(CONNECT_DATA=(SERVER = DEDICATED)(SERVICE_NAME="+DBNAME+")))"
conn = DriverManager.getConnection(dbUrl, USERNAME, PASSWORD);
Oracle SID는 인스턴스/데이터베이스를 고유하게 식별하는 고유한 이름입니다. as service name은 데이터베이스에 원격으로 연결할 때 지정하는 TNS 별칭이며 이 서비스 이름은 클라이언트의 Tnnames.ora 파일에 기록되며 SID와 동일할 수 있으며 원하는 다른 이름도 지정할 수 있습니다.
SERVICE_NAME은 데이터베이스가 수신기에 자체 등록할 수 있는 오라클 8i 이상의 새로운 기능입니다.데이터베이스가 이런 방식으로 수신기에 등록된 경우 SERVICE_NAME 매개 변수를 tnnames.ora에 사용하거나 그렇지 않으면 SID를 tnnames.ora에 사용할 수 있습니다.
또한 OPS(RAC)가 있는 경우 각 인스턴스에 대해 서로 다른 SERVICE_NAME을 갖게 됩니다.
SERVICE_NAMES는 이 인스턴스가 연결되는 데이터베이스 서비스의 이름을 하나 이상 지정합니다.동일한 데이터베이스의 서로 다른 용도를 구별하기 위해 여러 서비스 이름을 지정할 수 있습니다.예:
SERVICE_NAMES = sales.acme.com , widgetsales.acme.com
서비스 이름을 사용하여 복제를 통해 두 개의 서로 다른 데이터베이스에서 사용할 수 있는 단일 서비스를 식별할 수도 있습니다.
Oracle 병렬 서버 환경에서는 모든 인스턴스에 대해 이 매개 변수를 설정해야 합니다.
TNS는 연결을 설정하기 위한 데이터베이스 주소를 정의하는 sql*net 구성 파일입니다.
언급URL : https://stackoverflow.com/questions/15819433/difference-between-using-a-tns-name-and-a-service-name-in-a-jdbc-connection
'IT' 카테고리의 다른 글
| 빈 문자열이 split() 결과로 반환되는 이유는 무엇입니까? (0) | 2023.07.07 |
|---|---|
| (이름 없이) 지정된 번호에서 숫자만 추출하려면 어떻게 해야 합니까? (0) | 2023.07.07 |
| Vuex에서 작업으로 개체 전달 문제 (0) | 2023.07.07 |
| 벡터 또는 열에서 두 번째(세 번째...) 가장 높은/낮은 값을 찾는 가장 빠른 방법 (0) | 2023.07.07 |
| python 명령줄을 종료하는 중 (0) | 2023.07.07 |