본문 바로가기
Developer/DB

LISTENER & tnsnames

by 순수한소년 2015. 1. 15.
728x90
반응형
기존에는 서버에서 쓸때는 그냥 tnsnames.ora 에 등록된 것을 그대로 쓰면서 어딘가 설정파일이 있어서 되나보다..
하고 있었는데 로컬에서 돌릴때는 직접 cxo 를 잡고 sid를 적으면서 사용했었다..

그러다가 이번에 sid 접속 대신 service name 을 사용하게 되면서 설정에 문제가 생겼다..
로컬에서도 tnsnames.ora를 통해 설정하면 되는걸 알고 이런 설정파일이 있다는걸 뒤늦게 알아버렸다....
그래서 알고 쓰는 것과 모르고 쓰는 것은 다르다니까 ㅡ_ㅡ

아래와 같이 설정하는데 만약 위치에 파일이 없다면?? 만들면 된다 -0-/


 ♣ listener.ora
    -
위치: $ORACLE_HOME/network/admin/listener.ora

    - 오라클 서버에서 클라이언트의 요청을 듣고, 클라이언트와의 통신 환경을 설정하는 파일
    - 오라클 서버에 존재하며, 오라클 클라이언트에서 서버로 접속할 때 필요한 프로토콜 및 포트 정보등을 설정하는
    - 프로토콜은 주로 TCP/IP가 많이 사용
    - 설정형식:
    LISTENER =
        (DESCRIPTION_LIST =
              (DESCRIPTION =
                  (ADDRESS_LIST =
                       (ADDRESS = (PROTOCOL = TCP)(HOST = 호스트ip)(PORT = 포트번호)) 
                  ) 
                  (ADDRESS_LIST =
                       (ADDRESS = (PROTOCOL = TCP)(HOST = 호스트ip)(PORT = 포트번호)) 
                  ) 
              )
         ) 

     SID_LIST_LISTENER
        (SID_LIST = 
            (SID_DESC =
                 (SID_NAME = SID_name
                 (ORACLE_HOME = 오라클위치)
            )
        ) 
    - description_list 의 description 에는 address_list 는 여러개의 리스닝포트가 올 수 있다.

 tnsnames.ora
   
- 위치: $ORACLE_HOME/network/admin/tnsnames.ora

    - 오라클 클라이언트에서 오라클 서버로 접속할 때 필요한 프로토콜 및 포트번호, 서버주소, 인스턴스등을 설정해주는 파일
    - 설정형식:
      DB_Alias = 
        (DESCRIPTION =
             (ADDRESS_LIST =
                  (ADDRESS = (PROTOCOL = TCP)(HOST = 오라클서버ip)(PORT
 = 포트번호))
             )
            (CONNECT_DATA =
                 (SID/SERVICE_NAME = DB_name
            ) 
         ) 

     - DB_Alias 는 호출해서 쓸 별칭이며 실제 DB명칭은 connect_data 의 sid나 service_name 부분이다.
        SID는 서버에 환경변수로 설정되어 있으며 서버에서 echo $ORACLE_SID 또는 env 명령으로 확인할 수 있다.

 ※ listener.ora와 tnsnames.ora파일의 위치는 ORACLE_HOME/network/ADMIN/에 존재
 ※ linstener.ora와 tnsnames.ora는 둘다 오라클 설치시 Net8 configuration 작업을 해주면 생성
 원격 DB의 연결은 Net8 을 통해 이루어지며 원격 DB를 연결하기 위해 원격 DB 서버에서는 listener.ora 파일이 
    설정되어 있어야 하며 클라이언트 쪽에는 tnsnames.ora 파일이 설정되어 있어야 함


Q. 파이썬에서 쓸 경우?
기존에 sid 를 직접 썼을 때는,
 cxo = cx_Oracle.makedsn('오라클서버ip','포트번호','SID')
 conn = cx_Oracle.connect("아이디", "비밀번호", cxo)
 cursor = conn.cursor()

tnsnames.ora를 불러오는 경우는,
 conn = cx_Oracle.connect("아이디", "비밀번호", "DB_Alias")
 cursor = conn .cursor()

728x90
반응형