※ 일을 하다보니 타 업체의 DB에 붙어야할 경우가 생긴다.
당연하게도 접속정보를 알아야하는데, tnsnames.ora 정보를 처음 받았을 때 당혹감이란....
이것저것 값 끼워맞춰보면서 몇시간만에 접속 성공한 경험은 두번 다시 안하고 싶다...
TNS에 대해 잘 알면 도움이 될것같아 정리한 포스팅
1. TNS (Transparent Network Substrate) 란?
- Oracle이 개발한 네트워크 프로토콜 스택
- Oracle에 접속하는 방법 중 하나이다 (클라이언트가 접속할 때 쓸 수도 있고 서버가 접속할 때 쓸수도 있는)
- Oracle DB에 접속할 때 '어디에, 어떻게 연결할지' 를 적어두는 전화번호부 같은 것
- 전화를 걸때, 번호를 직접 입력해 전화할 수도 있지만 연락처에 저장돼있다면 연락처만으로 전화를 걸 수 있는 느낌
- 다음과 같은 파일로 구성된다
- tnsnames.ora
- 클라이언트 alias 정의
- 클라이언트 측에서 DB접속 별칭을 정의할 수 있다 (alias)
- listener.ora : 서버 수신 설정
- sqlnet.ora : 네트워크 옵션
- tnsnames.ora
2. TNS 구조
MY_ALIAS =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = mydb)
)
)


- ALIAS
- tnsnames.ora에서 정의하는 접속 별칭
- 클라이언트에서 @MY_ALIAS로 접속 시 이 블록 전체를 참조함
- DESCRIPTION
- 하나의 접속 정보 묶음 최상위 블록
- 접속하고자 하는 타겟 데이터베이스의 정보
- ADDRESS(네트워크 정보)와 CONNECT_DATA(DB 정보)를 감싸는 컨테이너
- ADDRESS
- PROTOCOL
- 통신 프로토콜
- 보통 TCP 많이 사용
- HOST
- DB 서버 IP 또는 호스트명
- PORT
- Oracle Listener 포트
- PROTOCOL
- CONNECT_DATA
- SERVER : 접속 방식
- DEDICATED(전용 프로세스) / HARED(공유)
- SERVICE_NAME
- DB 서비스명. listener.ora의 서비스명과 반드시 일치해야 함
- SERVICE_NAME 대신 SID를 쓰는 경우도 있음
- SERVICE_NAME vs SID (별도 포스팅에서 자세하게 다룰 예정)
- SERVICE_NAME : 논리적 서비스 단위, RAC 환경 및 Oracle 9i 이후 권장
- SID : 물리적 인스턴스 식별자, 구버전 방식
- SERVER : 접속 방식
3. Java에서의 TNS 활용
// Thin 방식 (TNS alias 사용)
String url = "jdbc:oracle:thin:@MY_ALIAS";
// Thin 방식 (호스트IP:PORT:SID 등 직접 기술)
String url = "jdbc:oracle:thin:@192.168.1.100:1521:ORCL";
// OCI 방식 (tnsnames.ora 필수)
String url = "jdbc:oracle:oci:@MYDB";
/* [Thin] 방식
- 순수 Java로 구현된 드라이버로, Oracle 클라이언트 설치 없이 동작
- JVM만 있으면 어디서든 실행 가능
- 별도 Oracle Client 설치 불필요
*/
/* [OCI]
- Oracle Call Interface의 약자로
- Oracle Client 라이브러리를 JNI로 호출하는 방식
- Oracle Client설치/ tnsnames.ora 파일 필수
- 성능은 Thin보다 유리한 경우도 있으나, 환경 의존성이 높음
*/
- 자주 발생하는 오류
- ORA-12541 : No Listener
- Listener가 꺼져 있거나 포트 막힘
- ORA-12154 : TNS could not resolve alias
- tnsnames.ora에 alias 없음 또는 경로 오류
- ORA-12170 : Connect timeout
- 네트워크 방화벽, 잘못된 HOST//PORT 등
- ORA-12514 : Listener does not know service
- SERVICE_NAME 불일치
- ORA-12541 : No Listener
'DB\SQL > Oracle' 카테고리의 다른 글
| [SQL] 3. 내장함수(4) - 변환 함수(Conversion Function) to_char, to_date, to_number (0) | 2023.02.09 |
|---|---|
| [SQL] 3. 내장함수(3) - 날짜 처리 함수 (0) | 2023.02.09 |
| [SQL] 3. 내장함수(2) - 문자열 처리함수 (0) | 2023.02.06 |
| [SQL] 3. 내장함수(1) - 숫자함수(ABS, CEL, ROUND, SQRT, TRUNC, MOD) (0) | 2023.02.06 |
| [SQL] 2. 데이터 조작어(DML) - SELECT 문 & Oracle연산자 (0) | 2023.02.06 |