JDBC를 이용하여 오라클 데이터베이스 이중화 설정

2025. 6. 21. 10:31IT/Oracle

반응형

JDBC를 이용하여 오라클 데이터베이스 이중화를 설정하려면 여러 가지 방법이 있습니다. 그 중에서 가장 흔히 사용되는 방법은 JDBC URL에 이중화 설정을 포함하는 것입니다. 오라클에서는 이러한 설정을 위해 "JDBC Thin Driver"를 사용하며, 이중화를 위해 두 가지 주요 방법을 제공합니다:

  1. Oracle RAC(Real Application Clusters): 여러 개의 오라클 인스턴스를 하나의 논리적 데이터베이스로 구성하는 클러스터 환경입니다. 이 환경에서는 자동으로 인스턴스 간 연결을 관리할 수 있습니다.
  2. 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 인스턴스가 중단되었을 때, 다른 인스턴스로 자동으로 전환할 수 있습니다. 다만, 이중화 환경에서 정확한 동작을 보장하기 위해서는 데이터베이스와 네트워크 설정이 올바르게 되어 있는지 확인해야 합니다.

반응형