다른 명령
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" }, "DB2": { "user": "user2", "password": "pass2", "dsn": "host2:1521/service2" }, # 필요 시 더 추가
}
⸻
2. 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
⸻
3. 테스트 쿼리 함수
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}")
⸻
4. 메인 실행부
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는 전역 상태로 관리할 수 있으므로 이후에도 재사용이 가능합니다.
⸻
원한다면, 이 구조를 클래스로 리팩토링하거나, Flask 등의 웹 서버 환경에 통합하는 방법도 제공할 수 있어요.