연속 가용성에 대한 코드
계획된 유지보수, 계획되지 않은 운용중단 및 데이터베이스의 로드 불균형이 애플리케이션에서 숨겨지면 애플리케이션이 지속적인 가용성을 달성합니다. 애플리케이션 모범 사례, 간단한 구성, Oracle Autonomous AI Database가 결합되어 애플리케이션을 지속적으로 사용할 수 있습니다.
계획된 유지 관리 작업을 응용 프로그램에서 숨기는 가장 좋은 방법은 작업 로드 위치에 대한 유지 관리 윈도우(Maintenance windows) 이전에 각 데이터베이스 작업 로드 위치에서 작업을 투명하게 비우는 것입니다. WebLogic Server, UCP(Oracle Universal Connection Pool), OCI Session pool 및 ODP.NET Unmanaged Provider를 포함한 Oracle의 연결 풀 및 중간 계층은 FAN(Fast Application Notification)을 인식하므로, 유지보수 전에 정상적으로 작업을 드레이닝할 수 있도록 데이터베이스 서비스가 이동되기 전에 알림을 받습니다. FAN 알림은 자동으로 유휴 연결을 종료하고 새 서비스 위치에서 새 연결을 열며, 곧 종료될 서비스 위치에서 활성 작업이 완료될 때까지 구성 가능한 시간을 허용합니다. IBM WebSphere와 같은 주요 타사 JDBC 중간 계층은 UCP로 구성된 경우 동일한 동작을 허용합니다. UCP를 사용할 수 없는 JDBC 기반 응용 프로그램의 경우 Oracle은 Oracle 드라이버 및 연결 테스트를 사용하는 솔루션을 제공합니다.
구성 요소 또는 통신 장애로 인한 계획되지 않은 운용중단을 숨기기 위해 Oracle은 다음을 제공합니다.
-
통지. FAN은 중단을 숨기는 첫 번째 단계입니다. FAN은 클라이언트에 알리고 정전이 발생할 때 현재 네트워크 대기에서 벗어납니다. 이렇게 하면 긴 네트워크 대기에 대한 응용 프로그램이 지연되지 않습니다. 중요한 것은 서비스를 다시 사용할 수 있을 때도 FAN이 세션 리밸런싱을 호출한다는 점입니다.
-
복구. 클라이언트에 통지된 후 TAC(Transparent Application Continuity) 또는 AC(Application Continuity)는 새 작업 로드 위치(데이터베이스를 실행하는 RAC(Real Application Clusters) 구성의 다른 데이터베이스 Instance)에 대한 연결을 재설정하고 가능한 경우 진행 중인(커밋되지 않은) 작업을 재생합니다. 새 위치에서 진행 중인 작업을 리플레이하면 일반적으로 Failure가 발생한 것을 알지 못하고 응용 프로그램을 계속 실행할 수 있습니다.
또한 TAC 또는 AC는 할당된 드레인 간격 동안 드레인되지 않는(현재 데이터베이스 작업 완료) 세션에 대해 계획된 유지 관리 중에 실행됩니다.
애플리케이션 구성 체크리스트
다음 지침에 따라 응용 프로그램을 지속적으로 사용할 수 있도록 설정합니다.
참고: 자율운영 AI 데이터베이스를 사용하여 애플리케이션에 대한 지속적인 가용성을 구현하는 모범 사례에 대해 알아보려면 ATP-Direct 백서에서 애플리케이션의 지속적인 가용성을 참조하십시오.
데이터베이스 서비스를 사용하여 연결
데이터베이스 서비스는 기본 인프라에 대한 투명성을 제공합니다. FAN, 연결 데이터, TAC(Transparent Application Continuity), AC(Application Continuity), 스위치오버, 소비자 그룹 및 기타 다양한 기능 및 운영은 서비스 사용에 대한 예측입니다.
전용 Exadata 인프라의 자율운영 AI 데이터베이스는 자율운영 AI 데이터베이스의 사전 정의된 데이터베이스 서비스 이름에 설명된 대로 선택할 수 있는 여러 쌍의 사전 정의된 데이터베이스 서비스를 제공합니다. 모두 FAN 및 드레이닝을 제공하며, 두 트랜잭션 처리 쌍에는 기본적으로 TAC가 사용으로 설정되어 있습니다. API를 사용하여 미리 정의된 모든 서비스에서 TAC 또는 AC 설정을 변경할 수 있습니다(Enable Service Attributes for Failover 참조).
고가용성을 위한 접속 문자열 구성
Oracle은 Oracle Autonomous AI Database에 접속할 때 아래 표시된 접속 문자열 구성을 권장합니다. Oracle에서 제공하는 tnsnames.ora 파일에 포함된 연결 문자열은 이러한 방식으로 구성됩니다. 이 연결에는 고가용성 기능이 없으므로 클라이언트에서 간단한 연결 이름 지정을 사용하지 마십시오.
모든 Oracle 클라이언트 버전 12.2 이상에 대해 다음 TNS를 사용합니다.
alias =
(DESCRIPTION =
(CONNECT_TIMEOUT= 120)(RETRY_COUNT=20)(RETRY_DELAY=3)(TRANSPORT_CONNECT_TIMEOUT=3)
(ADDRESS_LIST =
(LOAD_BALANCE=on)
(ADDRESS = (PROTOCOL = TCP)(HOST=*scan-host*)(PORT=1521)))
(CONNECT_DATA=(SERVICE_NAME = *service-name*)))
Oracle 드라이버 버전 12.1 또는 이전 버전을 사용하는 JDBC 접속의 경우 다음을 사용하십시오.
alias =
(DESCRIPTION =
(CONNECT_TIMEOUT= 15)(RETRY_COUNT=20)(RETRY_DELAY=3)
(ADDRESS_LIST =
(LOAD_BALANCE=on)
(ADDRESS = (PROTOCOL = TCP)(HOST=*scan-host*)(PORT=1521)))
(CONNECT_DATA=(SERVICE_NAME = *service-name*)))
FAN(빠른 응용 프로그램 통지) 사용
FAN은 서비스 중단 또는 재개 시 응용 프로그램에 즉시 알림을 제공합니다. FAN을 사용하지 않을 경우 하드웨어 및 네트워크 실패 후 TCP/IP 시간 초과 시 응용 프로그램이 중단될 수 있으며, 리소스를 재개할 때 균형을 조정하려면 생략할 수 있습니다. 모든 Oracle 풀 및 모든 Oracle Application Server는 FAN을 사용합니다. 타사 JAVA 응용 프로그램 서버는 UCP를 사용하여 FAN을 사용으로 설정할 수 있습니다.
FAN을 사용하려면 애플리케이션을 변경할 필요가 없습니다. 구성 변경 사항만 해당됩니다.
계획된 유지 관리 중 지속적인 서비스의 경우 다음과 함께 FAN을 사용합니다.
-
Oracle 풀 또는
-
타사 JDBC 애플리케이션 서버가 있는 UCP 또는
-
최신 Oracle 클라이언트 드라이버
계획되지 않은 운용중단 중 지속적인 서비스의 경우 FAN을 사용하여 다음을 수행합니다.
-
투명한 애플리케이션 연속성 또는
-
애플리케이션 연속성
FAN 적용 범위
FAN 이벤트는 다음과 통합됩니다.
-
Oracle Fusion Middleware 및 Oracle WebLogic Server
-
Oracle Data Guard 중계자
-
JDBC Thin 및 OCI(Oracle Call Interface) 인터페이스용 Oracle JDBC Universal Connection Pool 또는 Driver
-
관리되지 않는 제공자 및 관리되는 제공자용 ODP.NET 연결 풀
-
Oracle Tuxedo
-
SQL*Plus
-
Python, Node.js, PHP와 같은 언어를 위한 Oracle Database 드라이버
-
전역 데이터 서비스
-
Oracle JDBC 범용 접속 풀을 사용하는 타사 JDBC 애플리케이션 서버
-
리스너
클라이언트에서 FAN을 사용으로 설정하려면
고가용성을 위한 연결 문자열 구성에 표시된 TNS 별칭을 사용합니다. 이 접속 문자열은 Oracle Database 12c 이상 클라이언트 드라이버를 사용할 때 FAN 이벤트 수신을 위해 클라이언트에서 ONS(Oracle Notification Service) 가입을 자동 구성하는 데 사용됩니다. ONS는 데이터베이스 계층과 클라이언트 계층 간의 보안 통신 경로를 제공하여 클라이언트가 정상적인 작업 중 더 나은 작업 배치를 위해 서비스 가용성(구성 요소 정지 또는 시작) 및 런타임 로드 밸런싱 권고를 알릴 수 있도록 합니다.
클라이언트에 따라 다음과 같이 응용 프로그램 구성 등록 정보에서 FAN을 사용으로 설정합니다.
-
Universal Connection Pool 또는 JDBC Thin 드라이버(12.2부터)
FastConnectionFailoverEnabled속성을 설정합니다. -
Oracle용 WebLogic Active GridLink
RAC FAN 및 Fast Connection Failover는 기본적으로 활성화됩니다.
-
Oracle WebLogic Server, IBM WebSphere, IBM Liberty, Apache Tomcat, Red Hat WildFly(JBoss), JDBC 애플리케이션
Universal Connection Pool을 접속 풀 교체로 사용합니다.
-
ODP.Net 클라이언트(관리 및 관리되지 않는 제공자)
ODP.Net 12.1 또는 이전 버전을 사용하는 경우 접속 문자열에서
"HA events = true;pooling=true"를 설정합니다. -
OCI(Oracle Call Interface) 클라이언트 및 OCI 기반 드라이버
고유 설정이 없는 OCI(Oracle Call Interface) 클라이언트는
oraacces.xml파일을 사용하고events를true로 설정할 수 있습니다.Python, Node.js 및 PHP에는 기본 옵션이 있습니다. Python 및 Node.js에서는 연결 풀을 만들 때 이벤트 모드를 설정할 수 있습니다. PHP에서
php.ini를 편집하여oci8.events=on항목을 추가합니다. -
SQL*Plus
FAN은 기본적으로 사용으로 설정됩니다.
미리 정의된 데이터베이스 서비스는 TLS 전자 지갑 기반 인증을 사용하는 TCPS 연결을 제공합니다. 응용 프로그램 유형(JDBC 또는 Oracle Call Interface)에 따라 전자 지갑 구성은 Configure Clients for FAN Including Optional Wallets에 설명된 대로 특정 규칙을 따라야 합니다.
권장 방법을 사용하여 배수 허용
응용 프로그램 사용 시 가장 좋은 방법은 필요한 시간 동안 연결을 체크아웃한 다음 현재 작업이 완료되면 다시 풀에 체크인하는 것입니다. 이는 런타임 시 작업의 리밸런싱과 작업 드레이닝을 위한 유지 관리 윈도우(Maintenance windows) 동안의 성능을 향상시키는 데 중요합니다.
Oracle은 계획된 유지 관리를 숨기기 위해 FAN 인식 Oracle 접속 풀을 사용할 것을 권장합니다. 응용 프로그램이 FAN이 포함된 Oracle Pool을 사용하고 요청 사이에 풀에 대한 연결을 반환할 때는 유저에게 영향을 주지 않습니다. FAN을 사용하기 위해 애플리케이션을 변경할 필요가 없습니다. Oracle 연결 풀은 계획된 작동 중지 시간에 대해 FAN 이벤트를 수신할 때 비울 인스턴스의 모든 연결을 표시합니다. 체크 인된 연결은 재사용되지 않도록 즉시 닫힙니다. 사용 중인 연결이 풀로 반환되면 해당 연결이 닫힙니다. 이렇게 하면 시간 경과에 따라 모든 연결을 정상적으로 닫을 수 있습니다.
타사 Java 기반 응용 프로그램 서버를 사용하는 경우 드레이닝 및 페일오버를 수행하는 가장 효과적인 방법은 풀링된 데이터 소스를 UCP로 바꾸는 것입니다. Oracle WebLogic Server, IBM WebSphere, IBM Liberty, Apache Tomcat, Red Hat WildFly(JBoss), Spring, Hibernate 등 많은 애플리케이션 서버가 이러한 접근 방식을 지원합니다. Oracle 및 IBM과 같은 다른 공급업체의 백서에서는 이러한 애플리케이션 서버에서 UCP를 사용하는 방법에 대해 설명합니다. UCP를 데이터 소스로 사용하면 Fast Connection Failover, Runtime Load Balancing, Application Continuity 및 Transparent Application Continuity와 같은 UCP 기능을 전체 인증과 함께 사용할 수 있습니다.
투명한 애플리케이션 연속성(TAC) 또는 애플리케이션 연속성(AC) 사용
TAC는 세션 및 트랜잭션 상태를 투명하게 추적하고 기록하므로 복구 가능한 중단 후 데이터베이스 세션을 복구할 수 있습니다. 미리 정의된 데이터베이스 서비스의 두 트랜잭션 처리 쌍에는 기본적으로 TAC가 사용으로 설정되어 있습니다.
AC는 사용자 정의가 가능하므로 부작용을 재생하거나 TAC에서 허용하지 않는 페일오버 시 복잡한 콜백을 추가할 수 있습니다. Oracle 12c 드라이버(JDBC-thin 또는 Oracle Call Interface)를 사용 중이거나 부작용이나 콜백을 사용하여 사용자 정의하거나 세션 기간 임시 테이블과 같은 상태를 사용하고 요청에 따라 정리하지 않는 응용 프로그램이 있는 경우 AC를 사용합니다.
투명한 애플리케이션 연속성 사용 단계
-
사용 중인 데이터베이스 서비스에서 투명한 응용 프로그램 연속성을 사용으로 설정해야 하는 경우 Enable Service Attributes for Failover을 참조하십시오.
-
다음 지원되는 클라이언트 중 하나를 사용합니다.
Oracle은 최신 클라이언트 드라이버를 사용할 것을 적극 권장합니다. Oracle Database 19c 클라이언트 드라이버 이상은 TAC에 대한 완전한 지원을 제공합니다.
-
Oracle JDBC 재생 드라이버 18c 이상 이 기능은 응용 프로그램 연속성을 위해 Oracle Database 18c와 함께 제공되는 JDBC 드라이버 기능입니다.
-
Oracle JDBC Replay Driver 18c 이상이 설치된 UCP(Oracle Universal Connection Pool) 18c 이상입니다.
-
Oracle WebLogic Server Active GridLink 또는 Oracle JDBC Replay Driver 18c 이상이 설치된 UCP를 사용하는 타사 JDBC 응용 프로그램 서버입니다.
-
Oracle JDBC Replay Driver 18c 이상을 사용하는 Java 연결 풀 또는 독립형 Java 응용 프로그램입니다.
-
Oracle Call Interface 세션 풀 19c 이상
-
SQL*Plus 19c(19.3) 이상
-
ODP.NET 풀링됨, 관리되지 않는 드라이버 18c 이상(
"Pooling=true"기본값은 12.2 이상) -
19c OCI 드라이버 이상을 사용하는 Oracle Call Interface 기반 애플리케이션입니다.
-
-
연결 풀에 연결을 반환합니다.
응용 프로그램에서 연결을 사용하는 경우 요청 경계를 식별하기 위해 응용 프로그램을 변경할 필요가 없습니다.
-
Oracle 연결 풀 또는
-
Oracle JDBC Replay Driver 18c 이상
-
19c 이상을 사용하는 Oracle Call Interface 기반 응용 프로그램
연결 풀을 사용하는 경우 응용 프로그램은 각 요청이 완료될 때 풀에 대한 연결을 반환해야 합니다. Oracle은 응용 프로그램이 필요한 시간 동안만 연결을 체크 아웃할 것을 권장합니다. 사용하지 않을 때 연결을 유지하는 것은 좋은 방법이 아닙니다. 나열된 드라이버의 투명한 응용 프로그램 연속성도 경계를 추가할 수 있는 위치를 감지하고 자체 경계를 만듭니다.
-
-
FAILOVER_RESTORE사용투명한 응용 프로그램 연속성을 사용으로 설정하면 미리 설정된 세션 상태가 자동으로 복원됩니다. 표준 세트 외에 사전 설정된 세션 상태가 필요한 경우 콜백 또는 UCP 레이블을 등록하여 이러한 상태를 복원할 수 있습니다. 임시 테이블이나
SYS_CONTEXT와 같이 복원된 복잡한 세션 상태가 필요한 경우 이러한 유연성을 제공하는 Application Continuity를 사용합니다. -
응용 프로그램에서 변경 가능 사용 활성화
변경 가능 함수는 실행될 때마다 새 값을 반환할 수 있는 함수입니다. 원래 결과 유지에 대한 지원은
SYSDATE,SYSTIMESTAMP,SYS_GUID및sequence.NEXTVAL에 제공됩니다. Application Continuity 19c 이상에서는 자동으로 SQL용KEEPs mutables를 사용합니다. 응용 프로그램에서 변경 가능한 기능을 사용하거나 민감한 경우 DBA는GRANT KEEP권한을 실행해야 합니다.KEEP권한이 부여된 경우 리플레이는 리플레이 시 원래 함수 결과를 적용합니다. 예:SQL> GRANT [KEEP DATE TIME | KEEP SYSGUID] ... TO USERSQL> GRANT KEEP SEQUENCE mySequence TO myUser ON sequence.object -
부작용 사용 안함
부작용은 메일 전송, 파일 전송 또는 TCP 사용과 같은 외부 작업입니다. Transparent Application Continuity는 부작용을 감지하고 리플레이하지 않습니다. 부작용을 재생하려면 응용 프로그램 연속성을 사용하여 이러한 추가적인 유연성을 제공합니다.
애플리케이션 연속성 사용 단계
-
사용 중인 데이터베이스 서비스에서 응용 프로그램 연속성을 사용으로 설정해야 하는 경우 Enable Service Attributes for Failover을 참조하십시오.
-
다음 지원되는 클라이언트 중 하나를 사용합니다.
-
Oracle JDBC 리플레이 드라이버 12c 이상 이 기능은 응용 프로그램 연속성을 위해 Oracle Database 12c와 함께 제공되는 JDBC 드라이버 기능입니다.
-
Oracle JDBC Replay Driver 12c 이상이 설치된 UCP(Oracle Universal Connection Pool) 12c 이상입니다.
-
Oracle JDBC Replay Driver 12c 이상이 설치된 UCP를 사용하는 Oracle WebLogic Server Active GridLink 및 타사 JDBC 응용 프로그램 서버입니다.
-
Oracle JDBC Replay Driver 12c 이상을 요청 경계 또는 풀링된 데이터 소스와 함께 사용하는 Java 접속 풀 또는 독립형 Java 애플리케이션입니다.
-
Oracle Call Interface 세션 풀 12c 릴리스 2 이상을 사용하는 애플리케이션 및 언어 드라이버입니다.
-
SQL*Plus 19.3 이상
-
ODP.NET 풀링됨, 관리되지 않는 드라이버 12c 릴리스 2 이상(
"Pooling=true";"Application Continuity=true"기본값은 12.2 이상)
-
-
연결 풀에 연결을 반환합니다.
응용 프로그램이 요청 경계를 지원하는 타사 JDBC 풀 또는 Oracle 연결 풀을 사용하는 경우에는 요청 경계를 식별하기 위해 응용 프로그램을 변경할 필요가 없습니다. Oracle 풀을 사용하고 요청 간에 해당 풀에 대한 연결을 반환하는 것이 가장 좋습니다. Oracle은 응용 프로그램이 필요한 시간 동안만 연결을 체크 아웃할 것을 권장합니다. 사용하지 않을 때 연결을 보유하는 것은 바람직하지 않으며 투명한 계획된 유지 관리를 방지합니다.
-
FAILOVER_RESTORE사용대부분의 공통 상태는
FAILOVER_RESTORE=LEVEL1를 사용하여 자동으로 복원됩니다. 응용 프로그램에서 표준 세트 외에 세션 상태를 미리 설정하는 경우 콜백 또는 UCP 레이블을 등록하여 이러한 상태를 복원해야 합니다. 서비스에서FAILOVER_RESTORE=LEVEL1를 설정하고 다음을 사용합니다.-
Java에 대한 접속 초기화 콜백 또는 Oracle Call Interface에 대한 (이전) TAF 콜백
-
범용 접속 풀 또는 WebLogic Server 접속 레이블 지정
-
-
응용 프로그램에서 변경 가능 사용 활성화
변경 가능 함수는 실행될 때마다 새 값을 반환할 수 있는 함수입니다. 원래 결과 유지에 대한 지원은
SYSDATE,SYSTIMESTAMP,SYS_GUID및sequence.NEXTVAL에 제공됩니다. Application Continuity 19c 이상에서는 자동으로KEEPs mutables for SQL을 사용하므로 별도의 조치가 필요하지 않습니다. PL/SQL에 대한 변경 사항이 필요한 경우 DBA가GRANT KEEP권한을 실행해야 합니다.KEEP권한이 부여된 경우 리플레이는 리플레이 시 원래 함수 결과를 적용합니다. 예:SQL> GRANT [KEEP DATE TIME | KEEP SYSGUID] ... TO USERSQL> GRANT KEEP SEQUENCE mySequence TO myUser ON sequence.object -
부작용을 재생할지 결정
부작용은 메일 전송, 파일 전송 또는 TCP 사용과 같은 외부 작업입니다. 응용 프로그램 연속성을 사용할 경우 응용 프로그램에서 달리 지정하지 않는 한 부작용이 재생됩니다. 요청에 재생되지 않아야 하는 외부 작업이 있는 경우 해당 요청은 애플리케이션 연속성이 사용으로 설정되지 않은 접속을 사용하거나 Java용
disableReplay()API 또는 Oracle Call Interface용OCIRequestDisableReplay()를 사용하여 해당 요청에 대해 재생을 사용 안함으로 설정할 수 있습니다. 모든 부작용을 재생하지 않으려면 투명한 응용 프로그램 연속성을 사용합니다.