Python에서 Oracle 연결하기

회사 검색엔진에 DBConnector라는 프로그램이 있다.

물론 다른 검색엔진도 마찬가지겠지만 DB를 Connect해서 DB자료를 크롤링 해오는것이다.
그래서 속칭 DB 크롤러(Crawler)라고도 한다.

이걸 약 1년전에 Java로 돌려보다가.. 클라이언트에 자바 런타임을 설치하는게 보기도 안좋고 귀찮아서 Python으로 간단하게 만들어 쓰고 있다.

이래저래 수많은 Oracle DB와 붙어봐서 이제 Python으로 Oracle DB붙는건 일도 아닌게 되어 버렸다.

그 귀찮은 Oracle 클라이언트 설치하는건.
이제 Instant Client로 다 해결한다.
이렇게 Instant Client로 해결하는건 윈도우일때보다 리눅스일때 훨씬 편하다.
근데 이제 부턴 리눅스에서 DB접속하는건 Java를 쓰기로 했다. 아무리 instant client로 설치한다고 해도 너무 번거롭기 때문이다. 게다가 cx_Oracle 모듈이 내가 잘 사용못해서 그런지 몰라도 오라클 프로시저를 호출하는데 무리가 있더라.
그래도 윈도우 상에서는 쓸만하니 이렇게 포스팅까지 올리는거다.

먼저 Instant Client설치를 해야하는데
Oracle 공식 사이트에서 받을수도 있는데 내가 가지고 있는 파일을 일단 여기 올려본다. 물론 윈도용이다.

[#FILE|instantclient10_1.part01.rar|200511/12/54/|mid|0|0|pds2#]
[#FILE|instantclient10_1.part02.rar|200511/12/54/|mid|0|0|pds1#]
[#FILE|instantclient10_1.part03.rar|200511/12/54/|mid|0|0|pds2#]
[#FILE|instantclient10_1.part04.rar|200511/12/54/|mid|0|0|pds2#]
[#FILE|instantclient10_1.part05.rar|200511/12/54/|mid|0|0|pds2#]
[#FILE|instantclient10_1.part06.rar|200511/12/54/|mid|0|0|pds1#]

이 파일을 압축은 푼 다음에 아무 폴더나 넣어놓는다.
나의 경우는 “C:\oracle_client” 폴더에 넣었다.

이렇게 하고
환경변수 Path 에 “C:\oracle_client”을 추가한다.
그리고 해야할일이 tnsnames.ora 파일을 구축하는거다.

# TNSNAMES.ORA Network Configuration File: D:\Oracle\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.

gogamza =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 000.000.000.000)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = gogamza)
    )
  )

이 파일을 일단 귀찮으니 “C:\oracle_client”에 저장한다.
그리고 “TNS_ADMIN” 환경변수를 tnsnames.ora 를 저장한 폴더로 지정해주면 된다.

게다가 “NLS_LANG” 환경변수를 추가해주면 다른 오류를 없앨수가 있기에 좋다.
이렇게 “KOREAN_KOREA.KO16KSC5601”

이렇게 하고 instant client가 10g 버전뿐이 없으니 cx_Oracle을 다운을 받는데 10g 버전을 다운받는다. 물론 접속하고 싶은 오라클 버전이 다를수 있겠지만 10g버전 클라이언트를 쓰기때문에 10g를 받아 설치한다.
물론 이걸로도 잘 접속이 되더라. (물론 Python버전은 사용하는것으로 골라줘야한다.)

여기까지 했으면 다 끝난거다.

일단 테스트를 해보자.

>> import cx_Oracle
>> cx_Oracle.connect(“id”,”password”,”TNS”)

위와 같이 해서 아무런 에러가 없이 connect 객체가 생성이 된다면 다 된거다.

그리고 하나의 팁을 알려주겠다.
tnsnames.ora 파일을 만들지 않고 Python에서 접속하는 방법이 있다.

>> cx_Oracle.connect(“id”,”password”, cx_Oracle.makedsn(“ip”,portnumber))

makedsn 메서드를 쓰는건데 자세한건 cx_Oracle 메뉴얼을 참고하기 바란다.

CC BY-NC 4.0 Python에서 Oracle 연결하기 by from __future__ import dream is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.