본문 바로가기

IT관련

오라클 2가지 TAF 방식 (Client Side TAF, Server Side TAF)

Oracle DBMS 를 RAC로 이중화 구성할 때 TAF 라는 세팅을 합니다.

TAF 는 Transparent Application Failover 의 약자로, DB장애시에도 어플리케이션은 모르게(Transparent 하게) Failover 를 해주겠다는 의미입니다.

이중화 또는 삼중화된 Oracle DB 시스템에서 한개의 DB서버가 죽어도 다른 살아있는 DB서버로 어플리케이션이 자동 접속하여 사용자는 장애상황을 못느끼도록 해주는 아주 쌈빡한 기능이죠~~

 

이 TAF 를 세팅하는 방법은 2가지가 있습니다.

SQL*Net Client 상에서 세팅해주는 Client Side TAF 가 있고,

DB 서버쪽에 세팅해주는 Server Side TAF 가 있습니다.

보통 Client 상에서 세팅하는 방식이 아주 심플하기 때문에 이 방식으로 많이들 합니다.

 

이 두가지 세팅 방법을 정리해보겠습니다.

 

1) Client Side TAF 세팅방법

SQL*Net Client 라는 것은 tnsnames.ora 파일을 말합니다.

Client 환경(PC 또는 WAS서버)에 Oracle Client 모듈을 설치한 경우 SQL*Net 통신을 위해 tnsnames.ora 를 설정합니다.

여기에서 TAF 관련된 설정을 해주는 것입니다.

 

tnsnames.ora 파일에 아래와 같이 세팅하면 끝입니다. ㅎㅎ  좀 너무 쉽죠~

 

위에 보면 IP가 2개 들어가 있는데, 3개 노드로 RAC 구성이 된경우에는 여기에 IP가 3개를 기술해주면 됩니다.

그 위쪽에 LOAD_BALANCE 를 해줄지 말지도 세팅해줄 수 있고,

FAILOVER = ON 은 반드시 기술해줘야 합니다.

 

아래쪽에 FAILOVER_MODE 도 반드시 세팅해줘야 합니다. TYPE과 METHOD 를 기술해줍니다.

 

TYPE 은 SESSION/SELECT 중 하나를 기술해주면 됩니다.

SESSION 은 Fetch 도중에 장애를 만나면 Fetch 는 실패하는 방식.

SELECT 는 Fetch 까지 복구해주는 방식입니다.

 

MODE 는 BASIC/PRECONNECT 중 하나를 기술해주면 됩니다.

PRECONNECT는 장애시 빠른 Failover를 위해 접속을 모든 노드에 미리 해놓는 방식입니다.

 

 

2) Server Side TAF 세팅방법

Server Side TAF는 srvctl 커맨드를 이용해서 service 를 추가하는 방식으로 세팅합니다.

 


$ srvctl add service -d rac -s server_taf -r "RAC1,RAC2"
  --> -d : DB명
  --> -s : Server Side TAF 이름
  --> -r : DB Instance명

$ srvctl start service -d rac -s server_taf
  --> 서비스를 Start

$ srvctl modify service -d rac -s server_taf -m BASIC -e SELECT -q TRUE -j LONG
  --> TAF관련 옵션을 설정 (Failover 방식(BASIC), Failover Type(SELECT), ...

 

위와 같은 커맨드로 서비스를 만들어준 후,

lsnrctl status 커맨드로 등록된 서비스를 확인할 수 있습니다.

 

 

앞에서 만든 server_taf 라는 서비스명을 확인할 수 있습니다.

이거 다른 이름으로 여러개 만드는 것도 가능합니다. ^^

 

srvctl config service 커맨드로 서비스정보를 확인할 수도 있습니다.

 

 

위와 같이 Server Side TAF 가 구성되어 있기 때문에,

클라이언트에서는 tnsnames.ora 에 기존 TNS 세팅하듯이 하면 알아서 TAF 로 돌아갑니다.

 

Client Side TAF 와 달리 FAILOVER_MODE 등을 적어주지 않는 것을 확인할 수 있습니다.

 

 

테스트는 아래와 같이 해봤습니다.

 

RAC1 인스턴스로 붙어있던 것을 다른 세션에서 RAC1 DB를 강제로 Shutdown 했습니다.

그리고 다시 세션정보를 조회해보면 자동으로 RAC2 DB 로 Connect 되어 있는 것을 확인할 수 있습니다.

 

Long Query 도 실행해서 중간에 에러없이 실행되는지도 테스트해야 겠지만... 되겄죠~뭐~~ 구챠녀서 여기까지 ㅋㅋ

 

 

참고 => Oracle CTF, TAF, SCAN 에 대한 간략한 설명, 이해