Oracle 19C 配置TAF

发布于:2025-08-12 ⋅ 阅读:(15) ⋅ 点赞:(0)

一、客户端配置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)
	   )
    )
  )

选项含义解释:

  1. TYPE:故障转移类型。定义故障转移后会话的重建方式。
选项 含义
session 会话级故障转移(常用):
- 连接中断时,在备用节点重建新会话。
- 用户需重新执行未提交的事务(SELECT查询自动恢复)。
select 查询级故障转移(高级):
- 在游标打开期间发生故障,自动在新节点恢复结果集。
- 限制:仅支持SELECT,且游标需以WITH HOLD方式打开(如JDBC ResultSet.HOLD_CURSORS_OVER_COMMIT)。
none 禁用故障转移(默认值)。

推荐:普通应用用session;只读报表系统可尝试select(需应用适配游标)。


  1. METHOD:故障转移触发方式。定义何时建立到备用节点的连接。
选项 含义
basic 被动等待故障(默认):
- 主节点故障后才尝试连接备用节点。
- 优点:节省资源。
- 缺点:切换延迟较高(需重建TCP连接)。
preconnect 预先连接备用节点
- 初次连接时同时连接主备节点(备用节点待命)。
- 优点:故障转移秒级完成(会话状态提前同步)。
- 缺点:双倍连接数消耗资源。

推荐:高延迟敏感系统用preconnect(评估资源开销);普通场景用basic


  1. RETRIES:重试次数
参数 含义 默认值
RETRIES 连接失败后的最大重试次数(整数)。 5

  1. 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';

在这里插入图片描述