Código de disponibilidad continua
Las aplicaciones logran una disponibilidad continua cuando el mantenimiento planificado, las interrupciones no planificadas y los desequilibrios de carga de la base de datos están ocultos de la aplicación. Una combinación de las mejores prácticas de la aplicación, la configuración sencilla y Oracle Autonomous Database garantizan que sus aplicaciones estén disponibles de forma continuada.
El mejor enfoque para ocultar las actividades de mantenimiento planificadas de sus aplicaciones es vaciar de forma transparente el trabajo de cada ubicación de carga de trabajo de la base de datos antes que la ventana de mantenimiento de esa ubicación de carga de trabajo. Los pools de conexiones y los niveles intermedios de Oracle, incluidos WebLogic Server, Oracle Universal Connection Pool (UCP), el pool de sesiones de OCI y el proveedor no gestionado de ODP.NET, tienen constancia de Fast Application Notification (FAN) y, por lo tanto, reciben una notificación antes de que se programe que se muevan los servicios de base de datos para permitir el drenaje de trabajo controlado antes del mantenimiento. La notificación FAN dispara automáticamente el cierre de conexiones inactivas, la apertura de nuevas conexiones en la nueva ubicación del servicio y permite un tiempo configurable para que el trabajo activo se complete en la ubicación del servicio que se va a cerrar en breve. Los principales niveles intermedios de JDBC de terceros, como IBM WebSphere, permiten el mismo comportamiento cuando se configuran con UCP. Para aplicaciones basadas en JDBC que no pueden utilizar UCP, Oracle proporciona soluciones con controladores de Oracle y pruebas de conexión.
Para ocultar interrupciones no planificadas resultantes de un fallo de comunicación o componente, Oracle proporciona:
-
Notificación. FAN es el primer paso para ocultar interrupciones. FAN notifica a los clientes y los retira de su espera de red actual cuando se produce una interrupción. Esto evita el estancamiento de las aplicaciones para largas esperas de red. Es importante destacar que FAN también llama al reequilibrio de sesiones cuando los servicios vuelven a estar disponibles.
-
Recuperación. Una vez que se notifica al cliente, la continuidad de aplicaciones transparente (TAC) o la continuidad de aplicaciones (AC) reestablece una conexión a una nueva ubicación de carga de trabajo (otra instancia de base de datos en la configuración de Real Application Clusters (RAC) que ejecuta la base de datos) y vuelve a reproducir el trabajo en curso (no confirmado) cuando es posible. Al reproducir el trabajo en curso en la nueva ubicación, la aplicación puede seguir ejecutándose sin saber que se ha producido un fallo.
TAC o AC también se ejecuta durante el mantenimiento planificado para las sesiones que no se vacían (completan la operación de base de datos actual) durante el intervalo de vaciado asignado.
Lista de comprobación de configuración de la aplicación
Para que la aplicación esté disponible continuamente, siga estas directrices:
- Conexión mediante servicios de base de datos
- Configuración de una cadena de conexión para alta disponibilidad
- Uso de Fast Application Notification (FAN)
- Uso de prácticas recomendadas para permitir el vaciado
- Activación de la continuidad de aplicaciones transparente (TAC) o la continuidad de aplicaciones (AC).
Sugerencia:
Consulte el Informe técnico sobre disponibilidad continua para aplicaciones en ATP-Direct para conocer las mejores prácticas de implantación de disponibilidad continua para aplicaciones que utilizan una instancia de Autonomous Database.Conexión mediante servicios de base de datos
Los servicios de base de datos proporcionan transparencia para la infraestructura subyacente: FAN, los datos de conexión, la continuidad de aplicaciones transparente (TAC), la continuidad de aplicaciones (AC), el switchover, los grupos de consumidores y muchas otras funciones y operaciones se basan en el uso de los servicios.
Autonomous Database on Dedicated Exadata Infrastructure ofrece varios pares de servicios de base de datos predefinidos entre los que elegir, como se describe en Nombres de servicio de base de datos predefinidos para bases de datos autónomas. Todos proporcionan FAN y vaciado, y los dos pares de procesamiento de transacciones tienen activado TAC por defecto. Hay una API disponible para cambiar la configuración de TAC o AC en todos los servicios predefinidos (consulte Activación de atributos de servicio para failover).
Configuración de una cadena de conexión para alta disponibilidad
Oracle recomienda la configuración de cadena de conexión que se muestra a continuación al conectarse a Oracle Autonomous Database. Las cadenas de conexión embebidas en el archivo tnsnames.ora
proporcionado por Oracle se configuran de esta manera. No utilice la nomenclatura de conexión sencilla en el cliente porque dichas conexiones no tienen capacidades de alta disponibilidad.
Utilice este TNS para todos los clientes de Oracle versión 12.2 o superior:
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)))
Utilice lo siguiente para conexiones JDBC con la versión 12.1 o anterior del controlador de Oracle
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 de FAN (Fast Application Notification)
FAN proporciona inmediatamente una notificación a una aplicación en caso de interrupción o reanudación del servicio. Sin FAN, las aplicaciones pueden bloquearse en el timeout de TCP/IP tras fallos de hardware y red, y omitir el reequilibrio cuando los recursos se reanuden. Todos los pools de Oracle y todos los servidores de aplicaciones de Oracle utilizan FAN. Los servidores de aplicaciones JAVA de terceros pueden utilizar UCP para activar FAN.
No es necesario ningún cambio en la aplicación para utilizar FAN. Estos son solo cambios de configuración.
Para un servicio continuo durante el mantenimiento planificado, utilice FAN con:
- Pools de Oracle, o bien
- UCP con servidores de aplicaciones JDBC de terceros, o bien
- Los controladores de cliente de Oracle más recientes
Para un servicio continuo durante interrupciones no planificadas, utilice FAN con:
- Continuidad de aplicaciones transparente, o bien
- Continuidad de aplicaciones
Cobertura de FAN
Los eventos de FAN se integran con:
- Oracle Fusion Middleware y Oracle WebLogic Server
- Oracle Data Guard Broker
- Oracle JDBC Universal Connection Pool o controlador para las interfaces JDBC Thin y Oracle Call Interface (OCI)
- Pool de conexiones ODP.NET para proveedores gestionados y no gestionados
- Oracle Tuxedo
- SQL*Plus
- Controladores de Oracle Database para lenguajes como Python, Node.js y PHP
- Global Data Services
- Servidores de aplicaciones JDBC de terceros que utilizan Oracle JDBC Universal Connection Pool
- Listeners
Para activar FAN en el cliente
Utilice el alias TNS que se muestra en Configuración de una cadena de conexión para alta disponibilidad. Esta cadena de conexión se utiliza para configurar automáticamente la suscripción de Oracle Notification Service (ONS) en el cliente para la recepción de evento de FAN al utilizar un controlador de cliente de Oracle Database 12c o posterior. ONS proporciona una ruta de comunicación segura entre el nivel de base de datos y el nivel de cliente que permite notificar al cliente la disponibilidad del servicio (la parada o el inicio de los componentes), así como un consejo de equilibrio de carga de tiempo de ejecución para una mejor colocación durante el funcionamiento normal.
En función del cliente, active FAN en las propiedades de configuración de la aplicación de la siguiente manera:
-
Universal Connection Pool o controlador JDBC Thin (a partir de la versión 12.2)
Defina la propiedad
FastConnectionFailoverEnabled
. -
WebLogic Active GridLink para Oracle
RAC FAN y Fast Connection Failover están activados por defecto.
-
Oracle WebLogic Server, IBM WebSphere, IBM Liberty, Apache Tomcat, Red Hat WildFly (JBoss), aplicaciones JDBC
Utilice Universal Connection Pool como sustitución del pool de conexiones.
-
Clientes ODP.Net (proveedores gestionados y no gestionados)
Defina
"HA events = true;pooling=true"
en la cadena de conexión si utiliza ODP.Net 12.1 o anterior. -
Clientes de Oracle Call Interface (OCI) y controladores basados en OCI
Los clientes de Oracle Call Interface (OCI) sin configuración nativa pueden utilizar un archivo
oraacces.xml
y definirevents
entrue
.Python, Node.js y PHP tienen opciones nativas. En Python y Node.js, puede definir un modo de eventos al crear un pool de conexiones. En PHP, edite
php.ini
, agregue la entradaoci8.events=on
. -
SQL*Plus
FAN está activado por defecto.
Los servicios de base de datos predefinidos ofrecen conexiones TCPS que utilizan autenticación basada en cartera de TLS. Según el tipo de aplicación (JDBC u Oracle Call Interface), la configuración de la cartera debe seguir reglas concretas, como se describe en Configuración de clientes para FAN, incluidas carteras opcionales.
Uso de prácticas recomendadas para permitir el vaciado
Las mejores prácticas para el uso de aplicaciones consisten en desproteger las conexiones durante el tiempo que se necesiten y, a continuación, volver a protegerlas en el pool cuando se complete la acción actual. Esto es importante para lograr un buen rendimiento, para el reequilibrio del trabajo en tiempo de ejecución y durante las ventanas de mantenimiento para el vaciado del trabajo.
Oracle recomienda utilizar un pool de conexiones de Oracle con detección de FAN para ocultar el mantenimiento planificado. No tiene ningún impacto en los usuarios cuando su aplicación utiliza un pool de Oracle con FAN y devuelve las conexiones al pool entre solicitudes. No es necesario realizar ningún cambio en la aplicación para utilizar FAN. Cuando un pool de conexiones de Oracle recibe el evento de FAN para el tiempo de inactividad planificado, marca todas las conexiones de la instancia que se van a vaciar. De inmediato se cierran las conexiones protegidas para que no se vuelvan a utilizar. A medida que se devuelven las conexiones en uso al pool, estas se cierran. Esto permite que todas las conexiones se cierren correctamente a lo largo del tiempo.
Si utiliza un servidor de aplicaciones basado en Java de terceros, el método más eficaz para lograr el vaciado y el failover es sustituir el origen de datos de pool por UCP. Muchos servidores de aplicaciones soportan este enfoque, incluidos Oracle WebLogic Server, IBM WebSphere, IBM Liberty, Apache Tomcat, Red Hat WildFly (JBoss), Spring e Hibernate, entre otros. Los documentos técnicos de Oracle y otros proveedores, como IBM, describen cómo utilizar UCP con estos servidores de aplicaciones. El uso de UCP como origen de datos permite utilizar funciones de UCP, como Fast Connection Failover, el equilibrio de carga de tiempo de ejecución, la continuidad de aplicaciones y la continuidad de aplicaciones transparente con certificación completa.
Activación de la continuidad de aplicaciones transparente (TAC) o la continuidad de aplicaciones (AC)
TAC realiza un seguimiento y registra de forma transparente la sesión y el estado transaccional para que una sesión de base de datos se pueda recuperar tras interrupciones recuperables. Los dos pares de procesamientos de transacciones de servicios de base de datos predefinidos tienen TAC activado por defecto.
AC se puede personalizar, lo que le permite optar por reproducir los efectos secundarios o agregar devoluciones de llamada complejas en el failover que TAC no permite. Utilice AC si usa controladores de Oracle 12c (JDBC-thin u Oracle Call Interface), o desea personalizar con efectos secundarios o devoluciones de llamada, o tiene una aplicación que utiliza un estado, como las tablas temporales de duración de sesión, y no realiza tareas de limpieza entre solicitudes.
pasos para utilizar Transparent Application Continuity
-
Si necesita activar la continuidad de aplicaciones transparente en el servicio de base de datos que va a utilizar, consulte Activación de atributos de servicio para failover.
-
Utilice uno de los siguientes clientes soportados.
Oracle recomienda utilizar los controladores de cliente más recientes. Los controladores de cliente de Oracle Database 19c y posteriores proporcionan soporte completo para TAC.
- Oracle JDBC Replay Driver 18c o posterior. Se trata de una función de controlador JDBC que se proporciona con Oracle Database 18c para la continuidad de aplicaciones.
- Oracle Universal Connection Pool (UCP) 18c o posterior con Oracle JDBC Replay Driver 18c o posterior.
- Oracle WebLogic Server Active GridLink o servidores de aplicaciones JDBC de terceros que utilicen UCP con Oracle JDBC Replay Driver 18c o posterior.
- Pools de conexiones Java o aplicaciones Java independientes que utilicen Oracle JDBC Replay Driver 18c o posterior.
- Oracle Call Interface Session Pool 19c o posterior.
- SQL*Plus 19c (19.3) o posterior
- ODP.NET agrupado, controlador no gestionado 18c o posterior (
"Pooling=true"
por defecto en 12.2 y versiones posteriores). - Aplicaciones basadas en Oracle Call Interface que utilicen un controlador OCI 19c o posterior.
-
Devolución de conexiones al pool de conexiones.
No es necesario realizar ningún cambio en la aplicación para identificar límites de solicitud si la aplicación utiliza conexiones:
- de pools de conexiones de Oracle, o
- de Oracle JDBC Replay Driver 18c o posterior, o
- de aplicaciones basadas en Oracle Call Interface con la versión 19c o posterior
Al utilizar pools de conexiones, la aplicación debe devolver la conexión al pool al completar cada solicitud. Oracle recomienda que una aplicación bloquee una conexión solo durante el tiempo que la necesite. Retener una conexión cuando no está en uso no es una buena práctica. La continuidad de aplicaciones transparente con los controladores indicados también detecta dónde se pueden agregar límites y establece sus propios límites.
-
Uso de
FAILOVER_RESTORE
Al activar la continuidad de aplicaciones transparente, se restauran automáticamente los estados de sesión predefinidos. Si necesita estados de sesión predefinidos además del juego estándar, puede registrar una devolución de llamada o una etiqueta UCP para restaurar estos estados. Si necesita estados de sesión complejos, como tablas temporales o
SYS_CONTEXT
, restaurados, utilice la continuidad de aplicaciones, que ofrece esta flexibilidad. -
Activación del uso modificable en la aplicación
Las funciones modificables son funciones que pueden devolver un nuevo valor cada vez que se ejecutan. Se proporciona soporte para mantener los resultados originales para
SYSDATE
,SYSTIMESTAMP
,SYS_GUID
y
. La continuidad de aplicaciones 19c y las versiones posteriores mantienen los modificables automáticamente para SQL mediantesequence.NEXTVAL
KEEP
. Si la aplicación utiliza funciones modificables o es sensible a ellas, un DBA debe emitir el privilegioGRANT KEEP
. Cuando se otorga el privilegioKEEP
, la reproducción aplica el resultado de la función original en la reproducción. Por ejemplo:SQL> GRANT [KEEP DATE TIME | KEEP SYSGUID] … TO USER
SQL> GRANT KEEP SEQUENCE mySequence TO myUser ON sequence.object
-
Efectos secundarios desactivados
Un efecto secundario es una acción externa, como el envío de correo, la transferencia de archivos o el uso de TCP. La continuidad de aplicaciones transparente detecta los efectos secundarios y no los reproduce. Si desea reproducir los efectos secundarios, utilice la continuidad de aplicaciones, que permite esta flexibilidad adicional.
pasos para el uso de la continuidad de aplicaciones
-
Si necesita activar la continuidad de aplicaciones en el servicio de base de datos que está utilizando, consulte Activación de atributos de servicio para failover.
-
Utilice uno de los siguientes clientes soportados.
- Oracle JDBC Replay Driver 12c o posterior. Se trata de una función de controlador JDBC proporcionada con Oracle Database 12c para la continuidad de aplicaciones.
- Oracle Universal Connection Pool (UCP) 12c o posterior con Oracle JDBC Replay Driver 12c o posterior.
- Oracle WebLogic Server Active GridLink o servidores de aplicaciones JDBC de terceros que utilicen UCP con Oracle JDBC Replay Driver 18c o posterior.
- Pools de conexiones Java o aplicaciones Java independientes que utilicen Oracle JDBC Replay Driver 12c o posterior con límites de solicitud u origen de datos de pool.
- Aplicaciones y controladores de lenguaje que utilicen Oracle Call Interface Session Pool 12c versión 2 o posterior.
- SQL*Plus 19.3 o posterior.
- Controlador no gestionado ODP.NET en pool 12c versión 2 o posterior (valor por defecto
"Pooling=true";"Application Continuity=true"
en la versión 12.2 y posteriores)
-
Devolución de conexiones al pool de conexiones.
No es necesario realizar ningún cambio en la aplicación para identificar límites de solicitud si la aplicación utiliza un pool de conexiones de Oracle o un pool JDBC de terceros que soporta límites de solicitud. Se recomienda utilizar un pool de Oracle y devolver las conexiones a ese pool entre solicitudes. Oracle recomienda que una aplicación bloquee una conexión solo durante el tiempo que la necesite. Retener una conexión cuando no está en uso no es una buena práctica y evitará un mantenimiento planificado transparente.
-
Uso de
FAILOVER_RESTORE
La mayoría de los estados comunes se restauran automáticamente con
FAILOVER_RESTORE=LEVEL1
. Si la aplicación configura previamente los estados de sesión además del juego estándar, debe registrar una devolución de llamada o una etiqueta UCP para restaurar estos estados. DefinaFAILOVER_RESTORE=LEVEL1
en el servicio y utilice:- La devolución de llamada de inicialización de conexión para Java o la devolución de llamada de TAF (anterior) para Oracle Call Interface, o
- El etiquetado de conexión de Universal Connection Pool o de WebLogic Server
-
Activación del uso modificable en la aplicación
Las funciones modificables son funciones que pueden devolver un nuevo valor cada vez que se ejecutan. Se proporciona soporte para mantener los resultados originales para
SYSDATE
,SYSTIMESTAMP
,SYS_GUID
y
. La continuidad de aplicaciones 19c y las versiones posteriores mantienen los modificables automáticamente para SQL mediantesequence.NEXTVAL
KEEP
, por lo que no es necesario realizar ninguna acción. Si necesita modificables para PL/SQL, un DBA debe emitir el privilegioGRANT KEEP
. Cuando se otorga el privilegioKEEP
, la reproducción aplica el resultado de la función original en la reproducción. Por ejemplo:SQL> GRANT [KEEP DATE TIME | KEEP SYSGUID] … TO USER
SQL> GRANT KEEP SEQUENCE mySequence TO myUser ON sequence.object
-
Decidir si desea reproducir efectos secundarios
Un efecto secundario es una acción externa, como el envío de correo, la transferencia de archivos o el uso de TCP. Con la continuidad de aplicaciones, se reproducen los efectos secundarios a menos que la aplicación especifique lo contrario. Si una solicitud tiene una acción externa que no se debe reproducir, esa solicitud puede utilizar una conexión que no tenga activada la continuidad de aplicaciones, o bien se puede desactivar la reproducción para esa solicitud mediante la API
disableReplay()
para Java oOCIRequestDisableReplay()
para Oracle Call Interface. Si no desea reproducir todos los efectos secundarios, utilice la continuidad de aplicaciones transparente.