메뉴 여닫기
개인 메뉴 토글
로그인하지 않음
만약 지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

Oracle 접속 커넥션풀: 두 판 사이의 차이

데브카페
새 문서: Oracle DB가 여러 개일 경우, 각 DB에 대해 별도의 Connection Pool을 생성하고 관리할 수 있도록 코드를 수정해야 합니다. 아래는 여러 DB에 대한 접속을 처리할 수 있도록 확장한 버전입니다. ⸻ 1. 여러 DB 정보를 dict로 관리 import cx_Oracle # 접속할 여러 DB 정보 (key는 식별자) DB_CONFIGS = { "DB1": { "user": "user1", "password": "pass1", "dsn": "host1:1521/service1" },...
 
편집 요약 없음
 
1번째 줄: 1번째 줄:
Oracle DB가 여러 개일 경우, 각 DB에 대해 별도의 Connection Pool을 생성하고 관리할 수 있도록 코드를 수정해야 합니다. 아래는 여러 DB에 대한 접속을 처리할 수 있도록 확장한 버전입니다.


== Oracle 접속 커넥션풀 ==
# Oracle DB가 여러 개일 경우, 각 DB에 대해 별도의 Connection Pool을 생성하고 관리할 수 있도록 코드를 수정해야 합니다.
# 여러 DB에 대한 접속을 처리 기능.


1. 여러 DB 정보를 dict로 관리


=== 여러 DB 정보를 dict로 관리 ===
<source lang=python>
import cx_Oracle
import cx_Oracle


21번째 줄: 23번째 줄:
     # 필요 시 더 추가
     # 필요 시 더 추가
}
}
</source>




 
=== Connection Pool 생성 함수===
<source lang=python>
 
2. Connection Pool 생성 함수
 
def create_connection_pools(db_configs):
def create_connection_pools(db_configs):
     pools = {}
     pools = {}
47번째 줄: 47번째 줄:
     return pools
     return pools


</source>


 
=== 테스트 쿼리 함수 ===
<source lang=python>
 
3. 테스트 쿼리 함수


def test_query(pool, db_name):
def test_query(pool, db_name):
65번째 줄: 64번째 줄:
         print(f"[{db_name}] Query failed: {e}")
         print(f"[{db_name}] Query failed: {e}")


</source>






4. 메인 실행부
=== 메인 실행부 ===
 
<source lang=python>
if __name__ == "__main__":
if __name__ == "__main__":
     pools = create_connection_pools(DB_CONFIGS)
     pools = create_connection_pools(DB_CONFIGS)
80번째 줄: 80번째 줄:
     for pool in pools.values():
     for pool in pools.values():
         pool.close()
         pool.close()
</source>


 
* 실행 결과 예시
 
<source>
 
실행 결과 예시
 
[DB1] Connection pool created.
[DB1] Connection pool created.
[DB2] Connection pool created.
[DB2] Connection pool created.
[DB1] Current DB time: 2025-05-21 12:34:56
[DB1] Current DB time: 2025-05-21 12:34:56
[DB2] Current DB time: 2025-05-21 12:35:01
[DB2] Current DB time: 2025-05-21 12:35:01
</source>


* 이 구조는 DB 수가 많아도 확장성이 좋습니다.
* 필요 시 try-except로 개별 DB 실패에 따른 예외 처리를 분리할 수 있습니다.
* pools는 전역 상태로 관리할 수 있으므로 이후에도 재사용이 가능합니다.


 
[[category:python]]
[[category:sql]]
 
[[category:oracle]]
보충 설명
[[category:database]]
• 이 구조는 DB 수가 많아도 확장성이 좋습니다.
• 필요 시 try-except로 개별 DB 실패에 따른 예외 처리를 분리할 수 있습니다.
• pools는 전역 상태로 관리할 수 있으므로 이후에도 재사용이 가능합니다.
 
 
원한다면, 이 구조를 클래스로 리팩토링하거나, Flask 등의 웹 서버 환경에 통합하는 방법도 제공할 수 있어요.

2025년 6월 24일 (화) 08:52 기준 최신판

Oracle 접속 커넥션풀

  1. Oracle DB가 여러 개일 경우, 각 DB에 대해 별도의 Connection Pool을 생성하고 관리할 수 있도록 코드를 수정해야 합니다.
  2. 여러 DB에 대한 접속을 처리 기능.


여러 DB 정보를 dict로 관리

import cx_Oracle

# 접속할 여러 DB 정보 (key는 식별자)
DB_CONFIGS = {
    "DB1": {
        "user": "user1",
        "password": "pass1",
        "dsn": "host1:1521/service1"
    },
    "DB2": {
        "user": "user2",
        "password": "pass2",
        "dsn": "host2:1521/service2"
    },
    # 필요 시 더 추가
}


Connection Pool 생성 함수

def create_connection_pools(db_configs):
    pools = {}
    for name, config in db_configs.items():
        try:
            pool = cx_Oracle.SessionPool(
                user=config["user"],
                password=config["password"],
                dsn=config["dsn"],
                min=2,
                max=5,
                increment=1,
                encoding="UTF-8"
            )
            pools[name] = pool
            print(f"[{name}] Connection pool created.")
        except cx_Oracle.Error as e:
            print(f"[{name}] Failed to create connection pool: {e}")
    return pools

테스트 쿼리 함수


def test_query(pool, db_name):
    try:
        conn = pool.acquire()
        cursor = conn.cursor()
        cursor.execute("SELECT SYSDATE FROM dual")
        result = cursor.fetchone()
        print(f"[{db_name}] Current DB time: {result[0]}")
        cursor.close()
        pool.release(conn)
    except cx_Oracle.Error as e:
        print(f"[{db_name}] Query failed: {e}")


메인 실행부

if __name__ == "__main__":
    pools = create_connection_pools(DB_CONFIGS)

    for db_name, pool in pools.items():
        test_query(pool, db_name)

    # 모든 커넥션 풀 닫기
    for pool in pools.values():
        pool.close()
  • 실행 결과 예시
[DB1] Connection pool created.
[DB2] Connection pool created.
[DB1] Current DB time: 2025-05-21 12:34:56
[DB2] Current DB time: 2025-05-21 12:35:01
  • 이 구조는 DB 수가 많아도 확장성이 좋습니다.
  • 필요 시 try-except로 개별 DB 실패에 따른 예외 처리를 분리할 수 있습니다.
  • pools는 전역 상태로 관리할 수 있으므로 이후에도 재사용이 가능합니다.

Comments