数据库管理-第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中创建:
由于本次都是单实例操作所以用第一种方式来展示:
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';

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

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

主库:
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';

1.5 验证service

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;

4 DML重定向
如果需要配置DML重定向则需要在pfile中添加:
ADG_REDIRECT_DML=ture
5 启停True Cache
shutdown startup
这里需要注意,重启True Cache后使用DBMS_SERVICE创建的service不会自启动,可以尝试写一个触发器实现。
6 True Cache
6.1 物理结构
我们在基础概念那期就讲过,True Cache节点仅仅只有控制文件、参数文件和临时文件,这里由于还没有涉及临时表空间使用,所以还没有临时文件产生。

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

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