본문 바로가기

개발 노트

[OracleDB] 오라클 클라우드 자율운영 DB 연동 (w/ Python in Winodws)

반응형

오라클 자율운영 DB 접속 테스트 완료 후 다음으로 Python 에서 라이브러리로 DB를 사용하기 위한 작업이다.

Linux 에서 (WSL2) 사용하는 방법은 정리했는데 Windows 를 추가로 정리한다.)

 

0. 사전작업

  • VSCode 설치
  • VSCode 에 Python 사용 가능

1. cx_Oracle 라이브러리 설치

VSCode 의 터미널에서 cx_Oracle 라이브러리를 설치하는 명령을 입력한다. 나는 시스템 전역으로 사용하기 위해 아래의 명령으로 설치하였다.

 python -m pip install cx_Oracle --upgrade

위 명령은 cx_Oracle 라이브러리 공식문서에 나와있다.

2. Oracle Instant Client 다운로드

아마 기존에 오라클 자율운영 DB 를 SQL Developer 로 열어보았다면 이미 해당 라이브러리 파일들이 다운받아져 있을 것이다. 이를 다시 정리해 본다.

Oracle Instant Client 는 오라클에서 제공하는 사이트에서 다운받을 수 있다. (링크)

링크에 접속하면 현재 22년10월 기준으로 21.6.0.0.0 버전을 받을 수 있었다. 

Basic 압축 파일을 받는다.

해당 압축을 원하는 경로에 해제한다.

나의 경우 D 드라이브에 Oracle 폴더를 생성하여 압축해제 하였다.

3. tnsnames.ora 전자지갑 복사

Oracle Cloud 에서 받은 전자지갑 파일을 앞서 압축해제한 폴더 (위 예시의 경우 D:\Oracle\instantclient_21_6) 예하 network/admin 아래 복사해 놓는다.

최종경로 : D:\Oracle\instantclient_21_6\network\admin

 

4. 환경변수 설정

Oracle Instant Client 를 사용하기 위해 Windwos 에서 환경변수 설정을 한다.

Windows 검색 기능을 활용하면 쉽게 찾을 수 있다. Windows 검색에서 "환경" 을 검색하면 제어판의 환경변수 창을 띄워준다. (진짜 편한듯)

팝업된 창에서 "환경 변수"를 클릭한다.

위와 같이 "NLS_LANG", "ORACLE_HOME", "TNS_ADMIN" 값을 입력한다.

해당 환경변수 값들은 이 링크에서 자세히 확인할 수 있다.

 

다음은

Path 환경변수에 instantclient 경로를 추가해 준다.

(이름 가리기 겁나 귀찮네;;)

 

5. 테스트

LIB_PATH="D:\\Oracle\\instantclient_21_6\\"
WALLET_KEY=LIB_PATH+"network\\admin\\tnsnames.ora"
# USER_ID="userid" # Set user id 
# USER_PW="userpw" # SEt user pw

def read_lines(file_path) :
    lines = []
    f = open(file_path)
    lines = f.readlines()
    f.close()
    return lines
    
def get_tns_name() :
    lines = util.read_lines(WALLET_KEY)
    return lines[0].split(' ')[0].strip()

def connect_oracle() :
    dns_name = get_tns_name()
    cx_Oracle.init_oracle_client(lib_dir=LIB_PATH)
    print(dns_name)
    connection = cx_Oracle.connect(user=USER_ID, password=USER_PW, dsn=dns_name)
    cursor = connection.cursor()
    cursor.execute("select * from ALL_ALL_TABLES")
    res = cursor.fetchall()
    for row in res:
        print(row)
 
 connect_oracle()
반응형