Treiber für kontinuierliche Verfügbarkeit konfigurieren

In diesem Artikel wird beschrieben, wie Treiber für kontinuierliche Verfügbarkeit konfiguriert werden.

JDBC Thin-Treiber konfigurieren

  1. Stellen Sie sicher, dass alle empfohlenen Patches auf dem Client eingespielt wurden. Weitere Informationen finden Sie im MOS-Hinweis Client Validation Matrix for Application Continuity (Dok.-ID 2511448.1).

  2. JDBC-Anweisungscache für Abdeckung und Performance verwenden

    Um eine optimale Abdeckung und Performance zu erzielen, verwenden Sie den Anweisungscache des JDBC-Treibers anstelle des Anweisungscache eines Anwendungsservers. Dadurch wird der Treiber am Ende von Anforderungen darüber informiert, dass Anweisungen geschlossen sind und der Arbeitsspeicher freigegeben werden muss.

    Um den JDBC-Anweisungscache zu verwenden, verwenden Sie die Verbindungseigenschaft oracle.jdbc.implicitStatementCacheSize (OracleConnection.CONNECTION_PROPERTY_IMPLICIT_STATEMENT_CACHE_SIZE). Der Anweisungscache ist verbindungsabhängig. Der Wert für die Cachegröße entspricht der Anzahl von open_cursors. Beispiel:

    oracle.jdbc.implicitStatementCacheSize=nnn, wobei nnn in der Regel zwischen 10 und 100 liegt und der Anzahl der geöffneten Cursor in der Anwendung entspricht.

  3. Garbage Collector optimieren

    Für viele Anwendungen ist die standardmäßige Optimierung des Garbage Collectors ausreichend. Für Anwendungen, die große Datenmengen zurückgeben und aufbewahren, können Sie höhere Werte verwenden, z.B. 2 GB oder mehr. Beispiel:

    java -Xms3072m -Xmx3072m 

    Es wird empfohlen, die Arbeitsspeicherzuweisung für die anfängliche Java Heap-Größe (ms) und die maximale Heap-Größe (mx) auf denselben Wert zu setzen. Dadurch wird verhindert, dass Systemressourcen den Arbeitsspeicher-Heap vergrößern und verkleinern.

  4. Konkrete JDBC-Klassen

    Für JDBC-Anwendungen unterstützt Oracle nicht die veralteten konkreten oracle.sql-Klassen BLOB, CLOB, BFILE, OPAQUE, ARRAY, STRUCT oder ORADATA. (Siehe MOS-Hinweis 1364193.1, New JDBC Interfaces). Verwenden Sie ORAchk -acchk auf dem Client, um festzustellen, ob eine Anwendung erfolgreich ist. Die Liste der eingeschränkten konkreten Klassen für den JDBC-Replay-Treiber wird ab Oracle JDBC Thin-Treiber-Version 18c auf Folgende reduziert: oracle.sql.OPAQUE, oracle.sql.STRUCT, oracle.sql.ANYDATA.

  5. Fast Connection Failover (FCF) konfigurieren

    Dies entspricht der Aktivierung des Abonnements von FAN-Ereignissen.

    Für Clienttreiber 12c und höher:

    • Verwenden Sie die empfohlene URL für auto-ons.
    • Prüfen Sie, ob ons.jar (sowie optionale WALLET-JAR-Dateien, osdt_cert.jar, osdt_core.jar oder oraclepki.jar) im CLASSPATH enthalten sind.
    • Setzen Sie die Pool- oder Treibereigenschaft fastConnectionFailoverEnabled=true.
    • UCP (empfohlen) oder Drittanbieter-Verbindungspools
    • Öffnen Sie Port 6200 für ONS (6200 ist der Standardport, möglicherweise wurde ein anderer Port ausgewählt).

    Verwenden Sie für Clienttreiber vor 12c die angegebenen Adressen:

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

OCI-(Oracle Call Interface-)Treiber konfigurieren

  1. Stellen Sie sicher, dass alle empfohlenen Patches auf dem Client eingespielt wurden. Weitere Informationen finden Sie im MOS-Hinweis Client Validation Matrix for Application Continuity (Dok.-ID 251148.1).

  2. Ersetzen Sie OCIStmtPrepare durch OCIStmtPrepare2. OCIStmtPrepare() ist seit 12.2 veraltet. Alle Anwendungen müssen OCIStmtPrepare2() verwenden. TAC und AC lassen OCIStmtPrepare zu, geben diese Anweisung jedoch nicht wieder.

  3. So verwenden Sie FAN für OCI-basierte Anwendungen:

    • aq_ha_notifications ist für die Services voreingestellt.
    • Verwenden Sie die empfohlene Verbindungszeichenfolge für auto-ons.
    • Legen Sie auto_config, Ereignisse und wallet_location (optional) in oraaccess.xml fest, wie unter Clients für FAN mit optionalen Wallets konfigurieren beschrieben.
    • Verknüpfen Sie die Anwendung mit der BS-Clientthread-Library.
    • Öffnen Sie Port 6200 für ONS (6200 ist der Standardport, möglicherweise wurde ein anderer Port ausgewählt). Verwenden Sie für Clienttreiber vor 12c die in oraccess.xml angegebenen Adressen.

Treiber für nicht verwalteten ODP.NET-Provider konfigurieren

  1. Stellen Sie sicher, dass alle empfohlenen Patches auf dem Client eingespielt wurden. Weitere Informationen finden Sie im MOS-Hinweis Client Validation Matrix for Application Continuity (Dok.-ID 251148.1).

  2. So verwenden Sie FAN für Oracle Call Interface-basierte Anwendungen:

    • aq_ha_notifications ist für die Services voreingestellt.
    • Verwenden Sie die empfohlene Verbindungszeichenfolge für auto-ons.
    • Legen Sie onsConfig und wallet_location (optional) in oraaccess.xml fest, wie unter Clients für FAN mit optionalen Wallets konfigurieren beschrieben.
    • Öffnen Sie Port 6200 für ONS (6200 ist der Standardport, möglicherweise wurde ein anderer Port ausgewählt).
    • Legen Sie FAN in der Verbindungszeichenfolge fest: "user id=oracle; password=oracle; data source=HA; pooling=true; HA events=true;".
    • (Optional) Legen Sie Runtime Load Balancing ebenfalls in der Verbindungszeichenfolge fest: "user id=oracle; password=oracle; data source=HA; pooling=true; HA events=true; load balancing=true;".

Serviceattribute für Failover aktivieren

Transparent Application Continuity ist standardmäßig für die vordefinierten Services tp_tls, tp, tpurgent_tls und tpurgent aktiviert. Sie müssen daher nichts tun, wenn Sie einen dieser Services verwenden. Darüber hinaus lautet der DEFAULT-Wert für FAILOVER_RESTORE für diese Services AUTO.

Sie können den für Ihren Service angebotenen Failover-Typ mit dem Package DBMS_APP_CONT_ADMIN ändern. Mit dieser API können Sie Application Continuity, Transparent Application Continuity oder Transparent Application Failover (TAF) aktivieren oder den Failover ganz deaktivieren. Neue Sessions verwenden den neuen Failover-Typ. Sie müssen Administrator sein, um diese Vorgänge ausführen zu können.

So aktivieren Sie Transparent Application Continuity für einen Service:

execute DBMS_APP_CONT_ADMIN.ENABLE_TAC('HIGH');

So aktivieren Sie Application Continuity für einen Service:

execute DBMS_APP_CONT_ADMIN.ENABLE_AC('TPURGENT');

So aktivieren Sie TAF SELECT für einen Service:

execute DBMS_APP_CONT_ADMIN.ENABLE_TAF('LOW');

So aktivieren Sie TAF BASIC für einen Service:

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

So deaktivieren Sie den Failover für einen Service:

execute DBMS_APP_CONT_ADMIN.DISABLE_FAILOVER('HIGH');

Wenn Sie TAF verwenden möchten, ohne Services zu ändern, verwenden Sie die ältere clientseitige Konfiguration für TAF in der Verbindungszeichenfolge:

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

Serviceattribute für Wartung konfigurieren

Wenn die geplante Wartung beginnt, werden Sessions, die per Drain entfernt werden müssen, entsprechend markiert. Sessions im Leerlauf werden schrittweise freigegeben. Aktive Sessions werden per Drain entfernt, wenn die in der entsprechenden Session ausgeführte Arbeit abgeschlossen ist. Das Draining von Sessions kommt häufig bei Oracle-Verbindungspools und Mid-Tiers zum Einsatz, die für Fast Application Notification (FAN) konfiguriert sind. Ab Oracle Database 18c entfernt die Datenbank selbst Sessions per Draining, wenn Datenbanken gestoppt oder umgespeichert werden. Draining ist immer die beste Lösung, um eine geplante Wartung zu verbergen.

Failover-Lösungen wie Application Continuity fungieren als Fallback, wenn das Draining in der zugewiesenen Zeit nicht erfolgt.

Ein Drain-Timeout in Sekunden und eine Stoppoption können für einen Service mit dem Package DBMS_APP_CONT_ADMIN festgelegt werden. Sie müssen Administrator sein, um diese Vorgänge ausführen zu können.

So passen Sie das Drain-Timeout auf 600 Sekunden an und setzen die Stoppoption auf IMMEDIATE:

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

So passen Sie nur das Drain-Timeout an:

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

Clients für FAN mit optionalen Wallets konfigurieren

Die Wallet-basierte Authentifizierung ist eine Option für FAN bei der Verwendung von Autonomous Database. Verwenden Sie dasselbe Wallet wie für die TNS-Verbindung.

Für JDBC-Anwendungen

  1. Stellen Sie sicher, dass die folgenden JAR-Dateien im CLASSPATH der Anwendung vorhanden sind:

    (ons.jar, osdt_cert.jar, osdt_core.jar, oraclepki.jar) 
  2. Geben Sie das Wallet für FAN auf eine der folgenden Arten an:

    • Um automatisch konfigurierten ONS mit Wallets zu verwenden, legen Sie die folgenden Java-Systemeigenschaften fest:

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

      Beachten Sie, dass diese Einstellungen nicht pro Pool oder Verbindung festgelegt werden können.

    • So legen Sie ONS explizit fest:

      • Legen Sie es explizit mit einer UCP-XML-Konfigurationsdatei fest. Beispiel:

        <!--?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>
      • Legen Sie es programmgesteuert mit einem Aufruf von setONSConfiguration() innerhalb von UCP fest. Beispiel:

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

Oracle Call Interface-(OCI-)Anwendungen mit Oracle Driver Version 12.2 oder höher

Fügen Sie Folgendes zum Abschnitt <default_parameters> der Datei oraaccess.xml hinzu:

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

Der Pfad <wallet_location> muss der Name des Verzeichnisses mit dem Wallet sein.

Weitere Parameter können im Abschnitt ons von oraaccess.xml festgelegt werden, einschließlich <hosts>, <max_connections> und <subscription_wait_timeout>.

Treiber, die native Steuerelemente für Ereigniseinstellungen unterstützen, können den Abschnitt <events> auslassen und stattdessen die Treibereinstellung verwenden.

Standardmäßig werden Verbindungen zur Datenbank auch bei ONS-Fehlern hergestellt. Wenn in diesem Szenario Verbindungen nicht erfolgreich hergestellt werden sollen, können Sie einen Abschnitt auf derselben Ebene wie <events> und <ons> hinzufügen:

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

Speichern Sie die Datei oraaccess.xml im selben Verzeichnis wie die Netzwerkdateien tnsnames.ora und sqlnet.ora. Beispiel: Bei Verwendung von Oracle Instant Client befinden sich diese Dateien möglicherweise im Standardverzeichnis network/admin. Alternativ können sich alle Netzwerkkonfigurationsdateien in einem anderen zugänglichen Verzeichnis befinden. Setzen Sie dann die Umgebungsvariable TNS_ADMIN auf diesen Verzeichnisnamen.

ODP.Net Managed Provider

Geben Sie in der Datei application.config die ONS-Konfiguration und den Wallet-Speicherort an. Beispiel:

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