Oracle 19C 配置TAF
一、客户端配置TAF
示例:
##在客户端tnsnames.ora文件中添加如下配置:
Lemon =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.127.104)(PORT = 1521))
(CONNECT_DATA =
(SERVER=DEDICATED)
(SERVICE_NAME = mesdb)
(FAILOVER_MODE=
(TYPE=session)
(METHOD=basic)
(RETRIES=180)
(DELAY=5)
)
)
)
选项含义解释:
TYPE
:故障转移类型。定义故障转移后会话的重建方式。
选项 | 含义 |
---|---|
session |
会话级故障转移(常用): - 连接中断时,在备用节点重建新会话。 - 用户需重新执行未提交的事务(SELECT查询自动恢复)。 |
select |
查询级故障转移(高级): - 在游标打开期间发生故障,自动在新节点恢复结果集。 - 限制:仅支持 SELECT ,且游标需以WITH HOLD 方式打开(如JDBC ResultSet.HOLD_CURSORS_OVER_COMMIT )。 |
none |
禁用故障转移(默认值)。 |
推荐:普通应用用
session
;只读报表系统可尝试select
(需应用适配游标)。
METHOD
:故障转移触发方式。定义何时建立到备用节点的连接。
选项 | 含义 |
---|---|
basic |
被动等待故障(默认): - 主节点故障后才尝试连接备用节点。 - 优点:节省资源。 - 缺点:切换延迟较高(需重建TCP连接)。 |
preconnect |
预先连接备用节点: - 初次连接时同时连接主备节点(备用节点待命)。 - 优点:故障转移秒级完成(会话状态提前同步)。 - 缺点:双倍连接数消耗资源。 |
推荐:高延迟敏感系统用
preconnect
(评估资源开销);普通场景用basic
。
RETRIES
:重试次数
参数 | 含义 | 默认值 |
---|---|---|
RETRIES |
连接失败后的最大重试次数(整数)。 | 5 |
DELAY
:重试间隔
参数 | 含义 | 默认值 |
---|---|---|
DELAY |
每次重试的间隔时间(秒)。 | 1 |
重试行为: 客户端每间隔DELAY
秒重试一次,最多尝试RETRIES
次。
示例:(RETRIES=180, DELAY=5)
→ 每5秒重试一次,持续15分钟(180×5=900秒)。
⚠️ 注意:
- 若
RETRIES=0
或未设置,则不会重试(立即报错)。- 过长重试可能导致应用线程阻塞,需结合应用超时机制使用。
二、数据库服务端TAF配置
示例:
##Oracle-11G
1)添加SERVICE--oratest
##主备模式
srvctl add service -d lemon -s oratest -r lemon1 -a lemon2 -P basic -e session -w 5 -z 3 -y automatic
##负载均衡模式
srvctl add service -d lemon -s oratest -r lemon1,lemon2 -P basic -e session -w 5 -z 3 -y automatic
##语法说明:
-d:数据库名称
-s:新创建的service名称
-r:首选节点列表
-a:备用节点列表
-P:TAF策略
-e:TAF类型
-z:在failover之前重新尝试连接的次数
-w:在failover之前两次尝试连接的时间间隔
-y:是否自动启动
2)启动SERVICE(添加完成后需手动启动)
srvctl start service -d lemon -s oratest
3)检查SERVICE信息
srvctl config service -d lemon -s oratest
4)停止SERVICE
srvctl stop service -d lemon -s oratest
5)移除SERVICE
srvctl remove service -d lemon -s oratest
##Oracle-19C
创建语法:
srvctl add service -database db_unique_name -service service_name_list
[-pdb pluggable_database] [-eval]
[-preferred preferred_list] [-available available_list] [-failback {YES | NO}]
[-netnum network_number] [-tafpolicy {BASIC | NONE}]
[-edition edition_name]
[-role "[PRIMARY][,PHYSICAL_STANDBY][,LOGICAL_STANDBY][,SNAPSHOT_STANDBY]"
[-policy {AUTOMATIC | MANUAL}] [-notification {TRUE | FALSE}]
[-clbgoal {SHORT | LONG}] [-failovertype {NONE|SESSION|SELECT|TRANSACTION|AUTO}]
[-rlbgoal {NONE | SERVICE_TIME | THROUGHPUT}] [-dtp {TRUE | FALSE}]
[-failovermethod {NONE | BASIC}] [-failoverretry failover_retries]
[-drain_timeout timeout] [-stopoption {NONE|IMMEDIATE|TRANSACTIONAL}]
[-failover_restore {NONE|LEVEL1|AUTO}] [-failoverdelay failover_delay]
[-sql_translation_profile sql_translation_profile]
[-global {TRUE | FALSE}] [-maxlag max_lag_time] [-commit_outcome {TRUE|FALSE}]
[-retention retention_time] [-replay_init_time replay_initiation_time]
[-session_state {STATIC|DYNAMIC|AUTO}] [-force] [-verbose]
创建示例:
1)添加SERVICE--oratest
##主备模式
srvctl add service -db lemon -service oratest -preferred "lemon1" -available "lemon2" -tafpolicy basic -failovertype SESSION -failoverdelay 5 -failoverretry 3 -policy AUTOMATIC
##负载均衡模式
srvctl add service -db lemon -service oratest -preferred "lemon1,lemon2" -tafpolicy basic -failovertype SESSION -failoverdelay 5 -failoverretry 3 -policy AUTOMATIC
2)启动SERVICE(添加完成后需手动启动)
srvctl start service -d lemon -s oratest
3)检查SERVICE信息
srvctl config service -d lemon -s oratest
5)停止SERVICE
srvctl stop service -d lemon -s oratest
5)移除SERVICE
srvctl remove service -d lemon -s oratest
虽然第一部分是11G的语法,但是在19C环境测试也是一样可以添加成功!!
另附所有的参数详解
Parameter | Description |
---|---|
-db db_unique_name |
Unique name for the database. |
-service service_name_list |
Unique service name(s) within the cluster (comma-delimited). DB_DOMAIN appended if no domain specified. 4KB total length limit for all service names. |
-eval |
Hypothetically evaluate command impact (only for policy-managed services). |
-edition edition_name |
Initial session edition for connections (SRVCTL does not validate; user requires USE privilege). |
-sql_translation_profile profile_name |
Specify SQL translation profile for migrated non-Oracle applications (use srvctl config service to view). |
-preferred preferred_list |
Preferred instances for administrator-managed databases (mutually exclusive with -available ; Oracle RAC only). |
-available available_list |
Failover instances for administrator-managed databases (mutually exclusive with -preferred ; Oracle RAC only). |
-failback {YES | NO} |
Automatically fail back to preferred instances when available after failover. |
-serverpool server_pool |
Server pool name for policy-managed databases (Oracle RAC only). |
-cardinality {UNIFORM | SINGLETON} |
Service cardinality: UNIFORM (all instances) or SINGLETON (one instance). Policy-managed/Oracle RAC One Node only. |
-netnum network_number |
Network number for service VIP dependency (default from -defaultnetwork database config; Oracle RAC/RAC One Node only). |
-tafpolicy {BASIC | NONE} |
TAF policy specification (administrator-managed databases only). |
-role "[PRIMARY][,PHYSICAL_STANDBY][,LOGICAL_STANDBY][,SNAPSHOT_STANDBY]" |
Service role(s) for automatic startup (matches Data Guard role; manual start unaffected). |
-policy {AUTOMATIC | MANUAL} |
Service restart policy: AUTOMATIC (default, subject to role) or MANUAL (never auto-restarts). |
-notification {TRUE | FALSE} |
Enable Fast Application Notification (FAN) for OCI connections. |
-rfpool pool_name |
Reader farm server pool name. |
-dtp {TRUE | FALSE} |
Enable Distributed Transaction Processing (Oracle RAC only; requires singleton/preferred single-node service). |
-clbgoal {SHORT | LONG} |
Connection Load Balancing Goal: SHORT (runtime/integrated pools) or LONG (long-running sessions). |
-rlbgoal {NONE | SERVICE_TIME | THROUGHPUT} |
Runtime Load Balancing Goal: SERVICE_TIME (response time) or THROUGHPUT (throughput). |
-failovertype {NONE | SESSION | SELECT | TRANSACTION | AUTO} |
Failover type: TRANSACTION (Application Continuity), AUTO (Transparent App Continuity), SELECT /SESSION (TAF). |
-failovermethod {NONE | BASIC} |
TAF failover method (backward compatibility; Oracle RAC only). |
-failoverretry failover_retries |
Connection attempts after incident (Application Continuity/TAF). |
-drain_timeout timeout |
Time (seconds) for resource draining during maintenance (default: unset; 0 = immediate). |
-stopoption {NONE | IMMEDIATE | TRANSACTIONAL} |
Service stop mode: IMMEDIATE (drain sessions), TRANSACTIONAL (drain + timeout terminate). Requires -force . |
-failover_restore {NONE | LEVEL1 | AUTO} |
Session state restore: LEVEL1 (AC/TAF), AUTO (Transparent AC). |
-failoverdelay failover_delay |
Delay (seconds) between reconnect attempts (Application Continuity/TAF). |
-gsmflags gsm_flags |
Set locality/region failover values. |
-pdb pluggable_database |
Associate service with a PDB (SRVCTL does not validate PDB existence). |
-global {TRUE | FALSE} |
Indicate Global Data Services service (GDS only). |
-maxlag maximum_lag_time |
Maximum replication lag (seconds; default: ANY ). |
-commit_outcome {TRUE | FALSE} |
Enable Transaction Guard (commit outcome tracking). Required for -failovertype TRANSACTION . |
-retention retention_time |
Commit outcome retention time (seconds) if -commit_outcome TRUE . |
-replay_init_time replay_initialization_time |
Max time difference (seconds) for replay readiness (Application Continuity; default: 300). |
-session_state {STATIC | DYNAMIC | AUTO} |
Non-transactional session state handling for AC/TAC. Requires -failovertype TRANSACTION /AUTO . |
-pqservice pq_service |
Parallel query service name. |
-pqpool pq_pool |
Parallel query server pool. |
-update {-preferred new_preferred_instance | -available new_available_instance} |
Add instance to preferred/available lists. |
-css_critical {yes | no} |
Weight service as critical for node eviction priority (administrator-managed only). |
-verbose |
Display verbose output. |
-force |
Force operation without listener configuration. |
添加完成
⚠️ 注意:
- 服务端创建成功后,客户端需要更新tns信息,用新的service连接:
三、服务切换测试
关闭节点一集群服务:
[root@lemon01 ~]# /u01/app/19.3.0/grid/bin/crsctl stop cluster -n lemon01
服务切换至节点二:
开启节点一集群服务:
[root@lemon01 ~]# /u01/app/19.3.0/grid/bin/crsctl start cluster -n lemon01
关闭节点二集群后,服务又在节点一online:
四、Oracle用户查看服务
##在数据库中查询配置的oratest的服务的详细信息
col name for a20
col FAILOVER_METHOD for a20
col FAILOVER_TYPE for a20
select SERVICE_ID,NAME,CREATION_DATE,FAILOVER_METHOD,FAILOVER_TYPE,FAILOVER_RETRIES,FAILOVER_DELAY,goal,clb_goal,aq_ha_notifications from dba_services where NAME='oratest';
##查看RAC环境中所有可被客户端连接的有效服务的相关信息
set line 222 pages 2222
col NETWORK_NAME for a30
col name for a18
col NETWORK_NAME for a30
col SESSION_STATE_CONSISTENCY for a30
col FAILOVER_RESTORE for a15
select inst_id,SERVICE_ID,NAME,NETWORK_NAME,CREATION_DATE,GOAL,GLOBAL,SESSION_STATE_CONSISTENCY,FAILOVER_RESTORE from gv$services where NETWORK_NAME is not null and NAME not like '%XDB';