Data Guard와 함께 DRCP 사용

Data Guard 환경에서 DRCP 구성 및 활용

Data Guard 환경에서 DRCP(Database Resident Connection Pooling)를 구성하면 연결 관리를 효율화하고, 특히 읽기 전용 작업에 대한 성능을 향상시킬 수 있습니다. 이 가이드에서는 Data Guard 환경에서 DRCP를 설정하고 활용하는 방법을 단계별로 자세히 설명합니다.

1. DRCP 개요

DRCP는 데이터베이스 서버 내에 연결 풀을 유지하여 클라이언트 애플리케이션이 연결을 재사용할 수 있도록 지원하는 기능입니다. 이를 통해 클라이언트가 데이터베이스에 접속할 때마다 새로운 연결을 생성하는 오버헤드를 줄여줍니다.

2. Data Guard 환경에서의 DRCP 설정 전제 조건

  • Oracle Data Guard 구성 완료
  • 기본(Primary) 데이터베이스 및 대기(Standby) 데이터베이스 준비
  • SYSDBA 권한을 가진 사용자 계정

3. 기본 데이터베이스에서 DRCP 풀 생성

SYSDBA 권한으로 기본 데이터베이스에 접속하여 DRCP 풀을 생성합니다.


   -- DRCP 풀 생성
   EXECUTE DBMS_CONNECTION_POOL.START_POOL ( \
     pool_name          => 'MY_DRCP_POOL', \
     min_size           => 10,  -- 최소 연결 수
     max_size           => 100, -- 최대 연결 수
     incr_size          => 5,   -- 연결 증가량
     session_max_lifetime => 300 -- 세션 최대 생존 시간 (초)
   );
  

실행 결과 예시:

   PL/SQL procedure successfully completed.
  

4. Data Guard 서비스 구성

기본 데이터베이스와 대기 데이터베이스 모두에 동일한 서비스 이름으로 서비스를 구성합니다. 특히 대기 데이터베이스는 읽기 전용으로 설정해야 합니다.

4.1 기본 데이터베이스 서비스 구성


   EXECUTE DBMS_SERVICE.CREATE_SERVICE ( \
    service_name => 'SALES_RW', \
    network_name => 'SALES_RW'
   );
   EXECUTE DBMS_SERVICE.START_SERVICE('SALES_RW');
  

4.2 대기 데이터베이스 서비스 구성


   EXECUTE DBMS_SERVICE.CREATE_SERVICE ( \
    service_name => 'SALES_RO', \
    network_name => 'SALES_RO'
   );
   EXECUTE DBMS_SERVICE.START_SERVICE('SALES_RO');
   ALTER SYSTEM SET SERVICE_NAMES='SALES_RO' SCOPE=MEMORY;
  

5. 클라이언트 연결 문자열 구성

클라이언트 애플리케이션은 연결 문자열을 사용하여 데이터베이스에 접속합니다. Data Guard 환경에서는 연결 장애 시 페일오버를 위해 연결 문자열에 여러 데이터베이스 인스턴스 정보를 포함시키는 것이 좋습니다.

JDBC 연결 문자열 예시:


   jdbc:oracle:thin:@(DESCRIPTION=
    (CONNECT_TIMEOUT=10)(RETRY_COUNT=3)(RETRY_DELAY=3)
    (ADDRESS_LIST=
     (LOAD_BALANCE=on)(FAILOVER=on)
     (ADDRESS = (PROTOCOL=TCP)(HOST=primary_host)(PORT=1521))
     (ADDRESS = (PROTOCOL=TCP)(HOST=standby_host)(PORT=1521))
    )
    (CONNECT_DATA=(SERVICE_NAME=SALES_RW))
   )
  

TNSNames.ora 구성 예시:

SALES_DG = 
  (DESCRIPTION = 
    (CONNECT_TIMEOUT=10)(RETRY_COUNT=3)(RETRY_DELAY=3)
    (ADDRESS_LIST = 
      (LOAD_BALANCE=on)(FAILOVER=on)
      (ADDRESS = (PROTOCOL=TCP)(HOST=primary_host)(PORT=1521))
      (ADDRESS = (PROTOCOL=TCP)(HOST=standby_host)(PORT=1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = SALES_RW)
    )
  )
  

6. JDBC 연결 풀 설정

JDBC 연결 풀을 사용하여 애플리케이션 성능을 향상시킬 수 있습니다. 일반적인 JDBC 연결 풀 라이브러리 (예: Tomcat JDBC Pool, HikariCP)를 사용하여 DRCP를 활용할 수 있습니다. 각 라이브러리 설정 방법에 따라 연결 풀을 설정하고 JDBC 연결 문자열을 구성합니다.

HikariCP 설정 예시:


 HikariConfig config = new HikariConfig();
 config.setJdbcUrl("jdbc:oracle:thin:@SALES_DG"); // 위에서 구성한 TNS 이름 사용
 config.setUsername("user");
 config.setPassword("password");
 config.setDriverClassName("oracle.jdbc.OracleDriver");
 config.setPoolName("drcpPool");
 config.setMaximumPoolSize(100);
 config.setMinimumIdle(10);
 config.setConnectionTimeout(30000);
 config.setIdleTimeout(600000);
 config.setMaxLifetime(1800000);

 HikariDataSource ds = new HikariDataSource(config);

7. 읽기 전용 연결 요청

읽기 전용 작업에 대해서는 클라이언트가 대기 데이터베이스에 접속하도록 읽기 전용 서비스를 사용하도록 구성할 수 있습니다.

JDBC 연결 문자열 예시 (읽기 전용):


 jdbc:oracle:thin:@(DESCRIPTION=
    (CONNECT_TIMEOUT=10)(RETRY_COUNT=3)(RETRY_DELAY=3)
    (ADDRESS_LIST=
     (LOAD_BALANCE=on)(FAILOVER=on)
     (ADDRESS = (PROTOCOL=TCP)(HOST=primary_host)(PORT=1521))
     (ADDRESS = (PROTOCOL=TCP)(HOST=standby_host)(PORT=1521))
    )
    (CONNECT_DATA=(SERVICE_NAME=SALES_RO))
   )
 

8. 모니터링 및 문제 해결

DRCP 연결 및 서비스 상태를 모니터링하여 시스템이 올바르게 작동하는지 확인합니다. 다음 뷰를 사용하여 DRCP 풀의 상태를 모니터링할 수 있습니다.

  • V$CPOOL_STATS: 풀의 통계 정보를 제공합니다.
  • V$CPOOL_CCSTATS: 풀 내 연결 통계 정보를 제공합니다.

예시 쿼리:


  SELECT POOL_NAME, NUM_REQUESTS, NUM_HITS, NUM_MISSES
  FROM V$CPOOL_STATS;
  

9. 장애 조치 테스트

기본 데이터베이스에 장애가 발생했을 때 대기 데이터베이스로의 자동 페일오버가 정상적으로 이루어지는지 확인합니다. 애플리케이션이 대기 데이터베이스에 자동으로 재접속하고 읽기 전용 서비스를 통해 정상적으로 동작하는지 검증합니다.

10. 요약

이 가이드에서는 Data Guard 환경에서 DRCP를 구성하고 활용하는 방법을 살펴보았습니다. DRCP를 통해 데이터베이스 연결 성능을 최적화하고 안정적인 페일오버 환경을 구축할 수 있습니다. Data Guard 서비스 이름 설정을 통해 애플리케이션의 읽기/쓰기 분리도 가능합니다.

위로 스크롤