配置驱动程序以实现连续可用性
本文介绍了如何配置驱动程序以实现持续可用性。
配置 JDBC 瘦驱动程序
-
确保在客户机上应用所有建议的修补程序。请参阅 MOS 简讯应用程序连续性的客户机验证矩阵(文档 ID 2511448.1)。
-
将 JDBC 语句高速缓存用于覆盖范围和性能
为了获得最佳的覆盖率和性能,请使用 JDBC 驱动程序语句高速缓存来代替应用服务器语句高速缓存。这样,驱动程序便可以知道语句处于关闭状态,并在请求结束时释放内存。
要使用 JDBC 语句高速缓存,请使用连接属性
oracle.jdbc.implicitStatementCacheSize(OracleConnection.CONNECTION_PROPERTY_IMPLICIT_STATEMENT_CACHE_SIZE)。语句高速缓存针对每个连接。高速缓存大小的值与您的open_cursors数量匹配。例如:oracle.jdbc.implicitStatementCacheSize=nnn,其中nnn通常介于 10 和 100 之间,等于应用程序维护的打开游标数。 -
优化垃圾收集器
对于许多应用程序,缺省垃圾收集器优化就足够了。对于返回并保留大量数据的应用程序,您可以使用更高值,例如 2GB 或更大值。例如:
java -Xms3072m -Xmx3072m建议将初始 Java 堆大小 (ms) 和最大堆大小 (mx) 的内存分配设置为相同的值。这可防止在增加和缩小内存堆时使用系统资源。
-
JDBC 混凝土类
对于 JDBC 应用程序,Oracle 不支持废弃的
oracle.sql具体类 BLOB、CLOB、BFILE、OPAQUE、ARRAY、STRUCT 或 ORADATA。(请参见 MOS 简讯 1364193.1, New JDBC Interfaces )。在客户机上使用ORAchk -acchk可了解应用程序是否通过。从 Oracle JDBC-thin 驱动程序版本 18c 和更高版本开始,JDBC 重放驱动程序的限制具体类列表减小为以下内容:oracle.sql.OPAQUE、oracle.sql.STRUCT、oracle.sql.ANYDATA -
配置快速连接故障转移 (FCF)
这对应于启用对 FAN 事件的订阅。
对于客户机驱动程序 12c 及更高版本:
-
使用推荐的网址进行自动处理
-
检查 CLASSPATH 上是否存在 ons.jar(加上可选的 WALLET jar、osdt_cert.jar、osdt_core.jar 和 oraclepki.jar)
-
设置池或驱动程序属性 fastConnectionFailoverEnabled=true
-
UCP(推荐)或第三方连接池
-
ONS 的开放端口 6200(6200 是默认端口,可能选择了其他端口)
对于 12c 之前的客户机驱动程序,请使用提供的地址:
- 设置 oracle.ons.nodes =XXX01:6200,XXX02:6200,XXX03:6200
-
配置 OCI (Oracle Call Interface) 驱动程序
-
确保在客户机上应用所有建议的修补程序。请参阅 MOS 简讯应用程序连续性的客户机验证矩阵(文档 ID 251148.1)。
-
将
OCIStmtPrepare替换为OCIStmtPrepare2。OCIStmtPrepare()自 12.2 起已不赞成使用。所有应用程序都应使用OCIStmtPrepare2()。TAC 和 AC 允许OCIStmtPrepare,但不会重放此语句。 -
要将 FAN 用于基于 OCI 的应用程序,请执行以下操作:
-
aq_ha_notifications 已预设在服务中
-
使用建议的连接字符串进行自动处理
-
在 oraaccess.xml 中设置 auto_config、 events 和 wallet_location(可选),如 Configure Clients for FAN Including Optional Wallets 中所述。
-
将应用程序与 O/S 客户机线程库链接
-
ONS 的开放端口 6200(6200 是默认端口,可能选择了其他端口)。对于 12c 之前的客户端驱动程序,请使用 oraccess.xml 中提供的地址。
-
配置 ODP.NET 非托管提供程序驱动程序
-
确保在客户机上应用所有建议的修补程序。请参阅 MOS 简讯应用程序连续性的客户机验证矩阵(文档 ID 251148.1)。
-
要将 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_tls、tp、tpurgent_tls 和 tpurgent 启用透明应用程序连续性,因此,如果使用其中一项,则无需执行任何操作。此外,对于他们,FAILOVER_RESTORE 的 DEFAULT 值为 AUTO。
可以使用软件包 DBMS_APP_CONT_ADMIN 更改服务上提供的故障转移类型。使用此 API 可启用应用程序连续性、透明应用程序连续性或透明应用程序故障转移 (Transparent Application Continuity,TAF),或者完全禁用故障转移。新会话将使用新的故障转移类型。您必须是管理员才能使用这些过程。
要为服务启用透明应用程序连续性,请执行以下操作:
execute DBMS_APP_CONT_ADMIN.ENABLE_TAC('databaseid_high.atp.oraclecloud.com');
要为服务启用应用程序连续性,请执行以下操作:
execute DBMS_APP_CONT_ADMIN.ENABLE_AC('databaseid_tpurgent.atp.oraclecloud.com');
要为服务启用 TAF SELECT,请执行以下操作:
execute DBMS_APP_CONT_ADMIN.ENABLE_TAF('databaseid_low.atp.oraclecloud.com');
要为服务启用 TAF BASIC,请执行以下操作:
execute DBMS_APP_CONT_ADMIN.ENABLE_TAF('databaseid_medium.atp.oraclecloud.com', 'SESSION');
要为服务禁用故障转移,请执行以下操作:
execute DBMS_APP_CONT_ADMIN.DISABLE_FAILOVER('databaseid_high.atp.oraclecloud.com');
如果您希望在不修改服务的情况下使用 TAF,请在连接字符串中使用 TAF 的较旧客户端配置:
(FAILOVER_MODE=(TYPE=select)(METHOD=basic)(OVERRIDE=TRUE))
配置维护的服务属性
计划内维护开始时,需要排空的会话将被标记为排空。空闲会话将逐步释放。活动会话将在该会话中执行的工作完成时耗尽。会话排空功能广泛用于为快速应用程序通知 (Fast Application Notification,FAN) 配置的 Oracle 连接池和中间层。从 Oracle Database 18c 开始,在停止或重新定位数据库时,数据库本身会耗尽会话。排水始终是隐藏计划内维护的最佳解决方案。
应用程序连续性等故障转移解决方案是分配的时间内工作不会耗尽的回退。
可以使用软件包 DBMS_APP_CONT_ADMIN 在服务上设置耗尽超时(以秒为单位)和停止选项。您必须是管理员才能使用这些过程。
要将耗尽超时调整为 600 秒并将停止选项设置为 IMMEDIATE:
execute DBMS_APP_CONT_ADMIN.SET_DRAINING('databaseid_high.atp.oraclecloud.com', 600, 'IMMEDIATE' );
要仅调整排空超时,请执行以下操作:
execute DBMS_APP_CONT_ADMIN.SET_DRAINING('databaseid_tpurgent.atp.oraclecloud.com', 600);
透明应用程序连续性 (Transparent Application Continuity,TAC) 是使用过程 DBMS_APP_CONT_ADMIN.ENABLE_TAC 设置的故障转移选项。ENABLE_TAC 过程采用三个参数:SERVICE NAME 是要更改的服务名,FAILOVER_RESTORE 设置为 AUTO 以选择透明应用程序连续性 (Transparent Application Continuity,TAC),REPLAY_INITIATION_TIMEOUT 是重放超时,用于指定提交请求以允许该请求重放的秒数。
例如,作为 ADMIN 用户,要为 TP 服务启用透明应用程序连续性 (Transparent Application Continuity,TAC),且重放超时设置为 20 分钟:
execute DBMS_APP_CONT_ADMIN.ENABLE_TAC('databaseid_tp.atp.oraclecloud.com', 'AUTO', 1200);
应用程序连续性 (Application Continuity,AC) 是使用过程 DBMS_APP_CONT_ADMIN.ENABLE_AC 设置的故障转移选项。ENABLE_AC 过程采用三个参数:SERVICE NAME 是要更改的服务名称,FAILOVER_RESTORE 设置为 LEVEL1 以选择应用程序连续性 (AC),REPLAY_INITIATION_TIMEOUT 是重放超时,用于指定提交请求以允许该请求重放的秒数。
例如,作为 ADMIN 用户,要为 TPURGENT 服务启用应用程序连续性,请执行以下操作:
execute DBMS_APP_CONT_ADMIN.ENABLE_AC('databaseid_tpurgent.adb.oraclecloud.com', 'LEVEL1', 600);
为 FAN 配置客户机(包括可选 Wallet)
使用自治 AI 数据库时,基于 Wallet 的验证是 FAN 的一个选项。使用与 TNS 连接相同的 wallet。
适用于 JDBC 应用程序
-
确保应用程序的
CLASSPATH中存在以下 jar 文件:(ons.jar, osdt_cert.jar, osdt_core.jar, oraclepki.jar) -
通过以下方式之一指定 FAN 的 wallet:
-
要将自动配置的 ONS 与钱包一起使用,请设置以下 Java 系统属性:
"-Doracle.ons.walletfile=/replace this with host path/onswallet""-Doracle.ons.walletpassword=myONSWalletPassword"请注意,不能基于每个池或每个连接设置这些值。
-
要显式设置 ONS,请执行以下操作之一:
-
使用 UCP XML 配置文件显式设置。例如:
<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 Driver 版本 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.xml 的 ons 部分中设置,包括 <hosts>、<max_connections> 和 <subscription_wait_timeout>。
支持本机事件设置控制的驱动程序可以省略 <events> 部分并改用驱动程序设置。
默认情况下,即使 ONS 发生故障,也会与数据库建立连接。如果您希望在此方案中连接失败,则可以将部分添加到与 <events> 和 <ons> 相同的级别:
<fan>
<subscription_failure_action>
error
</subscription_failure_action>
</fan>
将 oraaccess.xml 文件放在与 tnsnames.ora 和 sqlnet.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>