2025. 6. 21. 10:31ㆍIT/Oracle
JDBC를 이용하여 오라클 데이터베이스 이중화를 설정하려면 여러 가지 방법이 있습니다. 그 중에서 가장 흔히 사용되는 방법은 JDBC URL에 이중화 설정을 포함하는 것입니다. 오라클에서는 이러한 설정을 위해 "JDBC Thin Driver"를 사용하며, 이중화를 위해 두 가지 주요 방법을 제공합니다:
- Oracle RAC(Real Application Clusters): 여러 개의 오라클 인스턴스를 하나의 논리적 데이터베이스로 구성하는 클러스터 환경입니다. 이 환경에서는 자동으로 인스턴스 간 연결을 관리할 수 있습니다.
- Oracle Data Guard: 주 데이터베이스와 하나 이상의 대기 데이터베이스로 구성된 물리적 또는 논리적 복제 환경입니다.
여기서는 각 오라클 인스턴스에 대해 자동으로 페일오버(failover)를 설정하는 방법을 설명하겠습니다.
JDBC URL을 이용한 이중화 설정
1. TNS 설정을 이용한 이중화 설정
String url = "jdbc:oracle:thin:@(DESCRIPTION="
+ "(ADDRESS_LIST="
+ "(ADDRESS=(PROTOCOL=TCP)(HOST=primary-db-host)(PORT=1521))"
+ "(ADDRESS=(PROTOCOL=TCP)(HOST=secondary-db-host)(PORT=1521))"
+ ")"
+ "(CONNECT_DATA=(SERVICE_NAME=your_service_name)))";
이 설정에서는 ADDRESS_LIST에 기본(primary) DB와 대기(standby) DB의 호스트 및 포트를 명시하고 있습니다. 첫 번째 호스트(주소)로 연결할 수 없으면 자동으로 두 번째 호스트로 연결을 시도합니다.
2. 연결 속성 사용
다음은 기본 데이터베이스가 응답하지 않을 때 자동으로 대기 데이터베이스로 연결을 시도하는 URL입니다.
String url = "jdbc:oracle:thin:@(DESCRIPTION="
+ "(LOAD_BALANCE=OFF)"
+ "(FAILOVER=ON)"
+ "(ADDRESS_LIST="
+ "(ADDRESS=(PROTOCOL=TCP)(HOST=primary-db-host)(PORT=1521))"
+ "(ADDRESS=(PROTOCOL=TCP)(HOST=secondary-db-host)(PORT=1521))"
+ ")"
+ "(CONNECT_DATA=(SERVICE_NAME=your_service_name)))";
- LOAD_BALANCE=OFF: 로드 밸런싱을 비활성화합니다. 이중화 환경에서는 주로 failover만을 사용하므로 비활성화하는 것이 좋습니다.
- FAILOVER=ON: 실패 시 자동으로 다른 호스트로 연결을 시도합니다.
3. 서비스 이름을 이용한 RAC 환경 설정
만약 오라클 RAC 환경에서 클러스터된 서비스 이름을 사용하고 있다면 다음과 같이 설정할 수 있습니다.
String url = "jdbc:oracle:thin:@(DESCRIPTION="
+ "(LOAD_BALANCE=ON)"
+ "(FAILOVER=ON)"
+ "(ADDRESS_LIST="
+ "(ADDRESS=(PROTOCOL=TCP)(HOST=node1-host)(PORT=1521))"
+ "(ADDRESS=(PROTOCOL=TCP)(HOST=node2-host)(PORT=1521))"
+ ")"
+ "(CONNECT_DATA=(SERVICE_NAME=your_cluster_service_name)))";
이렇게 설정하면, 두 노드 간에 로드 밸런싱과 페일오버가 자동으로 관리됩니다.
추가 설정
- Timeout 설정 : 연결 타임아웃이나 읽기 타임아웃을 설정하여, 주 데이터베이스가 응답하지 않을 때 대기 데이터베이스로 빠르게 전환되도록 할 수 있습니다.
Properties props = new Properties();
props.setProperty("oracle.net.CONNECT_TIMEOUT", "5000"); // 연결 타임아웃 (밀리초)
props.setProperty("oracle.net.READ_TIMEOUT", "10000"); // 읽기 타임아웃 (밀리초)
props.setProperty("user", "your_username");
props.setProperty("password", "your_password");
Connection conn = DriverManager.getConnection(url, props);
이 설정은 연결과 읽기 작업이 일정 시간 내에 완료되지 않으면 예외를 발생시키고, 다음 연결 시도를 진행하게 합니다.
이러한 이중화 설정을 통해 특정 오라클 DB 인스턴스가 중단되었을 때, 다른 인스턴스로 자동으로 전환할 수 있습니다. 다만, 이중화 환경에서 정확한 동작을 보장하기 위해서는 데이터베이스와 네트워크 설정이 올바르게 되어 있는지 확인해야 합니다.
'IT > Oracle' 카테고리의 다른 글
Undo tablespace 용량 확인 방법 및 조치 (0) | 2025.05.02 |
---|---|
오라클 인덱스 상태 점검 쿼리 (0) | 2025.05.02 |
오라클 파티션 테이블 삭제 및 정리 (0) | 2025.05.02 |
오라클 리사이클빈 (Recycle Bin) 개념과 활용 (3) | 2025.04.12 |
오라클 - 소수점을 저장하는 데이터 타입 (3) | 2025.03.30 |