Transparent Application Failover (TAF) is a client-side feature that allows for clients to reconnect to surviving databases in the event of a failure of a database instance.
Note that this is not used for purpose of load balancing or for Connect Time Failover.
TAF operates in two modes
- Session Failover which will recreate lost connections and sessions
- Select Failover which will replay queries that were in progress. It will discard the old rows which have been fetched earlier and will fetch the rest of rows.
TAF can be implemented at
- Client Side
- Server Side
This can be done by creating a entry in tnsnames.ora as follows
TESTDB10_basic= (DESCRIPTION= <strong>(LOAD_BALANCE=on) (FAILOVER=on) </strong> (ADDRESS= (PROTOCOL=tcp) HOST=prod01-vip)(PORT=1521)) (ADDRESS= (PROTOCOL=tcp)(HOST= prod02-vip)PORT=1521)) (CONNECT_DATA= (SERVICE_NAME=TESTDB10) <strong>(FAILOVER_MODE= (TYPE=select) (METHOD=basic</strong>))))
Here FAILOVER_MODE parameter is used to implement TAF.
Above configuration is for connections which will allow new connections to be created at failover time. This is determined by parameter METHOD which is set to BASIC here.
You can also have a session established before. This helps as new connection can take time and will thus result in faster failover. To do this use
TESTDB_prod01= (DESCRIPTION= (LOAD_BALANCE=on) (FAILOVER=on) (ADDRESS= (PROTOCOL=tcp) HOST=prod01-vip)(PORT=1521)) (CONNECT_DATA= (SERVICE_NAME=TESTDB) (INSTANCE_NAME=TESTDB1) (FAILOVER_MODE= <strong>(BACKUP= TESTDB_prod02) (TYPE=select) (METHOD=PRECONNECT)</strong>))) TESTDB_prod02= (DESCRIPTION= (LOAD_BALANCE=on) (FAILOVER=on) (ADDRESS= (PROTOCOL=tcp) HOST=prod01-vip)(PORT=1521)) (CONNECT_DATA= (SERVICE_NAME=TESTDB10) (INSTANCE_NAME=TESTDB2) (FAILOVER_MODE= <strong>(BACKUP= TESTDB_prod01) (TYPE=select) (METHOD=PRECONNECT)</strong>)))
Following query can be used to monitor information about failed over sessions
SELECT MACHINE, FAILOVER_TYPE, FAILOVER_METHOD, FAILED_OVER, COUNT(*) FROM V$SESSION GROUP BY MACHINE, FAILOVER_TYPE, FAILOVER_METHOD, FAILED_OVER;
Server Side Configuration
This can be done using server-side service attributes. Please note that in case both (Client side and server side) configuration are used then service-side settings will be used.
You can refer to following note for details
Note 404644.1 - Configuration of Transparent Application Failover(TAF) works with server side service
Features of TAF
- Sessions executing any insert/update/delete statement fail then statement will be rollback.
- A command which has been successfully completed upon failure and has changed the database state, then TAF does not resend the command.
- When using select failover, we will retrieve only the rows which have not been fetched by earlier sessions.