Transparent Application Failover (TAF) 콜백이란 무엇인가?
Oracle Real Application Clusters (RAC) 환경에서 TAF는 장애 발생 시 데이터베이스에 대한 클라이언트 연결을 자동으로 다른 노드로 재라우팅하여 애플리케이션의 가용성을 유지하는 기능입니다. TAF 콜백은 이러한 장애 상황 발생 시점에 특정 작업을 수행할 수 있도록 개발자가 정의하는 사용자 정의 PL/SQL 프로시저입니다.
TAF 콜백을 활용하면 장애 발생 전후의 세션 상태를 유지하거나, 사용자에게 알림을 보내는 등의 작업을 자동화할 수 있습니다. 이를 통해 사용자 경험을 개선하고 시스템 운영의 안정성을 높일 수 있습니다.
TAF 콜백 설정 단계
- TAF 콜백 프로시저 생성: TAF 이벤트(시작, 장애, 재시작, 연결 종료)에 따라 실행할 PL/SQL 프로시저를 정의합니다.
- 프로시저 권한 부여: 애플리케이션 사용자가 해당 프로시저를 실행할 수 있도록 EXECUTE 권한을 부여합니다.
- 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 콜백을 적용해 보시기 바랍니다.