Configurar Drivers para Disponibilidade Contínua

Este artigo descreve como configurar drivers para disponibilidade contínua.

Configurar Driver JDBC Thin

  1. Certifique-se de que todos os patches recomendados estejam aplicados no cliente. Consulte a observação do MOS Client Validation Matrix for Application Continuity (ID do Documento 2511448.1).

  2. Use o Cache de Instruções JDBC para Cobertura e Desempenho

    Para obter melhor cobertura e desempenho, use o cache de instruções do driver JDBC no lugar de um cache de instruções do servidor de aplicativos. Isso permite ao driver saber que as instruções estão fechadas e que a memória será liberada no final das solicitações.

    Para usar o cache de instruções JDBC, use a propriedade de conexão oracle.jdbc.implicitStatementCacheSize (OracleConnection.CONNECTION_PROPERTY_IMPLICIT_STATEMENT_CACHE_SIZE). O cache de instruções é por conexão. O valor do tamanho do cache corresponde ao seu número de open_cursors. Por exemplo:

    oracle.jdbc.implicitStatementCacheSize=nnn em que nnn geralmente está entre 10 e 100 e é igual ao número de cursores abertos que seu aplicativo mantém.

  3. Ajuste o Coletor de Lixo

    Para muitos aplicativos, o ajuste padrão do Coletor de Lixo é suficiente. Para aplicativos que retornam e mantêm grandes volumes de dados, você pode usar valores mais altos, como 2 GB ou mais. Por exemplo:

    java -Xms3072m -Xmx3072m 

    É recomendável definir a alocação de memória para o tamanho de heap Java inicial (ms) e o tamanho máximo de heap (mx) para o mesmo valor. Isso impede o uso de recursos do sistema no crescimento e na redução do heap de memória.

  4. Classes Concretas JDBC

    Para aplicativos JDBC, a Oracle não oferece suporte a classes concretas oracle.sql BLOB, CLOB, BFILE, OPAQUE, ARRAY, STRUCT ou ORADATA obsoletas. (Consulte a nota do MOS 1364193.1, New JDBC Interfaces). Use ORAchk -acchk no cliente para saber se um aplicativo é aprovado. A lista de classes concretas restritas para o Driver de Repetição JDBC é reduzida para o seguinte, começando com a versão 18c do driver JDBC thin da Oracle e mais recentes: oracle.sql.OPAQUE, oracle.sql.STRUCT, oracle.sql.ANYDATA

  5. Configurar FCF (Fast Connection Failover)

    Isso corresponde à ativação da inscrição para eventos FAN.

    Para drivers de cliente 12c e mais recentes:

    • Use o URL recomendado para ons automático
    • Verifique se o arquivo ons.jar (mais os jars WALLET opcionais, osdt_cert.jar, osdt_core.jar, oraclepki.jar) estão no CLASSPATH
    • Defina a propriedade do pool ou do driver fastConnectionFailoverEnabled=true
    • UCP (recomendado) ou pools de conexão de terceiros
    • Abra a porta 6200 para ONS (6200 é a porta padrão; outra porta pode ter sido escolhida)

    Para drivers de cliente anteriores à versão 12c, use os endereços fornecidos:

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

Configurar Driver do OCI (Oracle Call Interface)

  1. Certifique-se de que todos os patches recomendados estejam aplicados no cliente. Consulte a Observação do MOS Client Validation Matrix for Application Continuity (ID do Documento 251148.1).

  2. Substitua OCIStmtPrepare por OCIStmtPrepare2. A função OCIStmtPrepare() tornou-se obsoleta desde a versão 12.2. Todos os aplicativos devem usar OCIStmtPrepare2(). TAC e AC permitem OCIStmtPrepare, mas não reproduzem esta instrução.

  3. Para usar o FAN para aplicativos baseados no OCI, faça o seguinte:

    • aq_ha_notifications é predefinido nos serviços
    • Use a String de Conexão recomendada para ons automático
    • Defina auto_config, events e wallet_location (opcional) no arquivo oraaccess.xml, conforme descrito em Configurar Clientes para FAN Incluindo Wallets Opcionais.
    • Vincular o aplicativo à biblioteca de threads do cliente S/O
    • Abra a porta 6200 para ONS (6200 é a porta padrão; outra porta pode ter sido escolhida). Para drivers de cliente anteriores à versão 12c, use os endereços fornecidos em oraccess.xml.

Configurar Driver de Provedor Não Gerenciado do ODP.NET

  1. Certifique-se de que todos os patches recomendados estejam aplicados no cliente. Consulte a Observação do MOS Client Validation Matrix for Application Continuity (ID do Documento 251148.1).

  2. Para usar o FAN para aplicativos baseados no Oracle Call Interface, faça o seguinte:

    • aq_ha_notifications é predefinido nos serviços
    • Use a String de Conexão recomendada para ons automático
    • Defina onsConfig e wallet_location (opcional) no oraaccess.xml, conforme descrito em Configurar Clientes para FAN Incluindo Wallets Opcionais.
    • Abra a porta 6200 para ONS (6200 é a porta padrão; outra porta pode ter sido escolhida)
    • Defina o FAN, na string de conexão: "user id=oracle; password=oracle; data source=HA; pooling=true; HA events=true;".
    • (opcional) Defina o Balanceamento de Carga de Runtime, também na string de conexão: "user id=oracle; password=oracle; data source=HA; pooling=true; HA events=true; load balancing=true;".

Ativar Atributos de Serviço para Failover

A Continuidade Transparente de Aplicativos é ativada por padrão para os serviços predefinidos tp_tls, tp, tpurgent_tls e tpurgent; portanto, você não precisará fazer nada se estiver usando um deles. Além disso, para eles, o valor DEFAULT para FAILOVER_RESTORE é AUTO.

Você pode alterar o tipo de failover oferecido em seu serviço usando o pacote DBMS_APP_CONT_ADMIN. Use essa API para ativar a Continuidade de Aplicativos, a Continuidade Transparente de Aplicativos ou o TAF (Transparent Application Failover), ou para desativar o failover completamente. As novas sessões usarão o novo tipo de failover. Você deve ser um administrador para usar esses procedimentos.

Para ativar a Continuidade Transparente de Aplicativos para um serviço:

execute DBMS_APP_CONT_ADMIN.ENABLE_TAC('HIGH');

Para ativar a Continuidade de Aplicativos para um serviço:

execute DBMS_APP_CONT_ADMIN.ENABLE_AC('TPURGENT');

Para ativar a instrução TAF SELECT para um serviço:

execute DBMS_APP_CONT_ADMIN.ENABLE_TAF('LOW');

Para ativar a instrução TAF BASIC para um serviço:

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

Para desativar o failover para um serviço:

execute DBMS_APP_CONT_ADMIN.DISABLE_FAILOVER('HIGH');

Se quiser usar o TAF sem modificar os serviços, use a configuração mais antiga do cliente para o TAF em sua string de conexão:

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

Configurar Atributos de Serviço para Manutenção

Quando a manutenção planejada começar, as sessões que precisam ser drenadas serão marcadas para serem drenadas. As sessões ociosas são liberadas gradualmente. As sessões ativas são drenadas quando o trabalho executado nessa sessão é concluído. A drenagem de sessões está em amplo uso com os pools de conexão e camadas intermediárias da Oracle configurados para o FAN (Fast Application Notification). A partir do Oracle Database 18c, o próprio banco de dados drena sessões quando os bancos de dados são interrompidos ou realocados. A drenagem é sempre a melhor solução para ocultar a manutenção planejada.

Soluções de failover, como Continuidade do Aplicativo, são o fallback quando o trabalho não é drenado no tempo alocado.

Um timeout de drenagem, em segundos, e uma opção de interrupção podem ser definidos em um serviço usando o pacote DBMS_APP_CONT_ADMIN. Você deve ser um administrador para usar esses procedimentos.

Para ajustar o timeout de drenagem para 600 segundos e definir a opção de interrupção como IMMEDIATE:

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

Para ajustar somente o timeout de drenagem:

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

Configurar Clientes para FAN Incluindo Wallets Opcionais

A autenticação baseada em wallet é uma opção para FAN ao usar o Autonomous Database. Use a mesma wallet da conexão TNS.

Para Aplicativos JDBC

  1. Certifique-se de que os seguintes arquivos jar estejam presentes no CLASSPATH do aplicativo:

    (ons.jar, osdt_cert.jar, osdt_core.jar, oraclepki.jar) 
  2. Especifique a wallet para FAN de uma das seguintes maneiras:

    • Para usar o ONS configurado automaticamente com wallets, defina as seguintes propriedades do sistema Java:

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

      Observe que elas não podem ser definidas por pool ou por conexão.

    • Para definir explicitamente o ONS, faça o seguinte:

      • Defina explicitamente o uso de um arquivo de Configuração XML UCP. Por exemplo:

        <!--?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>
      • Defina programaticamente de dentro do UCP, usando uma chamada para setONSConfiguration(), por exemplo:

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

Para Aplicativos do Oracle Call Interface (OCI) Usando o Oracle Driver Versão 12.2 ou mais recente

Adicione o seguinte à seção <default_parameters> do arquivo 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>

O caminho <wallet_location> deve ser o nome do diretório que contém a wallet.

Outros parâmetros podem ser definidos na seção ons de oraaccess.xml, incluindo <hosts>, <max_connections> e <subscription_wait_timeout>.

Os drivers que oferecem suporte a controles de configuração de evento nativo podem omitir a seção <events> e usar a definição do driver.

Por padrão, as conexões serão estabelecidas com o banco de dados mesmo que o ONS falhe. Se você preferir que as conexões falhem nesse cenário, poderá adicionar uma seção ao mesmo nível de <events> e <ons>:

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

Coloque o arquivo oraaccess.xml no mesmo diretório dos arquivos de rede tnsnames.ora e sqlnet.ora. Por exemplo, ao usar o Oracle Instant Client, esses arquivos podem estar no diretório padrão network/admin. Como alternativa, todos os arquivos de configuração de rede podem ser colocados em outro diretório acessível. Em seguida, defina a variável de ambiente TNS_ADMIN com esse nome de diretório.

Provedor Gerenciado ODP.Net

Use o arquivo application.config para especificar a configuração do ONS e a localização da wallet. Por exemplo:

<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>