胖头鱼的鱼缸

23ai:惊喜的全功能缓存True Cache-3配置使用

数据库管理-第183期 23ai:惊喜的全功能缓存True Cache-3配置使用(20240506)

作者:胖头鱼的鱼缸(尹海文)
Oracle ACE Associate: Database(Oracle与MySQL)
PostgreSQL ACE Partner
10年数据库行业经验,现主要从事数据库服务工作
拥有OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP等认证
墨天轮MVP、认证技术专家、年度墨力之星,ITPUB认证专家、专家百人团成员,OCM讲师,PolarDB开源社区技术顾问,OceanBase观察团成员
圈内拥有“总监”、“保安”、“国产数据库最大敌人”等称号,非著名社恐(社交恐怖分子)
公众号:胖头鱼的鱼缸;CSDN:胖头鱼的鱼缸(尹海文);墨天轮:胖头鱼的鱼缸;ITPUB:yhw1809。
除授权转载并标明出处外,均为“非法”抄袭

演示了如何部署单实例数据库以及搭建True Cache的过程,本期将进一步深入探索True Cache,并对True Cache进行相关配置,使其可以用于加速读取操作。

1 创建service

1.1 主库创建service

需要在主库创建用于访问主库及True Cache的服务,由于数据访问都在PDB级别,因此服务都在PDB中创建:

  • 在单实例数据库使用DBMS_SERVICE来创建

  • 在RAC集群使用srvctl命令带上-true_cache_service参数进行配置,srvctl仅用于集群管理的实例

由于本次都是单实例操作所以用第一种方式来展示:

alter session set container=primpdb1;
DECLARE
db_params dbms_service.svc_parameter_array;
BEGIN
-- create a database application service for True Cache called PROD_TC using PROD_TC tnsname
DBMS_SERVICE.CREATE_SERVICE('PROD_TC', 'PROD_TC', db_params);

-- create a database application service PROD for primary database using PROD tnsname and associate it to the PROD_TC service name using TRUE_CACHE_SERVICE attribute
db_params('true_cache_service') := 'PROD_TC';
DBMS_SERVICE.CREATE_SERVICE('PROD', 'PROD', db_params);

-- or, modify an already existing primary database application service called PROD to associate it to the PROD_TC service name using the TRUE_CACHE_SERVICE attribute
-- db_params('true_cache_service') := 'PROD_TC';
-- DBMS_SERVICE.MODIFY_SERVICE('PROD', db_params);

END;
/

1.2 验证service

SELECT name, true_cache_service FROM DBA_SERVICES WHERE name='PROD' or name='PROD_TC';

Image

1.3 修改True Cache监听

$ORACLE_HOME/network/admin/listener.ora

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = TCCDB1)
(ORACLE_HOME = /u01/app/oracle/product/23.0.0/dbhome_1)
(SID_NAME = TCCDB1)
)
##添加以下内容
(SID_DESC =
(GLOBAL_DBNAME = PROD_TC)
(ORACLE_HOME = /u01/app/oracle/product/23.0.0/dbhome_1)
(SID_NAME = TCCDB1)
)
)

lsnrctl reload
lsnrctl status

Image

1.4 启动service

True Cache节点:

alter session set container=primpdb1;
SELECT database_role FROM v$database;
SELECT name, true_cache_service FROM DBA_SERVICES WHERE name='PROD' or name='PROD_TC';
EXEC DBMS_SERVICE.START_SERVICE('PROD_TC');
SELECT service_id, name FROM v$active_services WHERE name='PROD_TC';

Image

主库:

alter session set container=primpdb1;
SELECT database_role FROM v$database;
SELECT name, true_cache_service FROM DBA_SERVICES WHERE name='PROD' or name='PROD_TC';
EXEC DBMS_SERVICE.START_SERVICE('PROD');
SELECT service_id, name FROM v$active_services WHERE name='PROD';

Image

1.5 验证service

Image
Image

2 访问True Cache

这里使用True Cache中配置的remote_listener参数对应的监听即可常规使用True Cache(这一部分仅从架构图分析得出,有待考证):

sql sh/sh@prod

更多的应用程序侧的配置则参看:https://docs.oracle.com/en/database/oracle/oracle-database/23/odbtc/using-oracle-true-cache-your-applications.html

3 监控True Cache

可以在任意实例使用视图v$true_cache对True Cache进行监控:

SELECT * FROM v$true_cache;

Image

4 DML重定向

如果需要配置DML重定向则需要在pfile中添加:

ADG_REDIRECT_DML=ture

5 启停True Cache

shutdown
startup

Image
这里需要注意,重启True Cache后使用DBMS_SERVICE创建的service不会自启动,可以尝试写一个触发器实现。

6 True Cache

6.1 物理结构

我们在基础概念那期就讲过,True Cache节点仅仅只有控制文件、参数文件和临时文件,这里由于还没有涉及临时表空间使用,所以还没有临时文件产生。
Image

6.2 数据库内容

在True Cache的缓存实例中,PDB的逻辑结构与主库一致,在PRIMPDB1中也可以正常检索到sample schemas中的数据:
Image

总结

本期对True Cache的后续配置以及其本身一些物理及数据相关进行了探索。后续等到可以部署RAC的时候,再来一次。
老规矩,知道写了些啥。