다른 명령
새 문서: 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 접속 커넥션풀 == | |||
# Oracle DB가 여러 개일 경우, 각 DB에 대해 별도의 Connection Pool을 생성하고 관리할 수 있도록 코드를 수정해야 합니다. | |||
# 여러 DB에 대한 접속을 처리 기능. | |||
=== 여러 DB 정보를 dict로 관리 === | |||
<source lang=python> | |||
import cx_Oracle | import cx_Oracle | ||
21번째 줄: | 23번째 줄: | ||
# 필요 시 더 추가 | # 필요 시 더 추가 | ||
} | } | ||
</source> | |||
=== Connection Pool 생성 함수=== | |||
<source lang=python> | |||
def create_connection_pools(db_configs): | def create_connection_pools(db_configs): | ||
pools = {} | pools = {} | ||
47번째 줄: | 47번째 줄: | ||
return pools | return pools | ||
</source> | |||
=== 테스트 쿼리 함수 === | |||
<source lang=python> | |||
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> | |||
⸻ | ⸻ | ||
=== 메인 실행부 === | |||
<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]] | |||
2025년 6월 24일 (화) 08:52 기준 최신판
Oracle 접속 커넥션풀
- Oracle DB가 여러 개일 경우, 각 DB에 대해 별도의 Connection Pool을 생성하고 관리할 수 있도록 코드를 수정해야 합니다.
- 여러 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는 전역 상태로 관리할 수 있으므로 이후에도 재사용이 가능합니다.