Codice per disponibilità continua
Le tue applicazioni ottengono la disponibilità continua quando la manutenzione pianificata, le indisponibilità non pianificate e gli squilibri di carico del database sono nascosti dall'applicazione. Una combinazione di best practice applicative, configurazione semplice e Oracle Autonomous AI Database garantiscono che le tue applicazioni siano sempre disponibili.
L'approccio migliore per nascondere le attività di manutenzione pianificate dalle applicazioni è rimuovere in modo trasparente il lavoro da ogni posizione del carico di lavoro del database prima della finestra di manutenzione per tale posizione del carico di lavoro. I connection pool e i mid-tier di Oracle, inclusi WebLogic Server, Oracle Universal Connection Pool (UCP), OCI Session pool e ODP.NET Unmanaged Provider sono consapevoli della funzionalità FAN (Fast Application Notification) e pertanto ricevono una notifica prima che i servizi di database siano pianificati per lo spostamento in modo da consentire un normale drenaggio del lavoro prima della manutenzione. La notifica FAN attiva automaticamente la chiusura delle connessioni inattive, l'apertura di nuove connessioni nella nuova posizione del servizio e consente un tempo configurabile per il completamento del lavoro attivo nella posizione del servizio che verrà presto arrestata. I principali mid-tier JDBC di terze parti, ad esempio IBM WebSphere, consentono lo stesso comportamento se configurati con UCP. Per le applicazioni basate su JDBC che non possono utilizzare UCP, Oracle fornisce soluzioni utilizzando i driver Oracle e i test di connessione.
Al fine di nascondere le indisponibilità non pianificate risultanti da un errore di componente o comunicazione, Oracle fornisce:
-
Notifica. FAN è il primo passo per nascondere le indisponibilità. FAN notifica ai client e li separa dall'attesa corrente della rete quando si verifica un'interruzione. Ciò evita il blocco delle applicazioni per lunghe attese di rete. È importante sottolineare che FAN richiama anche il ribilanciamento delle sessioni quando i servizi sono di nuovo disponibili.
-
Recupero. Dopo aver ricevuto una notifica al client, TAC (Transparent Application Continuity) o AC (Application Continuity) ristabiliscono una connessione a una nuova posizione del carico di lavoro (un'altra istanza del database nella configurazione Real Application Clusters (RAC) in cui è in esecuzione il database) e, se possibile, riproducono il lavoro in esecuzione (non impegnato). Ripetendo il lavoro in volo sulla nuova posizione, l'applicazione di solito può continuare l'esecuzione senza sapere che si è verificato un errore.
TAC o AC viene eseguito anche durante la manutenzione pianificata per le sessioni che non prosciugano (completano l'operazione corrente del database) durante l'intervallo di rimozione allocato.
Lista di controllo configurazione applicazione
Rendi la tua applicazione costantemente disponibile seguendo queste linee guida:
-
Utilizzare le pratiche consigliate per consentire lo scarico
-
Abilita TAC (Transparent Application Continuity) o AC (Application Continuity)
Suggerimento: vedere il white paper sulla disponibilità continua per le applicazioni su ATP-Direct per informazioni sulle procedure ottimali per l'implementazione della disponibilità continua per le applicazioni che utilizzano un Autonomous AI Database.
Connetti tramite Database Services
I servizi di database forniscono trasparenza per l'infrastruttura sottostante: FAN, dati di connessione, Transparent Application Continuity (TAC), Application Continuity (AC), switchover, gruppi di consumatori e molte altre funzionalità e operazioni sono previste sull'uso dei servizi.
Autonomous AI Database on Dedicated Exadata Infrastructure offre diverse coppie di servizi di database predefiniti tra cui scegliere, come descritto in Nomi di servizi di database predefiniti per i database AI autonomi. Tutte forniscono FAN e drenaggio e le due coppie di elaborazione delle transazioni hanno TAC abilitato per impostazione predefinita. È disponibile un'interfaccia API per modificare le impostazioni TAC o AC in tutti i servizi predefiniti (vedere Abilita attributi servizio per failover).
Configura stringa di connessione per High Availability
Oracle consiglia la configurazione della stringa di connessione mostrata di seguito durante la connessione a Oracle Autonomous AI Database. Le stringhe di connessione incorporate nel file tnsnames.ora fornito da Oracle vengono configurate in questo modo. Non utilizzare Easy Connect Naming sul client perché tali connessioni non dispongono di funzionalità ad alta disponibilità.
Utilizzare questo TNS per tutti i client Oracle versione 12.2 o successiva:
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*)))
Utilizzare quanto riportato di seguito per le connessioni JDBC che utilizzano il driver Oracle versione 12.1 o precedente
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*)))
Uso di FAN (Fast Application Notification)
FAN fornisce una notifica immediata a un'applicazione in caso di interruzione o ripresa del servizio. Senza FAN, le applicazioni possono rimanere in sospeso sul timeout TCP/IP in seguito a errori di hardware e rete e non ribilanciarsi quando le risorse riprendono. Tutti i pool Oracle e tutti gli application server Oracle utilizzano FAN. I server applicazioni JAVA di terze parti possono utilizzare UCP per abilitare FAN.
Non sono necessarie modifiche all'applicazione per utilizzare FAN. Si tratta solo di modifiche alla configurazione.
Per un servizio continuo durante la manutenzione pianificata, utilizzare FAN con:
-
pool Oracle o
-
UCP con server applicazioni JDBC di terze parti o
-
I driver client Oracle più recenti
Per un servizio continuo durante le interruzioni non pianificate, utilizzare FAN con:
-
Continuità di applicazione trasparente o
-
Continuità di applicazione
Copertura FAN
Gli eventi FAN sono integrati con:
-
Oracle Fusion Middleware e Oracle WebLogic Server
-
Broker di Oracle Data Guard
-
Connection pool o driver Oracle JDBC Universal per interfacce thin e OCI (Oracle Call Interface) JDBC
-
Connection pool ODP.NET per provider non gestiti e gestiti
-
Oracle Tuxedo
-
SQL*Plus
-
Driver Oracle Database per linguaggi come Python, Node.js e PHP
-
Global Data Services
-
Application server JDBC di terze parti che utilizzano Oracle JDBC Universal Connection Pool
-
Listener
Abilitare FAN nel client
Utilizzare l'alias TNS visualizzato in Configura stringa di connessione per High Availability. Questa stringa di connessione viene utilizzata per configurare automaticamente la sottoscrizione al servizio di notifica Oracle (ONS) sul client per la ricezione dell'evento FAN quando si utilizza un driver client Oracle Database 12c o versione successiva. ONS fornisce un percorso di comunicazione sicuro tra il livello di database e il livello client che consente al client di ricevere notifiche sulla disponibilità del servizio (arresto o avvio dei componenti) nonché suggerimenti di bilanciamento del carico runtime per un migliore posizionamento del lavoro durante il normale funzionamento.
A seconda del client, abilitare FAN nelle proprietà di configurazione dell'applicazione come indicato di seguito.
-
Connection pool universale o thin driver JDBC (a partire dalla versione 12.2)
Impostare la proprietà
FastConnectionFailoverEnabled. -
Active GridLink WebLogic per Oracle
I failover di RAC FAN e Fast Connection sono abilitati per impostazione predefinita.
-
Oracle WebLogic Server, IBM WebSphere, IBM Liberty, Apache Tomcat, Red Hat WildFly (JBoss), Applicazioni JDBC
Utilizzare Universal Connection Pool come sostituzione del connection pool.
-
Client ODP.Net (fornitori gestiti e non gestiti)
Impostare
"HA events = true;pooling=true"nella stringa di connessione se si utilizza ODP.Net 12.1 o versione precedente. -
Client Oracle Call Interface (OCI) e driver basati su OCI
I client Oracle Call Interface (OCI) senza impostazioni native possono utilizzare un file
oraacces.xmle impostareeventssutrue.Python, Node.js e PHP hanno opzioni native. In Python e Node.js è possibile impostare una modalità eventi durante la creazione di un connection pool. In PHP, modificare
php.iniaggiungere la voceoci8.events=on. -
SQL*Plus
Per impostazione predefinita, la funzione FAN è abilitata.
I servizi di database predefiniti offrono connessioni TCPS che utilizzano l'autenticazione basata su wallet TLS. A seconda del tipo di applicazione (JDBC o Oracle Call Interface), la configurazione del wallet deve seguire regole specifiche, come descritto in Configura client per FAN inclusi wallet facoltativi.
Utilizzare le pratiche consigliate per consentire lo scarico
La procedura ottimale per l'uso dell'applicazione prevede il check-out delle connessioni per il periodo di tempo necessario, quindi il check-in nel pool al termine dell'azione corrente. Ciò è importante per ottenere buone prestazioni, per il ribilanciamento del lavoro in fase di esecuzione e durante le finestre di manutenzione per il drenaggio del lavoro.
Oracle consiglia di utilizzare un connection pool Oracle basato su FAN per nascondere la manutenzione pianificata. Non vi è alcun impatto sugli utenti quando l'applicazione utilizza un pool Oracle con FAN e restituisce le connessioni al pool tra le richieste. Non è necessario apportare modifiche alle applicazioni per utilizzare FAN. Quando un connection pool Oracle riceve l'evento FAN per il tempo di inattività pianificato, contrassegna tutte le connessioni nell'istanza da eliminare. Immediatamente, le connessioni di cui è stato eseguito il check-in vengono chiuse in modo che non vengano riutilizzate. Poiché le connessioni in uso vengono restituite al pool, vengono chiuse. Ciò consente a tutte le connessioni di essere chiuse con grazia nel tempo.
Se si utilizza un application server di terze parti basato su Java, il metodo più efficace per ottenere il drenaggio e il failover consiste nel sostituire l'origine dati in pool con UCP. Molti application server supportano questo approccio, tra cui Oracle WebLogic Server, IBM WebSphere, IBM Liberty, Apache Tomcat, Red Hat WildFly (JBoss), Spring, Hibernate e altri. I white paper di Oracle e di altri provider, ad esempio IBM, descrivono come utilizzare UCP con questi application server. L'utilizzo di UCP come origine dati consente di utilizzare funzioni UCP come Fast Connection Failover, Runtime Load Balancing, Application Continuity e Transparent Application Continuity con certificazione completa.
Abilita TAC (Transparent Application Continuity) o AC (Application Continuity)
TAC tiene traccia e registra in modo trasparente della sessione e dello stato transazionale in modo che una sessione di database possa essere recuperata in seguito a interruzioni recuperabili. Per impostazione predefinita, le due coppie di elaborazione delle transazioni dei servizi di database predefiniti hanno abilitato il TAC.
AC è personalizzabile, consentendo di scegliere di ripetere gli effetti collaterali o di aggiungere callback complessi al failover che il TAC non consente. Utilizzare la funzionalità AC se si utilizzano i driver Oracle 12c (JDBC-thin o Oracle Call Interface) o se si desidera personalizzare con effetti collaterali o callback oppure se si dispone di un'applicazione che utilizza uno stato come le tabelle temporanee della durata della sessione e non esegue il cleanup tra le richieste.
Passi per l'utilizzo della continuità di applicazione trasparente
-
Se è necessario abilitare la continuità di applicazione trasparente nel servizio di database in uso, vedere Abilita attributi di servizio per il failover.
-
Utilizzare uno dei client supportati seguenti.
Oracle consiglia di utilizzare i driver client più recenti. I driver client Oracle Database 19c e versioni successive forniscono il supporto completo per TAC.
-
Driver di ripetizione JDBC Oracle 18c o versione successiva. Questa è una funzione driver JDBC fornita con Oracle Database 18c per Application Continuity.
-
Oracle Universal Connection Pool (UCP) 18c o versione successiva con Oracle JDBC Replay Driver 18c o versione successiva.
-
Active GridLink di Oracle WebLogic Server o Application Server JDBC di terze parti che utilizzano UCP con Oracle JDBC Replay Driver 18c o versione successiva.
-
Connection pool Java o applicazioni Java standalone che utilizzano il driver di ripetizione JDBC Oracle 18c o versioni successive.
-
Oracle Call Interface Session Pool 19c o versione successiva.
-
SQL*Plus 19c (19.3) o versione successiva
-
Driver non gestito 18c o versione successiva in pool ODP.NET (impostazione predefinita
"Pooling=true"nella versione 12.2 e successive). -
Applicazioni basate su Oracle Call Interface che utilizzano il driver OCI 19c o versioni successive.
-
-
Restituisce le connessioni al connection pool.
Non è necessario apportare modifiche all'applicazione per identificare i limiti delle richieste se l'applicazione utilizza le connessioni:
-
dai connection pool Oracle o
-
dal driver di ripetizione Oracle JDBC 18c o versione successiva o
-
dalle applicazioni basate su Oracle Call Interface che utilizzano 19c o versioni successive
Quando si utilizzano i connection pool, l'applicazione deve restituire la connessione al pool al completamento di ogni richiesta. Oracle consiglia a un'applicazione di eseguire il check-out di una connessione solo per il tempo necessario. Tenere una connessione quando non è in uso non è una buona pratica. La continuità di applicazione trasparente con i driver elencati rileva anche dove i limiti possono essere aggiunti e crea i propri confini.
-
-
Usa
FAILOVER_RESTOREL'abilitazione di Transparent Application Continuity ripristina automaticamente gli stati di sessione preimpostati. Se si scopre di aver bisogno di stati di sessione preimpostati oltre al set standard, è possibile registrare un callback o un'etichetta UCP per ripristinare questi stati. Se è necessario ripristinare stati di sessione complessi, ad esempio tabelle temporanee o
SYS_CONTEXT, utilizzare la continuità di applicazione che offre questa flessibilità. -
Abilita uso modificabile nell'applicazione
Le funzioni modificabili sono funzioni che possono restituire un nuovo valore ogni volta che vengono eseguite. Il supporto per mantenere i risultati originali è fornito per
SYSDATE,SYSTIMESTAMP,SYS_GUIDesequence.NEXTVAL. Application Continuity 19c e successive modificabili automaticamenteKEEPs per SQL. Se l'applicazione utilizza o è sensibile a funzioni modificabili, un DBA deve eseguire il privilegioGRANT KEEP. Quando viene concesso il privilegioKEEP, la ripetizione applica il risultato della funzione originale alla ripetizione. Ad esempio:SQL> GRANT [KEEP DATE TIME | KEEP SYSGUID] ... TO USERSQL> GRANT KEEP SEQUENCE mySequence TO myUser ON sequence.object -
Gli effetti collaterali sono disattivati
Un effetto collaterale è un'azione esterna come l'invio di posta, il trasferimento di file o l'utilizzo di TCP. Transparent Application Continuity rileva gli effetti collaterali e non li riproduce. Se si desidera riprodurre gli effetti collaterali, utilizzare Continuità di applicazione che consente questa flessibilità aggiuntiva.
Passi per l'utilizzo della continuità di applicazione
-
Se è necessario abilitare la continuità di applicazione nel servizio di database in uso, vedere Abilita attributi di servizio per il failover.
-
Utilizzare uno dei client supportati seguenti.
-
Driver di ripetizione JDBC Oracle 12c o versione successiva. Questa è una funzione driver JDBC fornita con Oracle Database 12c per Application Continuity.
-
Oracle Universal Connection Pool (UCP) 12c o versione successiva con Oracle JDBC Replay Driver 12c o versione successiva.
-
Oracle WebLogic Server Active GridLink e Application Server JDBC di terze parti che utilizzano UCP con Oracle JDBC Replay Driver 12c o versione successiva.
-
Connection pool Java o applicazioni Java standalone che utilizzano il driver di ripetizione JDBC Oracle 12c o versioni successive con limiti di richiesta o origine dati in pool.
-
Driver di applicazioni e lingue che utilizzano Oracle Call Interface Session Pool 12c Release 2 o successive.
-
SQL*Plus 19.3 o versioni successive.
-
Driver 12c Release 2 o successiva in pool ODP.NET (impostazione predefinita
"Pooling=true";"Application Continuity=true"nella versione 12.2 e successive)
-
-
Restituisce le connessioni al connection pool.
Non è necessario apportare modifiche all'applicazione per identificare i limiti delle richieste se l'applicazione utilizza un connection pool Oracle o un pool JDBC di terze parti che supporta i limiti delle richieste. È consigliabile utilizzare un pool Oracle e restituire le connessioni a tale pool tra le richieste. Oracle consiglia a un'applicazione di eseguire il check-out di una connessione solo per il tempo necessario. Tenere una connessione quando non è in uso non è una buona pratica e impedirà una manutenzione pianificata trasparente.
-
Usa
FAILOVER_RESTOREGli stati più comuni vengono ripristinati automaticamente con
FAILOVER_RESTORE=LEVEL1. Se la sessione dell'applicazione preimposta gli stati oltre al set standard, è necessario registrare un callback o un'etichetta UCP per ripristinare questi stati. ImpostareFAILOVER_RESTORE=LEVEL1sul servizio e utilizzare:-
Callback di inizializzazione della connessione per Java o il callback TAF (vecchio) per Oracle Call Interface o
-
Etichettatura connessione Universal Connection Pool o WebLogic Server
-
-
Abilita uso modificabile nell'applicazione
Le funzioni modificabili sono funzioni che possono restituire un nuovo valore ogni volta che vengono eseguite. Il supporto per mantenere i risultati originali è fornito per
SYSDATE,SYSTIMESTAMP,SYS_GUIDesequence.NEXTVAL. Continuità di applicazione 19c e successive modificabili automaticamenteKEEPs per SQL, quindi non è richiesta alcuna azione. Se sono necessari elementi modificabili per PL/SQL, un DBA deve eseguire il privilegioGRANT KEEP. Quando viene concesso il privilegioKEEP, la ripetizione applica il risultato della funzione originale alla ripetizione. Ad esempio:SQL> GRANT [KEEP DATE TIME | KEEP SYSGUID] ... TO USERSQL> GRANT KEEP SEQUENCE mySequence TO myUser ON sequence.object -
Decidi se vuoi riprodurre gli effetti collaterali
Un effetto collaterale è un'azione esterna come l'invio di posta, il trasferimento di file o l'utilizzo di TCP. Con Continuità di applicazione, gli effetti collaterali vengono riprodotti a meno che l'applicazione non specifichi diversamente. Se una richiesta dispone di un'azione esterna che non deve essere ripetuta, tale richiesta può utilizzare una connessione per la quale non è abilitata la continuità di applicazione oppure la ripetizione può essere disabilitata per tale richiesta utilizzando l'API
disableReplay()per Java oOCIRequestDisableReplay()per Oracle Call Interface. Se non si desidera riprodurre tutti gli effetti collaterali, utilizzare Transparent Application Continuity.