Configuración de controladores para una disponibilidad continua

En este artículo se describe cómo configurar controladores para una disponibilidad continua.

Configuración del controlador JDBC Thin

  1. Asegúrese de que todos los parches recomendados están aplicados en el cliente. Consulte la nota de MOS sobre la matriz de validación del cliente para la continuidad de aplicaciones (ID de documento 2511448.1).

  2. Uso de la caché de sentencias JDBC para cobertura y rendimiento

    Para obtener la mejor cobertura y rendimiento, utilice la caché de sentencias del controlador JDBC en lugar de una caché de sentencias del servidor de aplicaciones. Esto permite al controlador saber que las sentencias se cierran y la memoria que se va a liberar al final de las solicitudes.

    Para utilizar la caché de sentencias JDBC, utilice la propiedad de conexión oracle.jdbc.implicitStatementCacheSize (OracleConnection.CONNECTION_PROPERTY_IMPLICIT_STATEMENT_CACHE_SIZE). La caché de sentencias es por conexión. El valor del tamaño de la caché coincide con el número de open_cursors. Por ejemplo:

    oracle.jdbc.implicitStatementCacheSize=nnn donde nnn está normalmente entre 10 y 100 y es igual al número de cursores abiertos que mantiene la aplicación.

  3. Ajuste del recopilador de elementos no utilizados

    Para muchas aplicaciones, el ajuste por defecto del recopilador de elementos no utilizados es suficiente. Para las aplicaciones que devuelven y mantienen grandes cantidades de datos, puede utilizar valores más altos, como 2 GB o más. Por ejemplo:

    java -Xms3072m -Xmx3072m 

    Se recomienda definir la asignación de memoria para el tamaño inicial de montón de Java (ms) y el tamaño máximo de montón (mx) en el mismo valor. Esto evita el uso de recursos del sistema al aumentar y reducir el montón de la memoria.

  4. Clases concretas de JDBC

    En el caso de las aplicaciones JDBC, Oracle no soporta las clases concretas BLOB, CLOB, BFILE, OPAQUE, ARRAY, STRUCT u ORADATA en desuso de oracle.sql. (Consulte la nota de MOS 1364193.1 sobre las nuevas interfaces de JDBC). Utilice ORAchk -acchk en el cliente para saber si es correcta una aplicación. La lista de clases concretas restringidas para el controlador de reproducción JDBC se reduce a lo siguiente, empezando por el controlador JDBC Thin de Oracle versión 18c y posteriores: oracle.sql.OPAQUE, oracle.sql.STRUCT, oracle.sql.ANYDATA

  5. Configuración de Fast Connection Failover (FCF)

    Corresponde a la activación de la suscripción a eventos de FAN.

    Para controladores de cliente 12c y posteriores:

    • Utilice la URL recomendada para ONS automático
    • Compruebe que ons.jar (además de los WALLET opcionales osdt_cert.jar, osdt_core.jar, oraclepki.jar) están en CLASSPATH
    • Defina la propiedad de pool o controlador fastConnectionFailoverEnabled=true
    • UCP (recomendado) o pools de conexiones de terceros
    • Abra el puerto 6200 para ONS (6200 es el puerto por defecto, puede que se haya elegido otro puerto)

    Para los controladores de cliente anteriores a 12c, utilice las direcciones proporcionadas:

    • Defina oracle.ons.nodes =XXX01:6200, XXX02:6200, XXX03:6200

Configuración del controlador OCI (Oracle Call Interface)

  1. Asegúrese de que todos los parches recomendados están aplicados en el cliente. Consulte la nota de MOS sobre la matriz de validación del cliente para la continuidad de aplicaciones (ID de documento 251148.1).

  2. Sustituya OCIStmtPrepare por OCIStmtPrepare2. OCIStmtPrepare() está en desuso desde la versión 12.2. Todas las aplicaciones deben utilizar OCIStmtPrepare2(). TAC y AC permiten OCIStmtPrepare, pero no reproducen esta sentencia.

  3. Para utilizar FAN para aplicaciones basadas en OCI, realice lo siguiente:

    • aq_ha_notifications está predefinido en los servicios
    • Utilice la cadena de conexión recomendada para ONS automático
    • Defina auto_config, los eventos y wallet_location (opcional) en oraaccess.xml, como se describe en Configuración de clientes para FAN, incluidas carteras opcionales.
    • Enlace de la aplicación con la biblioteca de threads del cliente del sistema operativo
    • Abra el puerto 6200 para ONS (6200 es el puerto por defecto, puede que se haya elegido otro puerto). Para los controladores de cliente anteriores a 12c, utilice las direcciones proporcionadas en oraccess.xml.

Configuración del controlador de proveedor no gestionado de ODP.NET

  1. Asegúrese de que todos los parches recomendados están aplicados en el cliente. Consulte la nota de MOS sobre la matriz de validación del cliente para la continuidad de aplicaciones (ID de documento 251148.1).

  2. Para utilizar FAN para aplicaciones basadas en Oracle Call Interface, realice lo siguiente:

    • aq_ha_notifications está predefinido en los servicios
    • Utilice la cadena de conexión recomendada para ONS automático
    • Defina onsConfig y wallet_location (opcional) en oraaccess.xml, como se describe en Configuración de clientes para FAN, incluidas carteras opcionales.
    • Abra el puerto 6200 para ONS (6200 es el puerto por defecto, puede que se haya elegido otro puerto)
    • Defina FAN en la cadena de conexión: "user id=oracle; password=oracle; data source=HA; pooling=true; HA events=true;".
    • (Opcional) Defina el equilibrio de carga de tiempo de ejecución, también en la cadena de conexión: "user id=oracle; password=oracle; data source=HA; pooling=true; HA events=true; load balancing=true;".

Activación de atributos de servicio para failover

La continuidad de aplicaciones transparente está activada por defecto para los servicios predefinidos tp_tls, tp, tpurgent_tls y tpurgent, por lo que no debe hacer nada si utiliza uno de ellos. Además, para ellos, el valor DEFAULT para FAILOVER_RESTORE es AUTO.

Puede cambiar el tipo de failover ofrecido en el servicio mediante el paquete DBMS_APP_CONT_ADMIN. Utilice esta API para activar la continuidad de aplicaciones, la continuidad de aplicaciones transparente o el failover de aplicaciones transparente (TAF), o para desactivar el failover por completo. Las nuevas sesiones utilizarán el nuevo tipo de failover. Debe ser administrador para utilizar estos procedimientos.

Para activar la continuidad de aplicaciones transparente para un servicio:

execute DBMS_APP_CONT_ADMIN.ENABLE_TAC('HIGH');

Para activar la continuidad de aplicaciones para un servicio:

execute DBMS_APP_CONT_ADMIN.ENABLE_AC('TPURGENT');

Para activar TAF SELECT para un servicio:

execute DBMS_APP_CONT_ADMIN.ENABLE_TAF('LOW');

Para activar TAF BASIC para un servicio:

execute DBMS_APP_CONT_ADMIN.ENABLE_TAF('MEDIUM', 'SESSION');

Para desactivar el failover para un servicio:

execute DBMS_APP_CONT_ADMIN.DISABLE_FAILOVER('HIGH');

Si desea utilizar TAF sin modificar los servicios, utilice la configuración anterior del cliente para TAF en la cadena de conexión:

(FAILOVER_MODE=(TYPE=select)(METHOD=basic)(OVERRIDE=TRUE)) 

Configuración de atributos de servicio para mantenimiento

Cuando se inicia el mantenimiento planificado, las sesiones que se deben vaciar se marcan para el vaciado. Las sesiones inactivas se liberan gradualmente. Las sesiones activas se vacían cuando se completa el trabajo que se ejecuta en esa sesión. El vaciado de sesiones se utiliza ampliamente con pools de conexiones y niveles intermedios de Oracle configurados para Fast Application Notification (FAN). A partir de Oracle Database 18c, la propia base de datos vacía las sesiones cuando se paran o reubican las bases de datos. El vaciado es siempre la mejor solución para ocultar el mantenimiento planificado.

Las soluciones de failover, como la continuidad de aplicaciones, se emplean como reserva cuando el trabajo no se vacía en el tiempo asignado.

Se puede definir un timeout de vaciado en segundos y una opción de parada en un servicio mediante el paquete DBMS_APP_CONT_ADMIN. Debe ser administrador para utilizar estos procedimientos.

Para ajustar el timeout de vaciado a 600 segundos y definir la opción de parada en IMMEDIATE:

execute DBMS_APP_CONT_ADMIN.SET_DRAINING('HIGH', 600, 'IMMEDIATE' );

Para ajustar solo el timeout de vaciado:

execute DBMS_APP_CONT_ADMIN.SET_DRAINING('TPURGENT', 600);

Configuración de clientes para FAN, incluidas carteras opcionales

La autenticación basada en carteras es una opción para FAN al utilizar Autonomous Database. Utilice la misma cartera que para la conexión TNS.

Para las aplicaciones JDBC

  1. Asegúrese de que los siguientes archivos jar están presentes en CLASSPATH de la aplicación:

    (ons.jar, osdt_cert.jar, osdt_core.jar, oraclepki.jar) 
  2. Especifique la cartera para FAN de una de las siguientes formas:

    • Para utilizar ONS configurado automáticamente con carteras, defina las siguientes propiedades del sistema Java:

      "-Doracle.ons.walletfile=/replace this with host path/onswallet"
      "-Doracle.ons.walletpassword=myONSWalletPassword"

      Tenga en cuenta que no se pueden definir por agrupación o por conexión.

    • Para definir ONS explícitamente, realice una de las siguientes acciones:

      • Defínalo explícitamente con un archivo de configuración XML de UCP. Por ejemplo:

        <!--?xml version="1.0" encoding="UTF-8"? -->
        <ucp-properties>
          <connection-pool
            connection-pool-name="UCP_pool1"
            user="dbuser"
            password="dbuserpasswd"
            connection-factory-class-name="oracle.jdbc.pool.OracleDataSource"
            initial-pool-size="10"
            min-pool-size="5"
            max-pool-size="15"
            validate-connection-on-borrow="true"
            connection-wait-timeout="900"
            max-connections-per-service="50"
            sql-for-validate-connection="select 1 from dual" 
            url="jdbc:oracle:thin:@(DESCRIPTION =(CONNECT_TIMEOUT= 120)(RETRY_COUNT=20) (RETRY_DELAY=3) (TRANSPORT_CONNECT_TIMEOUT=3)(ADDRESS_LIST =(LOAD_BALANCE=on)(ADDRESS = (PROTOCOL = TCP)(HOST=primary-scan)(PORT=1521)))(ADDRESS_LIST =(LOAD_BALANCE=on)(ADDRESS = (PROTOCOL = TCP)(HOST=standby-scan)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME = MY-SERVICE)))"
            fastConnectionFailoverEnabled="true" 
            onsConfiguration="nodes=primary-scanhost:6200,secondary-scanhost:6200\nwalletfile=/replace_with_host_path/onswallet\nwalletpassword=myWalletPassword">
          </connection-pool>
        </ucp-properties>
      • Defínalo mediante programación desde UCP mediante una llamada a setONSConfiguration(), por ejemplo:

        pds.setONSConfiguration("nodes=primary-scanhost:6200,secondary-scanhost:6200\nwalletfile=/replace_this_with_host_path/onswallet\nwalletpassword=myWalletPassword");

Para las aplicaciones de Oracle Call Interface (OCI) con Oracle Driver versión 12.2 o más recientes

Agregue lo siguiente a la sección <default_parameters> del archivo oraaccess.xml:

<default_parameters>
      (Other settings may be present in this section)
   <events>
      true
   </events>
   <ons>
      <auto_config>true</auto_config>
      <wallet_location>/my_path/onswallet</wallet_location>       
   </ons>
</default_parameters>

La ruta de acceso <wallet_location> debe ser el nombre del directorio que contiene la cartera.

Se pueden definir otros parámetros en la sección ons de oraaccess.xml, incluidos <hosts>, <max_connections> y <subscription_wait_timeout>.

Los controladores que soportan controles de configuración de eventos nativos pueden omitir la sección <events> y utilizar la configuración del controlador en su lugar.

Por defecto, las conexiones se establecerán en la base de datos incluso si falla el ONS. Si prefiere que las conexiones fallen en este escenario, puede agregar una sección al mismo nivel que <events> y <ons>:

<fan> 
   <subscription_failure_action> 
      error 
   </subscription_failure_action> 
</fan> 

Coloque el archivo oraaccess.xml en el mismo directorio que los archivos de red tnsnames.ora y sqlnet.ora. Por ejemplo, al utilizar Oracle Instant Client, estos archivos pueden estar en el directorio por defecto network/admin. De manera alternativa, todos los archivos de configuración de red se pueden colocar en otro directorio accesible. A continuación, defina la variable de entorno TNS_ADMIN en ese nombre de directorio.

Proveedor gestionado de ODP.Net

Utilice el archivo application.config para especificar la configuración de ONS y la ubicación de la cartera. Por ejemplo:

<oracle.manageddataaccess.client>
    <version number="*">
      <onsConfig mode="remote">
        <settings>
          <setting name="Protocol" value="TCPS" />
          <setting name="WALLET_LOCATION" value="C:\myPath\ONS_SSLWallet" />
        </settings>
        <ons database="atp01db">
          <add name="nodeList" value="racNode1:6205,racNode2:6205,racNode3:6205" />
        </ons>
      </onsConfig>
    </version>
</oracle.manageddataaccess.client>