다른 명령
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 등의 웹 서버 환경에 통합하는 방법도 제공할 수 있어요.