配置驱动程序以实现连续可用性

本文介绍了如何配置驱动程序以实现连续可用性。

配置 JDBC 瘦驱动程序

  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 堆大小 (ms) 和最大堆大小 (mx) 的内存分配设置为相同值。这样可以防止在增大和收缩内存堆时使用系统资源。

  4. JDBC 混凝土类

    对于 JDBC 应用程序,Oracle 不支持过时的 oracle.sql 具体类 BLOB、CLOB、BFILE、OPAQUE、ARRAY、STRUCT 或 ORADATA。(请参见 MOS 简讯 1364193.1, New JDBC Interfaces )。在客户机上使用 ORAchk -acchk 了解应用程序是否通过。从 Oracle JDBC 瘦驱动程序版本 18c 及更高版本开始,JDBC 重放驱动程序的受限具体类列表将减少为以下内容:oracle.sql.OPAQUEoracle.sql.STRUCToracle.sql.ANYDATA

  5. 配置快速连接故障转移 (FCF)

    这对应于启用对 FAN 事件的订阅。

    对于客户机驱动程序 12c 及更高版本:

    • 使用建议的自动启用 URL
    • 检查 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 简讯 Client Validation Matrix for Application Continuity (文档 ID 251148.1)。

  2. OCIStmtPrepare 替换为 OCIStmtPrepare2。自 12.2 起,OCIStmtPrepare() 已过时。所有应用程序都应使用 OCIStmtPrepare2()。TAC 和 AC 允许 OCIStmtPrepare,但不重放此语句。

  3. 要将 FAN 用于基于 OCI 的应用程序,请执行以下操作:

    • 在服务上预设 aq_ha_notifications
    • 将建议的连接字符串用于自动输入
    • 在 oraaccess.xml 中设置 auto_config、事件和 wallet_location(可选),如 Configure Clients for FAN Including Optional Wallets 中所述。
    • 将应用程序与 O/S 客户机线程库关联
    • ONS 的开放端口 6200(6200 是默认端口,可能已选择其他端口)。对于 12c 之前的客户机驱动程序,请使用 oraccess.xml 中提供的地址。

配置 ODP.NET 非托管提供程序驱动程序

  1. 确保在客户机上应用所有建议的补丁程序。请参阅 MOS 简讯 Client Validation Matrix for Application Continuity (文档 ID 251148.1)。

  2. 要将 FAN 用于基于 Oracle Call Interface 的应用程序,请执行以下操作:

    • 在服务上预设 aq_ha_notifications
    • 将建议的连接字符串用于自动输入
    • 在 oraaccess.xml 中设置 onsConfig 和 wallet_location(可选),如 Configure Clients for FAN Including Optional Wallets 中所述。
    • 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);

为包括可选 Wallet 的 FAN 配置客户机

使用 Autonomous Database 时,基于 Wallet 的身份验证是 FAN 的一个选项。使用与 TNS 连接相同的 wallet。

对于 JDBC 应用程序

  1. 确保应用程序的 CLASSPATH 中存在以下 jar 文件:

    (ons.jar, osdt_cert.jar, osdt_core.jar, oraclepki.jar) 
  2. 通过以下方式之一指定 FAN 的 wallet:

    • 要将自动配置的 ONS 与 wallet 一起使用,请设置以下 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> 路径应为包含 wallet 的目录的名称。

可以在 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 配置和 wallet 位置。例如:

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