상세 컨텐츠

본문 제목

2024년 3월 6일 6교시

카테고리 없음

by 병아리 엔지니어 2024. 3. 6. 17:01

본문

 

 

※ TAF (Transparent Application Failover)

(FAILOVER=YES)

(FAILOVER_MODE=(TYPE=SESSION)(METHOD=BASIC))

 

# FAILOVER_MODE TYPE

- NONE : 그냥 실패된다. 세션이 끊어지기 때문에 새롭게 다시 접속해야 한다. CTF 와 비슷하다.

- SESSION : 접속한 노드의 인스턴스가 내려가면서 수행하고 있는 SQL (select) 문장은 취소되고

                     살아있는 쪽의 인스턴스로 자동 접속된다.

- SELECT : 접속한 노드의 인스턴스가 내려가면서

                   살아있는 쪽의 인스턴스로 자동 접속되고 + 새로 접속한 인스턴스에서 SQL 문이 수행된다.

 

# METHOD=BASIC: 장애가 발생할 경우 다른 서버를 찾아서 접속을 시도하는 방식

 

# (FAILOVER_MODE=(TYPE=SESSION)(METHOD=BASIC)) 방식

 

tnsnames.ora 파일 racdb_taf 부분 다시 수정하기 (파란색으로 표시해놓은 부분만 고치면 된다) > 저장

 

racdb_taf =
    (DESCRIPTION =
         (LOAD_BALANCE = YES)(FAILOVER=YES)
         (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.111)(PORT =1521))
         (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.112)(PORT =1521))
         (CONNECT_DATA =
            (SERVER = DEDICATED)
            (SERVICE_NAME = racdb)
            (FAILOVER_MODE = (TYPE = SELECT)(METHOD = BASIC))
          )
    )


<<client session>> 명령 프롬프트 창으로 새롭게 접속하기

 

C:\Users\itwill>sqlplus sys/oracle@racdb_taf as sysdba

 

SQL> select instance_name from v$instance;

rac1 노드로 접속해 있다.

 


준비 작업하기: 수행하지 말고 준비만 해놓기

 

<<client session>>

SQL> select * from dba_objects;

 

<< server session >>

[oracle@rac2 ~]$ srvctl stop instance -d racdb -i racdb1

클라이언트가 접속해 있는 racdb1 내리기

 


수행하기

 

<<client session>>

SQL> select * from dba_objects;

(중간에 잠깐 멈추는 건 이미 접속해 있던 노드가 내려간 것을 감지하고

다른 쪽 노드로 가서 붙느라 그런 것)

롱 쿼리 문장이라서 그런지 어마어마하게 오래 걸린다... 안끝나...

 

<< server session >>

[oracle@rac2 ~]$ srvctl stop instance -d racdb -i racdb1

 

길고 긴 시간이 흐른 후...


# 드디어 수행 끝

와... 험난했다...

근데 수행시간에 비해서 데이터 건수가...

꼴랑 72171 건 수행하는데 시간을 그렇게 많이 잡아먹었던거야?...

 

<< server session >> 퍼티 rac2 창에서

노드 상태 확인하기

[oracle@rac2 ~]$ srvctl status instance -d racdb -i racdb1,racdb2
Instance racdb1 is not running on node rac1
Instance racdb2 is running on node rac2

 

<< client session >> cmd 창에서

 

다시 어떤 쪽 노드에 접속했는지 확인해보기: rac2로 알아서 접속해 있다.

SQL> select instance_name from v$instance;

 

INSTANCE_NAME
--------------------------------
racdb2

 

<< server session >> 퍼티에서

다시 모든 노드 올려놓기

[oracle@rac2 ~]$ crs_start -all

 

노드 상태 확인하기
[oracle@rac2 ~]$ srvctl status instance -d racdb -i racdb1,racdb2

Instance racdb1 is running on node rac1
Instance racdb2 is running on node rac2