設定持續可用性的驅動程式

本文將說明如何設定驅動程式以提供持續可用性。

設定 JDBC Thin 驅動程式

  1. 確定在從屬端套用所有建議的修正程式。請參閱 MOS 注意事項 Client Validation Matrix for Application Continuity (文件 ID 2511448.1)。

  2. 使用 JDBC 敘述句快取進行涵蓋範圍和效能

    若要獲得最佳涵蓋範圍和效能,請使用 JDBC 驅動程式敘述句快取來取代應用程式伺服器敘述句快取。這樣可以讓驅動程式知道敘述句已經關閉,而且可以在要求結束時釋出記憶體。

    若要使用 JDBC 敘述句快取,請使用連線特性 oracle.jdbc.implicitStatementCacheSize (OracleConnection.CONNECTION_PROPERTY_IMPLICIT_STATEMENT_CACHE_SIZE)。每個連線的敘述句快取。快取大小的值符合您的 open_cursors 數目。舉例而言:

    oracle.jdbc.implicitStatementCacheSize=nnn,其中 nnn 通常介於 10 到 100 之間,而且等於應用程式維護的開啟游標數。

  3. 調整資源回收器

    對許多應用程式而言,預設的「資源回收器」調整已足夠。對於傳回並保留大量資料的應用程式,您可以使用較高的值,例如 2GB 或更大。舉例而言:

    java -Xms3072m -Xmx3072m 

    建議將初始 Java 堆集大小 (毫秒) 和堆集大小上限 (mx) 的記憶體配置設為相同的值。這樣可避免使用系統資源來增加或縮小記憶體堆集。

  4. JDBC 具體類別

    對於 JDBC 應用程式,Oracle 不支援已不再使用的 oracle.sql 具體類別 BLOB、CLOB、BFILE、OPAQUE、ARRAY、STRUCT 或 ORADATA。(請參閱 MOS 注意事項 1364193.1,新 JDBC 介面 )。使用從屬端上的 ORAchk -acchk 來瞭解應用程式是否通過。從 Oracle JDBC-thin 驅動程式版本 18c 和更新版本開始,「JDBC 重新執行驅動程式」的限制具體類別清單會縮減為下列各項:oracle.sql.OPAQUEoracle.sql.STRUCToracle.sql.ANYDATA

  5. 設定快速連線容錯移轉 (FCF)

    這對應於啟用 FAN 事件訂閱。

    對於用戶端驅動程式 12c 及更新版本:

    • 使用建議的自動開啟網址
    • 檢查 ons.jar (加上選擇性 WALLET Jar,osdt_cert.jar,osdt_core.jar,oraclepki.jar) 是否在 CLASSPATH 上
    • 設定集區或驅動程式特性 fastConnectionFailoverEnabled=true
    • UCP (建議) 或協力廠商連線集區
    • ONS 的開放連接埠 6200 (預設連接埠為 6200,但選擇了其他連接埠)

    對於 12c 之前的用戶端驅動程式,請使用提供的位址:

    • 設定 oracle.ons.nodes =XXX01:6200、XXX02:6200、XXX03:6200

設定 OCI (Oracle Call Interface) 驅動程式

  1. 確定在從屬端套用所有建議的修正程式。請參閱 MOS 注意事項應用軟體連續性的用戶端驗證矩陣 (文件 ID 251148.1)。

  2. OCIStmtPrepare 取代為 OCIStmtPrepare2OCIStmtPrepare() 自 12.2 起已不再使用。所有應用程式都應該使用 OCIStmtPrepare2()。TAC 與 AC 允許 OCIStmtPrepare,但不會重新執行此陳述式。

  3. 若要將 FAN 用於以 OCI 為基礎的應用程式,請執行下列作業:

    • aq_ha_notifications 會在服務上預先設定
    • 自動使用建議的連線字串
    • 在 oraaccess.xml 中設定 auto_config、事件和 wallet_location (選擇性),如設定 FAN 包含選擇性公事包的從屬端中所述。
    • 將應用程式與 O/S 從屬端繫線程式庫連結
    • 開啟 ONS 的連接埠 6200 (預設連接埠為 6200,但選擇了其他連接埠)。對於 12c 之前的用戶端驅動程式,請使用 oraccess.xml 中提供的位址。

設定 ODP.NET 未受管理的提供者驅動程式

  1. 確定在從屬端套用所有建議的修正程式。請參閱 MOS 注意事項應用軟體連續性的用戶端驗證矩陣 (文件 ID 251148.1)。

  2. 若要將 FAN 用於以 Oracle Call Interface 為基礎的應用程式,請執行下列作業:

    • aq_ha_notifications 會在服務上預先設定
    • 自動使用建議的連線字串
    • 在 oraaccess.xml 中設定 onsConfig 和 wallet_location (選擇性),如設定 FAN 包含選擇性公事包的從屬端中所述。
    • ONS 的開放連接埠 6200 (預設連接埠為 6200,但選擇了其他連接埠)
    • 在連線字串中設定 FAN:"user id=oracle; password=oracle; data source=HA; pooling=true; HA events=true;"
    • (選擇性) 設定「程式實際執行負載平衡」,同時設定連線字串:"user id=oracle; password=oracle; data source=HA; pooling=true; HA events=true; load balancing=true;"

啟用容錯移轉的服務屬性

預先定義的服務 tp_tlstptpurgent_tlstpurgent 預設會啟用「通透應用程式連續性」,因此如果使用其中一個服務,就不需要執行任何動作。此外,FAILOVER_RESTOREDEFAULT 值為 AUTO

您可以使用 DBMS_APP_CONT_ADMIN 套裝軟體變更服務上提供的容錯移轉類型。您可以使用此 API 啟用應用程式連續性、通透應用程式連續性或通透應用程式容錯移轉 (TAF),或者完全停用容錯移轉。新的階段作業將使用新的容錯移轉類型。您必須是管理員才能使用這些程序。

若要啟用服務的「通透應用程式連續性」,請執行下列動作:

execute DBMS_APP_CONT_ADMIN.ENABLE_TAC('HIGH');

若要啟用服務的「應用程式連續性」,請執行下列動作:

execute DBMS_APP_CONT_ADMIN.ENABLE_AC('TPURGENT');

若要啟用服務的 TAF SELECT:

execute DBMS_APP_CONT_ADMIN.ENABLE_TAF('LOW');

若要啟用服務的 TAF BASIC:

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

停用服務的容錯移轉:

execute DBMS_APP_CONT_ADMIN.DISABLE_FAILOVER('HIGH');

如果您想要在不修改服務的情況下使用 TAF,請在連線字串中使用舊版的 TAF 從屬端組態:

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

設定維護的服務屬性

計畫性維護開始時,需要清空的階段作業會標示為清空。閒置階段作業會逐步釋出。當在該階段作業中執行的工作完成時,作用中階段作業會一併清空。階段作業清空與設定為「快速應用程式通知 (FAN)」的 Oracle 連線集區和中間層一起廣泛使用。從 Oracle Database 18c 開始,當資料庫停止或重新定位時,資料庫本身會清空階段作業。清空永遠是隱藏計畫性維護的最佳解決方案。

當工作在配置的時間內不會消耗時,容錯移轉解決方案 (例如應用程式連續性) 會成為備用狀態。

您可以使用套裝軟體 DBMS_APP_CONT_ADMIN 在服務上設定清空逾時 (以秒為單位) 和停止選項。您必須是管理員才能使用這些程序。

若要將清空逾時調整為 600 秒,並將停止選項設為 IMMEDIATE:

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

僅調整清空逾時:

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

設定 FAN 的從屬端 (包括選擇性公事包)

使用 Autonomous Database 時,可使用公事包式認證作為 FAN 選項。使用與 TNS 連線相同的公事包。

針對 JDBC 應用程式

  1. 確定應用程式的 CLASSPATH 中有下列 jar 檔案:

    (ons.jar, osdt_cert.jar, osdt_core.jar, oraclepki.jar) 
  2. 以下列其中一種方式指定 FAN 的公事包:

    • 若要在公事包使用自動設定的 ONS,請設定下列 Java 系統特性:

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

      請注意,無法針對每個集區或每個連線設定這些值。

    • 若要明確設定 ONS,請執行下列其中一項作業:

      • 明確使用 UCP XML 組態檔設定。舉例而言:

        <!--?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>
      • 使用呼叫 setONSConfiguration(),從 UCP 內以程式設計方式設定,例如:

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

針對使用 Oracle 驅動程式版本 12.2 或更新版本的 Oracle Call Interface (OCI) 應用程式

新增下列項目至 oraaccess.xml 檔案的 <default_parameters> 區段:

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

<wallet_location> 路徑應該是包含公事包的目錄名稱。

其他參數可在 oraaccess.xmlons 區段中設定,包括 <hosts><max_connections><subscription_wait_timeout>

支援原生事件設定控制項的驅動程式可能會省略 <events> 區段,並改用驅動程式設定。

依照預設,即使 ONS 失敗,也會建立資料庫連線。如果您希望在此案例中連線失敗,可以將區段新增至與 <events><ons> 相同的層次:

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

oraaccess.xml 檔案置於與 tnsnames.orasqlnet.ora 網路檔案相同的目錄中。例如,使用 Oracle Instant Client 時,這些檔案可能位於預設目錄 network/admin 中。或者,所有網路配置檔都可以放置在另一個可存取的目錄中。然後將環境變數 TNS_ADMIN 設定為該目錄名稱。

ODP.Net 託管提供者

使用 application.config 檔案來指定 ONS 組態和公事包位置。舉例而言:

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