지속적인 가용성을 위한 코드
계획된 유지보수, 계획되지 않은 운용중단 및 데이터베이스의 로드 불균형이 애플리케이션에서 숨겨지면 애플리케이션이 지속적인 가용성을 달성합니다. 애플리케이션 모범 사례, 간단한 구성 및 Oracle Autonomous Database를 결합하여 애플리케이션의 지속적인 가용성을 보장합니다.
응용 프로그램에서 계획된 유지 관리 작업을 숨기는 가장 좋은 방법은 해당 작업 로드 위치에 대한 유지 관리 기간 전에 각 데이터베이스 작업 로드 위치에서 작업을 투명하게 비우는 것입니다. WebLogic Server, Oracle Universal Connection Pool(UCP), 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) 구성의 다른 데이터베이스 인스턴스)에 대한 연결을 재설정하고 가능한 경우 실행 중(커밋되지 않은) 작업을 다시 재생합니다. 새 위치에서 진행 중인 작업을 리플레이하면 일반적으로 Failure가 발생한 것을 알지 못해도 응용 프로그램이 계속 실행될 수 있습니다.
또한 TAC 또는 AC는 할당된 드레인 간격 동안 비우지 않는(현재 데이터베이스 작업을 완료) 세션에 대해 계획된 유지 관리 중에 실행됩니다.
애플리케이션 구성 검사 목록
다음 지침에 따라 응용 프로그램을 계속 사용할 수 있도록 합니다.
- 데이터베이스 서비스를 사용하여 접속
- 고가용성을 위한 접속 문자열 구성
- 빠른 응용 프로그램 통지 사용(FAN)
- 권장 방법을 사용하여 드레이닝 허용
- TAC(Transparent Application Continuity) 또는 AC(Application Continuity) 사용
참고:
Autonomous Database를 사용하여 애플리케이션에 대한 지속적인 가용성을 구현하는 모범 사례에 대한 자세한 내용은 ATP-Direct 백서상의 애플리케이션에 대한 지속적인 가용성을 참조하십시오.데이터베이스 서비스를 사용하여 접속
데이터베이스 서비스는 기본 Infrastructure에 대해 투명성을 제공합니다. 즉, FAN, 연결 데이터, TAC(Transparent Application Continuity), AC(Application Continuity), Switchover, Consumer Group 및 기타 여러 기능 및 작업이 서비스 사용에 대해 예측됩니다.
Autonomous Database on Dedicated Exadata Infrastructure는 Predefined Database Service Names for Autonomous Databases에 설명된 대로 선택할 수 있는 사전 정의된 여러 데이터베이스 서비스 쌍을 제공합니다. 모두 FAN 및 드레이닝을 제공하며 두 트랜잭션 처리 쌍은 기본적으로 TAC를 사용으로 설정합니다. API를 사용하여 미리 정의된 모든 서비스에 대한 TAC 또는 AC 설정을 변경할 수 있습니다(Enable Service Attributes for Failover 참조).
고가용성을 위한 접속 문자열 구성
Oracle은 Oracle Autonomous Database에 접속할 때 아래와 같은 접속 문자열 구성을 권장합니다. Oracle 제공 tnsnames.ora
파일에 포함된 연결 문자열은 이러한 방식으로 구성됩니다. 이러한 연결에는 고가용성 기능이 없으므로 클라이언트에서 간단한 연결(Easy Connect) 이름 지정을 사용하지 마십시오.
모든 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 또는 드라이버
- ODP.NET 관리되지 않는 제공자 및 관리되는 제공자용 접속 풀
- Oracle Tuxedo
- SQL*Plus
- Python, Node.js 및 PHP와 같은 언어용 Oracle Database 드라이버
- 전역 데이터 서비스
- Oracle JDBC Universal Connection Pool을 사용하는 타사 JDBC 애플리케이션 서버
- 리스너
클라이언트에서 FAN을 사용으로 설정하려면
Configure Connection String for High Availability에 표시된 TNS 별칭을 사용합니다. 이 연결 문자열은 Oracle Database 12c 이상 클라이언트 드라이버를 사용할 때 FAN 이벤트 수신을 위해 클라이언트에서 ONS(Oracle Notification Service) 가입을 자동으로 구성하는 데 사용됩니다. ONS는 데이터베이스 계층과 클라이언트 계층 간의 보안 통신 경로를 제공하여 클라이언트가 서비스 가용성(중지 또는 시작 중인 구성 요소)에 대한 알림을 받을 수 있을 뿐 아니라 정상 작동 중에 더 나은 작업을 배치할 수 있도록 런타임 로드 밸런싱 조언을 제공합니다.
클라이언트에 따라 다음과 같이 응용 프로그램 구성 등록 정보에서 FAN을 사용으로 설정합니다.
-
Universal Connection Pool 또는 JDBC thin 드라이버(12.2 시작)
FastConnectionFailoverEnabled
등록 정보를 설정합니다. -
WebLogic Oracle용 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"
를 설정합니다. -
Oracle Call Interface(OCI) 클라이언트 및 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 풀을 사용하고 요청 간에 풀에 대한 연결을 반환하는 경우 사용자에게는 영향을 주지 않습니다. FAN을 사용하기 위해 응용 프로그램을 변경할 필요는 없습니다. Oracle 연결 풀은 계획된 작동 중지 시간에 대해 FAN 이벤트를 수신할 때 비울 인스턴스의 모든 연결을 표시합니다. 체크인된 연결은 재사용되지 않도록 즉시 닫힙니다. 사용 중인 연결이 풀로 반환되면 닫힙니다. 이렇게 하면 모든 연결이 시간에 따라 정상적으로 닫힐 수 있습니다.
타사 Java 기반 응용 프로그램 서버를 사용 중인 경우 배수 및 페일오버를 수행하는 가장 효과적인 방법은 풀링된 데이터 소스를 UCP로 교체하는 것입니다. Oracle WebLogic Server, IBM WebSphere, IBM Liberty, Apache Tomcat, Red Hat WildFly(JBoss), Spring, Hibernate 등 다양한 애플리케이션 서버가 이러한 접근 방식을 지원합니다. Oracle 및 IBM과 같은 다른 공급자의 백서에서는 이러한 응용 프로그램 서버에서 UCP를 사용하는 방법에 대해 설명합니다. UCP를 데이터 소스로 사용하면 빠른 연결 페일오버, 런타임 로드 밸런싱, 애플리케이션 연속성 및 투명한 애플리케이션 연속성과 같은 UCP 기능을 전체 인증과 함께 사용할 수 있습니다.
TAC(Transparent Application Continuity) 또는 AC(Application Continuity) 사용
TAC는 복구 가능한 정전 후에 데이터베이스 세션을 복구할 수 있도록 세션과 트랜잭션 상태를 투명하게 추적하고 기록합니다. 미리 정의된 데이터베이스 서비스의 두 트랜잭션 처리 쌍은 기본적으로 TAC를 활성화합니다.
AC는 사용자 정의가 가능하므로 부작용을 재생하거나 TAC에서 허용하지 않는 페일오버 시 복잡한 콜백을 추가할 수 있습니다. Oracle 12c 드라이버(JDBC-thin 또는 Oracle Call Interface)를 사용 중이거나 부작용이나 콜백으로 사용자 정의하거나 세션 기간 임시 테이블과 같은 상태를 사용하는 응용 프로그램이 있고 요청 간에 정리되지 않는 경우 AC를 사용합니다.
투명한 응용 프로그램 연속성 사용 단계
-
사용 중인 데이터베이스 서비스에서 투명 애플리케이션 연속성을 사용으로 설정해야 하는 경우 페일오버에 대해 서비스 속성 사용을 참조하십시오.
-
다음 지원되는 클라이언트 중 하나를 사용합니다.
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 또는 UCP를 Oracle JDBC Replay Driver 18c 이상과 함께 사용하는 타사 JDBC 응용 프로그램 서버.
- Oracle JDBC Replay Driver 18c 이상을 사용하는 Java 접속 풀 또는 독립형 Java 애플리케이션입니다.
- Oracle Call Interface 세션 풀 19c 이상
- SQL*Plus 19c(19.3) 이상
- ODP.NET 풀링됨, 관리되지 않는 드라이버 18c 이상(12.2 이상에서는
"Pooling=true"
기본값). - 19c OCI 드라이버 이상을 사용하는 Oracle Call Interface 기반 애플리케이션입니다.
-
Connections Pool로 연결을 반환합니다.
응용 프로그램에서 연결을 사용하는 경우 요청 경계를 식별하기 위해 응용 프로그램을 변경할 필요가 없습니다.
- Oracle 연결 풀 또는
- Oracle JDBC Replay Driver 18c 이상 또는
- 19c 이상을 사용하는 Oracle Call Interface 기반 애플리케이션에서
연결 풀을 사용할 때 응용 프로그램은 각 요청이 완료되면 풀로 연결을 반환해야 합니다. Oracle은 응용 프로그램이 필요한 시간 동안만 연결을 체크아웃할 것을 권장합니다. 사용하지 않을 때 연결을 보유하는 것은 바람직하지 않습니다. 나열된 드라이버의 투명한 응용 프로그램 연속성은 경계를 추가할 수 있는 위치를 감지하고 자체 경계를 만듭니다.
-
FAILOVER_RESTORE
사용투명한 응용 프로그램 연속성을 사용으로 설정하면 사전 설정된 세션 상태가 자동으로 복원됩니다. 표준 세트 외에 사전 설정된 세션 상태가 필요한 경우 콜백 또는 UCP 레이블을 등록하여 이러한 상태를 복원할 수 있습니다. 임시 테이블 또는
SYS_CONTEXT
와 같은 복잡한 세션 상태가 복원되어야 하는 경우 이러한 유연성을 제공하는 Application Continuity를 사용합니다. -
애플리케이션에서 변경 가능 사용을 사용으로 설정합니다.
변경 가능한 함수는 함수가 실행될 때마다 새 값을 반환할 수 있는 함수입니다. 원래 결과 유지에 대한 지원은
SYSDATE
,SYSTIMESTAMP
,SYS_GUID
및
에 제공됩니다. 애플리케이션 연속성 19c 이상은 SQL에 대한sequence.NEXTVAL
KEEP
의 변경 사항을 자동으로 제공합니다. 응용 프로그램에서 변경 가능한 함수를 사용하거나 민감한 경우에는 DBA가GRANT KEEP
권한을 실행해야 합니다.KEEP
권한이 부여되면 리플레이는 리플레이 시 원래 함수 결과를 적용합니다. 예:SQL> GRANT [KEEP DATE TIME | KEEP SYSGUID] … TO USER
SQL> GRANT KEEP SEQUENCE mySequence TO myUser ON sequence.object
-
부작용 사용 안함
부작용은 메일 전송, 파일 전송 또는 TCP 사용과 같은 외부 작업입니다. Transparent Application Continuity는 부작용을 감지하고 재생하지 않습니다. 부작용을 재생하려면 응용 프로그램 연속성을 사용하여 유연성을 향상시킵니다.
애플리케이션 연속성 사용 단계
-
사용 중인 데이터베이스 서비스에서 애플리케이션 연속성을 사용으로 설정해야 하는 경우 페일오버에 대해 서비스 속성 사용을 참조하십시오.
-
다음 지원되는 클라이언트 중 하나를 사용합니다.
- Oracle JDBC 재생 드라이버 12c 이상 Oracle Database 12c for Application Continuity와 함께 제공되는 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 이상(12.2 이상의
"Pooling=true";"Application Continuity=true"
기본값)
-
Connections Pool로 연결을 반환합니다.
응용 프로그램에서 요청 경계를 지원하는 Oracle 접속 풀 또는 타사 JDBC 풀을 사용 중인 경우 요청 경계를 식별하기 위해 응용 프로그램을 변경할 필요가 없습니다. Oracle 풀을 사용하고 요청 간에 해당 풀에 대한 연결을 반환하는 것이 가장 좋습니다. Oracle은 응용 프로그램이 필요한 시간 동안만 연결을 체크아웃할 것을 권장합니다. 사용하지 않을 때 연결을 보유하는 것은 바람직하지 않으며 투명한 계획된 유지 관리를 방지합니다.
-
FAILOVER_RESTORE
사용대부분의 공통 상태는
FAILOVER_RESTORE=LEVEL1
를 사용하여 자동으로 복원됩니다. 응용 프로그램이 표준 세트 외에 세션 상태를 사전 설정하는 경우 이러한 상태를 복원하려면 콜백 또는 UCP 레이블을 등록해야 합니다. 서비스에서FAILOVER_RESTORE=LEVEL1
를 설정하고 다음을 사용합니다.- Oracle Call Interface용 Java 또는 (이전) TAF 콜백에 대한 접속 초기화 콜백 또는
- Universal Connection Pool 또는 WebLogic Server Connection Labelling
-
애플리케이션에서 변경 가능 사용을 사용으로 설정합니다.
변경 가능한 함수는 함수가 실행될 때마다 새 값을 반환할 수 있는 함수입니다. 원래 결과 유지에 대한 지원은
SYSDATE
,SYSTIMESTAMP
,SYS_GUID
및
에 제공됩니다. 애플리케이션 연속성 19c 이상은 SQL에 대한sequence.NEXTVAL
KEEP
변수를 자동으로 제공하므로 아무 작업도 필요하지 않습니다. PL/SQL에 대한 변경 사항이 필요한 경우 DBA는GRANT KEEP
권한을 실행해야 합니다.KEEP
권한이 부여되면 리플레이는 리플레이 시 원래 함수 결과를 적용합니다. 예:SQL> GRANT [KEEP DATE TIME | KEEP SYSGUID] … TO USER
SQL> GRANT KEEP SEQUENCE mySequence TO myUser ON sequence.object
-
부작용을 재생할지 여부 결정
부작용은 메일 전송, 파일 전송 또는 TCP 사용과 같은 외부 작업입니다. 응용 프로그램 연속성을 사용하면 응용 프로그램에서 달리 지정하지 않는 한 부작용이 재생됩니다. 요청에 재생되지 않아야 하는 외부 작업이 있는 경우 해당 요청은 애플리케이션 연속성이 사용으로 설정되지 않은 접속을 사용할 수 있습니다. 또는
disableReplay()
API for Java 또는OCIRequestDisableReplay()
for Oracle Call Interface를 사용하여 해당 요청에 대해 재생을 사용 안함으로 설정할 수 있습니다. 모든 부작용을 재생하지 않으려면 투명 응용 프로그램 연속성을 사용합니다.