[ORACLE] 오라클 TNS

※ 일을 하다보니 타 업체의 DB에 붙어야할 경우가 생긴다.

당연하게도 접속정보를 알아야하는데, tnsnames.ora 정보를 처음 받았을 때 당혹감이란....

이것저것 값 끼워맞춰보면서 몇시간만에 접속 성공한 경험은 두번 다시 안하고 싶다...

TNS에 대해 잘 알면 도움이 될것같아 정리한 포스팅

1. TNS (Transparent Network Substrate) 란?

  • Oracle이 개발한 네트워크 프로토콜 스택
  • Oracle에 접속하는 방법 중 하나이다 (클라이언트가 접속할 때 쓸 수도 있고 서버가 접속할 때 쓸수도 있는)
  • Oracle DB에 접속할 때 '어디에, 어떻게 연결할지' 를 적어두는 전화번호부 같은 것
    • 전화를 걸때, 번호를 직접 입력해 전화할 수도 있지만 연락처에 저장돼있다면 연락처만으로 전화를 걸 수 있는 느낌
  • 다음과 같은 파일로 구성된다
    • tnsnames.ora
      • 클라이언트 alias 정의
      • 클라이언트 측에서 DB접속 별칭을 정의할 수 있다 (alias)
    • listener.ora : 서버 수신 설정
    • sqlnet.ora : 네트워크 옵션

 

2. TNS 구조

MY_ALIAS =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = mydb)
    )
  )

위처럼 정의하면 개발자가 @MY_ALIAS 라고만 써도 Oracle이 알아서 192.168.1.100:1521/mydb 를 찾음

 

사진 링크 : https://bangu4.tistory.com/13

 

  • ALIAS
    • tnsnames.ora에서 정의하는 접속 별칭
    • 클라이언트에서 @MY_ALIAS로 접속 시 이 블록 전체를 참조함
  • DESCRIPTION
    • 하나의 접속 정보 묶음 최상위 블록
    • 접속하고자 하는 타겟 데이터베이스의 정보
    • ADDRESS(네트워크 정보)와 CONNECT_DATA(DB 정보)를 감싸는 컨테이너
  • ADDRESS
    • PROTOCOL 
      • 통신 프로토콜
      • 보통 TCP 많이  사용
    • HOST
      • DB 서버 IP 또는 호스트명
    • PORT
      • Oracle Listener 포트
  • CONNECT_DATA
    • SERVER : 접속 방식
      • DEDICATED(전용 프로세스) / HARED(공유)
    • SERVICE_NAME 
      • DB 서비스명. listener.ora의 서비스명과 반드시 일치해야 함
      • SERVICE_NAME 대신 SID를 쓰는 경우도 있음
      • SERVICE_NAME vs SID (별도 포스팅에서 자세하게 다룰 예정)
        • SERVICE_NAME : 논리적 서비스 단위, RAC 환경 및 Oracle 9i 이후 권장
        • SID : 물리적 인스턴스 식별자, 구버전 방식

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 불일치