Oracle True Cache is an in-memory, consistent, and automatically managed SQL cache for Oracle Database. True Cache improves application response time while reducing the load on the database. True Cache reads from the primary database to warm up the cache or when there's a cache miss. After a block is cached, it's updated automatically through redo apply from the primary database. Applications are configured so that frequent reads go to the True Cache and writes, and infrequent reads go to the primary database. Automatic cache management and consistency simplify application development, reducing development effort and cost. 

You can deploy Oracle True Cache with Oracle Database Global Data Services (GDS) to manage workload routing, dynamic load balancing, and service failover across multiple True Caches and other database replicas.

True Cache provides the following integrations with Oracle Global Data Services (GDS).

The diagram illustrates a basic True Cache configuration with GDS across two regions. 

The diagram shows SALES GDS Pool in two different deployments setups: Deployment 1 illustrates Active-Active database architecture using Oracle GoldenGate replication. Deployment 2 showcases Active-Passive database architecture utilizing Oracle Active Data Guard. Both the deployments use True Cache to boost query speed of Read-Only (RO) workloads.

Deployment 1 

From a GSM node, use GDSCTL to configure GDS:

GDSCTL>add service -service reporting_srvc -gdspool sales -preferred_all -role TRUE_CACHE -failover_primary

Deployment 2 

GDSCTL>add service -service reporting_srvc -gdspool sales -preferred_all -role TRUE_CACHE -failover_primary

The primary database processes both RW and RO workloads. However, all or specific RO workloads can be offloaded to Oracle True Cache to improve performance. Oracle True Cache processes RO workloads, either fully or selectively, based on configured services. This reduces load on the primary database and enhances query response times


TNS Entry in Client A and Client B tnsnames.ora:

order_entry_srvc =

(DESCRIPTION=(CONNECT_TIMEOUT=90)(RETRY_COUNT=30)(RETRY_DELAY=3)(TRANSPORT_CONNECT_TIMEOUT=3)

 (FAILOVER=ON)

  (ADDRESS_LIST=

    (LOAD_BALANCE=ON)         

    (ADDRESS=(PROTOCOL=TCP)(HOST=GSM-EAST)(PORT=1522))

    (ADDRESS=(PROTOCOL=TCP)(HOST= GSM-EAST2)(PORT= 1522))

    (ADDRESS=(PROTOCOL = TCP)(HOST=GSM-EAST3)(PORT=1522))

)

  (ADDRESS_LIST=

    (LOAD_BALANCE=ON)    

    (ADDRESS=(PROTOCOL=TCP)(HOST=GSM-WEST)(PORT=1522))

    (ADDRESS=(PROTOCOL=TCP)(HOST= GSM-WEST2)(PORT= 1522))

    (ADDRESS=(PROTOCOL = TCP)(HOST=GSM-WEST3)(PORT=1522))

 )

 (CONNECT_DATA=

   (SERVICE_NAME=order_entry_srvc.sales.oradbcloud) (REGION=EAST)

)

TNS Entry in Client C and Client D tnsnames.ora:

reporting_srvc =

(DESCRIPTION=(CONNECT_TIMEOUT=90)(RETRY_COUNT=30)(RETRY_DELAY=3)(TRANSPORT_CONNECT_TIMEOUT=3)

 (FAILOVER=ON)

  (ADDRESS_LIST=

    (LOAD_BALANCE=ON)         

    (ADDRESS=(PROTOCOL=TCP)(HOST=GSM-EAST)(PORT=1522))

    (ADDRESS=(PROTOCOL=TCP)(HOST= GSM-EAST2)(PORT= 1522))

    (ADDRESS=(PROTOCOL = TCP)(HOST=GSM-EAST3)(PORT=1522))

)

  (ADDRESS_LIST=

    (LOAD_BALANCE=ON)    

    (ADDRESS=(PROTOCOL=TCP)(HOST=GSM-WEST)(PORT=1522))

    (ADDRESS=(PROTOCOL=TCP)(HOST= GSM-WEST2)(PORT= 1522))

    (ADDRESS=(PROTOCOL = TCP)(HOST=GSM-WEST3)(PORT=1522))

 )

 (CONNECT_DATA=

   (SERVICE_NAME=reporting_srvc.sales.oradbcloud) (REGION=WEST)

)