Transparent Application Failover 콜백 사용

Transparent Application Failover (TAF) 콜백이란 무엇인가?

Oracle Real Application Clusters (RAC) 환경에서 TAF는 장애 발생 시 데이터베이스에 대한 클라이언트 연결을 자동으로 다른 노드로 재라우팅하여 애플리케이션의 가용성을 유지하는 기능입니다. TAF 콜백은 이러한 장애 상황 발생 시점에 특정 작업을 수행할 수 있도록 개발자가 정의하는 사용자 정의 PL/SQL 프로시저입니다.

TAF 콜백을 활용하면 장애 발생 전후의 세션 상태를 유지하거나, 사용자에게 알림을 보내는 등의 작업을 자동화할 수 있습니다. 이를 통해 사용자 경험을 개선하고 시스템 운영의 안정성을 높일 수 있습니다.

TAF 콜백 설정 단계

  1. TAF 콜백 프로시저 생성: TAF 이벤트(시작, 장애, 재시작, 연결 종료)에 따라 실행할 PL/SQL 프로시저를 정의합니다.
  2. 프로시저 권한 부여: 애플리케이션 사용자가 해당 프로시저를 실행할 수 있도록 EXECUTE 권한을 부여합니다.
  3. TAF 정책 구성: 데이터베이스 서비스 또는 연결 설명자에 TAF 콜백 프로시저를 연결합니다.

TAF 콜백 프로시저 예시

다음은 장애 발생 시 사용자 세션 정보를 기록하는 TAF 콜백 프로시저의 예시입니다.

   
 CREATE OR REPLACE PROCEDURE taf_failover_log (p_event VARCHAR2, p_service_name VARCHAR2, p_instance_name VARCHAR2)
 AS
 BEGIN
  INSERT INTO taf_log (event_time, event_type, service_name, instance_name, username, sid, serial#)
  VALUES (SYSTIMESTAMP, p_event, p_service_name, p_instance_name, USER, SYS_CONTEXT('USERENV', 'SID'), SYS_CONTEXT('USERENV', 'SERIAL#'));
  COMMIT;
 END;
 /
   
  

프로시저 권한 부여 예시

애플리케이션 사용자인 `appuser`에게 `taf_failover_log` 프로시저에 대한 실행 권한을 부여합니다.

   
 GRANT EXECUTE ON taf_failover_log TO appuser;
   
  

TAF 정책 구성 예시 (CONNECT TIME LOAD BALANCING)

`CONNECT_TIME_LOAD_BALANCE` 유형의 TAF 정책에 콜백을 추가하는 예시입니다.

   
 BEGIN
 DBMS_SERVICE.MODIFY_SERVICE (
  service_name => 'myservice',
  failover_method => 'BASIC',
  failover_type => 'SELECT',
  failover_retries => 180,
  failover_delay => 1,
  commit_outcome => TRUE,
  aq_ha_notification => TRUE,
  network_name => myservice,
  global_name => myservice.example.com,
  clb_goal => 'SHORT',
  dtp => TRUE,
  failover_restore => 'AUTO',
  session_state => 'DYNAMIC',
  failover_callback => 'taf_failover_log'
 );
END;
/
   
  

TAF 정책 구성 예시 (PRECONNECT)

`PRECONNECT` 유형의 TAF 정책에 콜백을 추가하는 예시입니다.

   
   -- Service creation with preconnect failover
   BEGIN
    DBMS_SERVICE.CREATE_SERVICE(
        service_name          => 'taf_service',
        network_name          => 'taf_service',
        aq_ha_notification    => TRUE,
        global_name           => 'taf_service.example.com',
        failover_method       => 'preconnect',
        failover_type         => 'select',
        failover_retries      => 30,
        failover_delay        => 1,
        session_state         => 'DYNAMIC',
        dtp                   => TRUE,
        clb_goal              => 'THROUGHPUT',
        failover_callback     => 'taf_failover_log');
  END;
  /

  -- add two instances to service
  BEGIN
   DBMS_SERVICE.ADD_INSTANCE('taf_service', 'racnode1');
   DBMS_SERVICE.ADD_INSTANCE('taf_service', 'racnode2');
  END;
  /
   
  

TAF 콜백 관련 문제 해결

  • 콜백 프로시저 실행 권한: 애플리케이션 사용자에게 콜백 프로시저에 대한 EXECUTE 권한이 있는지 확인합니다.
  • TAF 정책 설정 확인: 콜백 프로시저 이름이 TAF 정책에 올바르게 지정되었는지 확인합니다.
  • 프로시저 오류 확인: 콜백 프로시저 내에서 발생하는 예외를 처리하여 오류로 인해 TAF가 실패하지 않도록 합니다.
  • 추적 및 로깅: 콜백 프로시저 내부에 로깅 메커니즘을 구현하여 문제 발생 시 디버깅을 용이하게 합니다.

실무 팁

  • 콜백 로직 최소화: TAF 콜백은 장애 복구 경로에 포함되므로 실행 시간을 최소화하여 복구 시간을 단축해야 합니다.
  • 멱등성 보장: 콜백 프로시저가 여러 번 실행되어도 동일한 결과를 보장하도록 구현합니다.
  • 컨텍스트 정보 활용: `SYS_CONTEXT` 함수를 사용하여 현재 사용자, 세션 등의 정보를 얻어 콜백 로직에 활용할 수 있습니다.

결론

TAF 콜백은 Oracle RAC 환경에서 애플리케이션의 가용성을 극대화하는 강력한 도구입니다. 올바른 설정과 구현을 통해 장애 발생 시 사용자 경험을 개선하고 시스템 운영의 안정성을 높일 수 있습니다. 위에 제시된 예시와 팁을 활용하여 실제 환경에 TAF 콜백을 적용해 보시기 바랍니다.

위로 스크롤