가장 좋은 장애는 어느 누구도 알아차리지 못한 장애입니다. 불행하게도, Oracle은 매우 신속하게 복구할 수 있는 구조를 갖추고는 있지만, 장애는 데이타베이스에 대한 접속을 해제시킴으로써 사용자들에게 매우 심한 혼란을 줄 수도 있습니다. 사용자들은 가끔 그들의 애플리케이션을 재시작하여, 데이타베이스에 재접속해야만 합니다. 그리고, 장애가 발생했을 때 진행 중인 작업들은 잃어버리기가 가장 쉽습니다. Oracle8 은 명백한 애플리케이션 페일오버를 통해 장애를 차단(mask) 하여 대부분의 사용자들을 위해 이러한 혼란을 제거할 수가 있습니다.
데이타베이스 접속들은 stateless이기 때문에 Transparent Application Failover의 구현은 매우 복잡합니다. 데이타베이스 접속은 다음과 같이 다양한 변수들을 포함하고 있습니다:
패스워드와 다른 사용자-인증 정보
접속이 사용하는 언어와 문자 집합 등과 같이 환경적 상태의 암시적 또는 명시적 집합
오픈되었거나 현재 실행 중인 커서들의 집합
오픈되었거나 부분적으로 스크롤되는 “SELECT” 커서들의 집합
사용자가 현재 실행 중인 트랜잭션에 의해 만들어진 수정
Oracle8의 애플리케이션 페일오버-기능은 다양한 작업들을 명확하게 자동 수행하고 있습니다. Oracle8은 사용자-당 기준으로 지정될 수 있는 잔존 노드의 사용자들을 재접속한 다음 재인증을 하는데, 모든 암시적 그리고 명시적 환경 상태를 재전송할 수가 있습니다. 또한 장애 시 운영되는 모든 커서들을 오픈하여 실행하는 것도 가능합니다. 이 기능은 Oracle Fail Safe, Oracle Parallel Server, 또는 협력 업체 클러스터 제품 등과 같이 페일오버를 실행하는 클러스터 환경에서 가장 잘 동작하지만, 단일-노드 (이 경우에는 복구 동안 사용자 지연이 매우 길 수 있습니다) 또는 복제된 대기 데이타베이스와 함께 동작하도록 구성될 수도 있습니다. 아래 그림은 Oracle Parallel Server 와 TAF 의 일반적인 구성을 보여주고 있습니다.
만약 사용자 또는 애플리케이션이 SELECT 문의 중간에 위치하고 있었다면, 결과 집합의 일부는 장애 전에 반환되었을 것입니다. Oracle은 자동적으로 SELECT 문을 재실행하여 이전에 반환되었던 행들은 모두 폐기한 다음, 그것이 중단되었던 순간 부터 계속적으로 결과 집합을 반환할 것입니다. 선택된 데이타는 고장 시간과 재접속 시간 사이에 변경될 수도 있기 때문에, 사용자가 이미 확인한 데이타는 변경되지 않도록 검증되어야만 합니다. Oracle8은 이 작업을 자동적으로 수행하고 있습니다. 또한, Oracle8의 다중-버전, 읽기-지속성 (read-consistency) 기능, 그리고 원본 시간 기록 (original time stamp) 을 사용하는 데이타 읽기 등을 사용하여, 이 검증은 거의 항상 성공적으로 수행되고 있습니다..
TAF 가 보호하거나 또는 페일-오버합니다:
- 클라이언트/서버 접속
- 사용자 세션 상태
- 준비된 명령문
- 결과들의 반환을 시작하는 활성화된 커서들 (SELECT 문)
- 활성화된 업데이트 트랜잭션들
- PL/SQL 서버-사이드 패키지 변수들
- OCI8 를 사용하지 않는 애플리케이션들 (테이블 참조)
또한 Oracle8 애플리케이션-페일오버 기능은 사용자들을 두 번째 노드로 사전-접속시킬 수가 있습니다. 만약 기본 노드가 죽는다면, 두 번째 접속은 재접속 기간에 네트워크 보틀넥을 통과하여 이미 그 역할을 담당하고 있을 것입니다.
이 작업들이 완료된 후에, 데이타베이스 사용자들은 데이타베이스에 무슨 일이 발생하는지 상관하지 않고, 계속적으로 그들의 현재 애플리케이션을 실행할 것입니다. 이 자동 페일오버 기능은 Oracle8 Program Interfaces(OCI8) 내부에 구축되어 있어서, 그것으로부터 이점을 얻기 위해 애플리케이션들을 변경할 필요는 거의 없습니다. 그러나, 기존의 애플리케이션들은 업데이트가 되어야만 TAF를 지원하는 OCI8을 활용할 수가 있습니다. 다음 테이블은 TAF의 지원 상태을 보여주고 있습니다.
애플리케이션 또는 툴 | TAF를 지원하는 최초 릴리스 |
Oracle Call Interface (Oracle Call Interface) Release 8 | Release 8 |
ODBC 드라이버 | Release 8.0.5 |
JDBC 드라이버 | Release 8.1.5 (Thick 드라이버만) |
Pro* Pre-compilers | 명백한 재접속을 위한 Release 8.0.6완전히 명백한 기능을 위한Release 8.1.5 |
SQL*Plus | Release 8.0.4 |
Oracle Objects?for OLE | Release 8i |
TAF의 사용자 정의
클라이언트 애플리케이션은 OCI 라이브러리가 페일오버 과정 동안 자동적으로 호출할 수 있는 함수를 제공하여, TAF 를 사용자 정의할 수 있는데, 이것은 페일오버가 현재 진행 중이고 지연이 있을 수 있다는 것을 사용자에게 통보하기 위해서 사용되고 있습니다. 또한 NLS 지원과 같은 사용자 세션 환경 정보의 복원을 위해서도 사용될 수가 있습니다.TAF의 다른 사용
Transparent Application Failover는 다른 사용 방법도 갖고 있습니다. 관리자는 계획된 다운타임 시 시스템을 유연하게 종료하기 위해 TAF를 사용할 수 있고, 트랜잭션이 완료되자마자 사용자들을 백업 시스템으로 페일오버할 수 있도록 시스템을 구성할 수도 있는데, 이것은 데이타의 손실이 없다는 것을 확실히 하면서, 백업 시스템으로의 이전(migration)을 최종 사용자에게 투명하게 할 수도 있습니다.또한 TAF는 수동적으로 시스템을 로드 밸런싱하기 위해서도 사용될 수 있는데, 관리자는 현재 트랜잭션이 종료되자마자 사용자들이 다량으로 로드되는 시스템에서 다른 시스템으로 투명하게 자동 이전할 수 있도록 사용자들의 일정을 잡을 수가 있습니다.
TAF 구성
TAF 는 tnsnames.ora 파일의 Net8 매개변수를 사용하여 구성이 됩니다.TAF 는 커넥트 디스크립터의 CONNECT_DATA 섹션에 FAILOVER_MODE 매개변수를 포함하여 구성할 수 있습니다. 다음은 TAF 가 지원하는 하위-매개변수들입니다:
TYPE: 이것은 NONE, SESSION, 또는 SELECT 중 하나가 사용됩니다. 사용 해제을 위해서는 TYPE=SESSION 로 설정하고, 세션과 오픈 커서의 페일오버를 위해서는 TYPE=SELECT 로 설정하십시오. 그리고 TAF 를 해제하기 위해서는 TYPE=NONE 으로 설정하시면 됩니다.
METHOD: 이것은 BASIC 또는 PRECONNECT 중 하나가 사용됩니다. BASIC 방식을 사용하면, 기존 접속이 실패할 때까지, TAF 는 접속의 재설정을 시도하지 않을 것입니다. PRECONNECT 방식을 사용하면, TAF 는 백업 접속을 위해 필요한 메모리 구조를 사전-설정하지만, 기존 접속이 실패할 때까지 백업 접속은 활성화되지 않을 것입니다.
BACKUP: 이 하위-매개변수는 백업 접속의 설정을 위해 사용되는 네트 서비스 이름을 지정합니다. BACKUP 지정은 PRECONNECT 방식을 사용할 때 필요한데, BASIC 방식에서 강력하게 추천되고 있습니다; 그렇지 않다면, 클라이언트가 재접속을 할 때까지 추가적으로 지연을 시키면서 방금 실패한 인스턴스에 최초로 재접속을 시도할 것입니다. 그러나, 사용자는 LOAD_BALANCING=ON 인 상태에서는 BACKUP 을 지정할 수가 없습니다.
DELAY: TAF 가 장애 후에 BACKUP 에 연결하려는 시도 사이에서 기다리는 몇 초간의 지연 시간입니다.
RETRIES: 포기하기 전, TAF 가 장애 후에 BACKUP 에 연결하기 위해 시도하는 횟수입니다. RETRIES 와 DELAY 는 TAF 가 백업 접속을 포기하기 전에 콜드 페일오버가 완료될 수 있는 시간을 갖게 해줍니다.
댓글 없음:
댓글 쓰기