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 mantido pelo seu aplicativo.

  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('databaseid_high.atp.oraclecloud.com');

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

execute DBMS_APP_CONT_ADMIN.ENABLE_AC('databaseid_tpurgent.atp.oraclecloud.com');

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

execute DBMS_APP_CONT_ADMIN.ENABLE_TAF('databaseid_low.atp.oraclecloud.com');

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

execute DBMS_APP_CONT_ADMIN.ENABLE_TAF('databaseid_medium.atp.oraclecloud.com', 'SESSION');

Para desativar o failover para um serviço:

execute DBMS_APP_CONT_ADMIN.DISABLE_FAILOVER('databaseid_high.atp.oraclecloud.com');

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('databaseid_high.atp.oraclecloud.com', 600, 'IMMEDIATE' );

Para ajustar somente o timeout de drenagem:

execute DBMS_APP_CONT_ADMIN.SET_DRAINING('databaseid_tpurgent.atp.oraclecloud.com', 600);

O TAC (Transparent Application Continuity, Continuidade Transparente de Aplicativos) é uma opção de failover definida usando o procedimento DBMS_APP_CONT_ADMIN.ENABLE_TAC. O procedimento ENABLE_TAC utiliza três parâmetros: SERVICE NAME é o nome do serviço a ser alterado, FAILOVER_RESTORE, definido como AUTO para selecionar TAC (Transparent Application Continuity, Continuidade Transparente de Aplicativos) e REPLAY_INITIATION_TIMEOUT é o timeout de repetição que especifica quantos segundos após o envio de uma solicitação para permitir que essa solicitação seja repetida.

Por exemplo, como usuário ADMIN, para ativar a Continuidade Transparente de Aplicativos (TAC) para o serviço TP com o timeout de repetição definido como 20 minutos:

execute DBMS_APP_CONT_ADMIN.ENABLE_TAC('databaseid_tp.atp.oraclecloud.com', 'AUTO', 1200);

A AC (Application Continuity) é uma opção de failover definida usando o procedimento DBMS_APP_CONT_ADMIN.ENABLE_AC. O procedimento ENABLE_AC utiliza três parâmetros: SERVICE NAME é o nome do serviço a ser alterado, FAILOVER_RESTORE, definido como LEVEL1 para selecionar a Continuidade do Aplicativo (AC) e REPLAY_INITIATION_TIMEOUT, é o timeout de repetição que especifica quantos segundos após o envio de uma solicitação para permitir que essa solicitação seja repetida.

Por exemplo, como usuário ADMIN, para ativar a Continuidade do Aplicativo para o serviço TPURGENT:

execute DBMS_APP_CONT_ADMIN.ENABLE_AC('databaseid_tpurgent.adb.oraclecloud.com', 'LEVEL1', 600);

Configurar Clientes para FAN Incluindo Wallets Opcionais

A autenticação baseada na wallet é uma opção para o FAN ao usar o Autonomous AI 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:

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

Conteúdo Relacionado