본문 바로가기

개발 노트/Etc.

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

반응형

개요

오라클 클라우드의 Free tier 에서 사용할 수 있는 "오라클 자율운영 DB" 를 파이썬을 통해 컨트롤 하는 방법에 대해 정리한다.

사전준비

  • 오라클 자율운영 DB
  • 파이썬 개발환경 (python 3.8)
  • 인스턴스 전자지갑 압축파일

환경구성

1. cx_Oracle 패키지 설치

기본적으로 파이썬만 설치되어 있는 환경이라고 가정한다. 

참고 링크 : https://cx-oracle.readthedocs.io/en/latest/user_guide/installation.html

 

cx_Oracle 8 Installation — cx_Oracle 8.3.0 documentation

© Copyright 2016, 2020, Oracle and/or its affiliates. All rights reserved. Portions Copyright © 2007-2015, Anthony Tuininga. All rights reserved. Portions Copyright © 2001-2007, Computronix (Canada) Ltd., Edmonton, Alberta, Canada. All rights reserved.

cx-oracle.readthedocs.io

# 1. install pip (you can skip if installed)
curl https://bootstrap.pypa.io/get-pip.py | python3
# 2. install cx_Oracle
python3 -m pip install cx_Oracle --upgrade

아래 처럼 성공 메시지가 나오면 된다.

Defaulting to user installation because normal site-packages is not writeable
Collecting cx_Oracle
  Downloading cx_Oracle-8.3.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (891 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 891.5/891.5 kB 23.3 MB/s eta 0:00:00
Installing collected packages: cx_Oracle
Successfully installed cx_Oracle-8.3.0

 

2. instantclient 설치

Oracle instantclient 라이브러리를 다운받아 설치한다. (다운 링크)

압축을 특정 경로에 해제한 후 압축 해제한 디렉터리의 network/admin 경로에 인스턴스 전자지갑 압축을 해제한다.

# 인스턴트 클라이언트 라이브러리 설치
mkdir ~/oracle/
mv instantclient-basic-linux.x64-21.7.0.0.0dbru.zip ~/oracle/
cd ~/oracle
unzip instantclient-basic-linux.x64-21.7.0.0.0dbru.zip
    
# 인스턴스 전자지갑 압축파일 wallet.zip
mv wallet.zip oracle/instantclient_21_7/network/admin/
cd oracle/instantclient_21_7/network/admin/
unzip wallet.zip

# libaio1 설치
sudo apt install libaio1

# 설정 등록
sudo sh -c "echo ~/oracle/instantclient_21_7 > /etc/ld.so.conf.d/oracle-instantclient.conf"
echo "export LD_LIBRARY_PATH=~/oracle/instantclient_21_7:$LD_LIBRARY_PATH" >> ~/.bashrc
echo "export PATH=~/oracle/instantclient_21_7:$PATH" >> ~/.bashrc
source ~/.bashrc

소스코드

# HOME_DIR="/home/username/" # Set home dir
LIB_PATH=HOME_DIR+"oracle/instantclient_21_7/"
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()

위 예제를 실행 시 Oracle DB 에 있는 전체 테이블을 조회할 수 있다.

반응형