Oracle 설치/Oracle 10g RAC 구축

[Oracle 10g RAC 구축] 8. Transparent Application Failover(TAF) 테스트

빵순이^^ 2010. 7. 2. 23:13

Oracle TAF는 데이터베이스 연결에 장애가 발생한 경우 클러스터의 다른 노드로 재연결하기 위한 페일오버 메커니즘을 제공한다. 페일오버 과정은 사용자 관점에서 투명하게 수행된다. 오라클은 페일오버된 인스턴스에서 쿼리를 재실행하고 결과를 사용자에게 반환한다.


1. 새로운 데이터베이스 서비스의 생성


먼저 CRM이라는 이름의 새로운 서비스를 생성한다. 데이터베이스 서비스는 DBCA 또는 srvctl 유틸리티를 이용하여 생성할 수 있다. DBCA를 사용해서 devdb1에 CRM 서비스를 생성해 보겠다.

DBCA를 실행 전 oracle 유저가 GUI 프로그램 디스플레이 권한을 가지도록 새로운 터미널을 띄워 root 유저로 아래의 명령어를 입력해 준다.

[root@rac1 ~]# xhost +
access control disabled, clients can connect from any host


rac1 노드에서 oracle 유저로 dbca를 실행한다.

rac1-> dbca

 


- Oracle Real Application Clusters database를 선택하고 Next를 클릭한다.


- Services Management 를 선택하고 Next를 클릭한다.


- Next를 클릭한다.


- Add를 클릭한 후 Service Name에 CRM을 입력한 후 OK를 클릭한다.


- devdb1은 Preferred, devdb2는 Available을 선택하고 TAF Policy는 Basic을 선택한 후 Finish를 클릭한다.


- OK를 클릭한다.


- 설치가 완료 되었다. 더이상 설치할 것이 없으므로 No를 클릭하여 종료한다.


tnsnames.ora 파일을 열어 아래 CRM 서비스 네임 엔트리를 넣어준다.

rac1-> $ORACLE_HOME/network/admin/tnsnames.ora

------------------------------------------------------------------------------------------------
CRM =
     (DESCRIPTION =
         (ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521))
         (ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip)(PORT = 1521))
         (LOAD_BALANCE = yes)
         (CONNECT_DATA =
       (SERVER = DEDICATED)
       (SERVICE_NAME = CRM)
       (FAILOVER_MODE =
           (TYPE = SELECT)
           (METHOD = BASIC)
           (RETRIES = 180)
           (DELAY = 5)
       )
         )
     )
------------------------------------------------------------------------------------------------

 



SQL> connect system/oracle@devdb1
SQL> show parameter service
SQL> connect system/oracle@devdb2
SQL> show parameter service

 




2. CRM 서비스를 이용하여 첫 번째 세션에 연결


 failover_type과 failover_mode의 반환 결과가 'NONE'인 경우, CRM 서비스가 tnsnames.ora에 올바르게 설정되었는지 확인한다.

SQL> connect system/oracle@crm
SQL> select instance_number instance#, instance_name, host_name, status
    2    from v$instance;

 



SQL> select failover_type, failover_method, failed_over
    2    from v$session
    3    where username='SYSTEM';

 




3. 두 번째 세션에서 인스턴스 셧다운


rac1-> export ORACLE_SID=devdb1
rac1-> sqlplus / as sysdba

SQL> select instance_number instance#, instance_name, host_name, status
    2    from v$instance;

SQL> shutdown abort;

 




4. 세션이 페일오버 되었는지 확인


첫 번째 CRM 세션에서 아래 쿼리를 실행하여 세션이 다른 인스턴스로 페일오버 되었는지 확인한다.

SQL> select instance_number instance#, instance_name, host_name, status
    2    from v$instance;

SQL> select failover_type, failover_method, failed_over
    2    from v$session
    3    where username='SYSTEM';

 




5. CRM 서비스를 Preferred Instance로 페일백


devdb1이 다시 시작된 이후에도 CRM 서비스는 preferred instance로 페일백 처리되지 않는다. 따라서 수동으로 서비스를 devdb1으로 이전해 주어야 한다.

rac1-> export ORACLE_SID=devdb1
rac1-> sqlplus / as sysdba

SQL> startup

SQL> show parameter service

 


rac2에서 아래의 명령을 실행한다.

rac2-> export ORACLE_SID=devdb2
rac2-> sqlplus / as sysdba

SQL> show parameter service

 


devdb1의 인스턴스가 구동 되었음에도 불구하고 CRM 서비스가 여전히 devdb2로 연결되어 있는것이 확인된다.

다음의 명령으로 CRM을 다시 devdb1으로 이전한다.

rac1-> srvctl relocate service -d devdb -s crm -i devdb2 -t devdb1


그리고 다시 확인해 본다.

SQL> connect system/oracle@devdb1
SQL> show parameter service

SQL> connect system/oracle@devdb2
SQL> show parameter service

 

이제 다시 CRM 서비스가 devdb1 으로 이전된 것을 확인 할 수 있다.