注意:
- 本教程需要访问 Oracle Cloud。要注册免费账户,请参阅开始使用 Oracle Cloud Infrastructure 免费套餐。
- 它对 Oracle Cloud Infrastructure 身份证明、租户和区间使用示例值。完成实验室后,请使用特定于云环境的那些值替换这些值。
使用 Oracle Database 23ai 实施 Oracle True Cache 服务
简介
Oracle True Cache 是 Oracle Database 的内存中、一致且自动管理的 SQL 和键值(对象或 JSON)高速缓存。
Oracle True Cache 是位于 Oracle Database 前面的内存中只读高速缓存。与 Oracle Active Data Guard 一样,Oracle True Cache 是主数据库的功能完备的只读副本,只是它大多是无盘的。
现代应用通常需要大量连接和快速、低延迟地访问数据。常用的方法是将高速缓存放在数据库前面,因为应用程序通常执行比更新更多的读取,并且可以从高速缓存读取而不会影响数据库性能。例如,航空公司预订系统在人们购买航班时频繁读取数据,如果与数据库中的数据相比不是最新的数据,那就没问题了。只有当有人预订航班时,应用程序才需要访问最新数据。
与传统高速缓存不同,Oracle True Cache 会自动将最常访问的数据保存在高速缓存中,并且会使高速缓存与主数据库、同一高速缓存中的其他对象以及其他高速缓存保持一致。它缓存所有 Oracle Database 对象和数据类型,包括 JSON。
由于 Oracle True Cache 实施了 Oracle Database 安全策略,因此您可以控制对高速缓存的访问。这使您能够缓存敏感数据,如私人个人信息,您可能通常不会缓存。
环境详细信息:
-
主数据库:
-
数据库版本:
23.5.0.24
-
操作系统:虚拟机 (Virtual Machine,VM) 数据库系统。
-
Oracle True Cache 实例:1 个节点 Oracle Database Configuration Assistant (DBCA) 节点,具有 Oracle Database 23ai 数据库软件版本 (NON-ASM)。
-
目标
- 实施 Oracle True Cache 服务并将只读(选择)应用程序请求重定向到 Oracle True Cache 实例。
先决条件
-
设置网络路径以使用 Oracle True Cache 节点中的轻松连接 (EZConnect) 字符串访问主(源)数据库。
-
确保主数据库在归档日志记录 (ARCHIVELOG) 模式下在主节点上运行。
任务 1:复制密码文件和透明数据加密 (Transparent Data Encryption,TDE) Wallet
将口令文件以及(可选)TDE wallet 从主数据库复制到 Oracle True Cache 节点。可以使用以下任一方法:
-
手动将主数据库密码文件(和可选的 TDE wallet)复制到 Oracle True Cache 节点上的任何位置。
或者
-
在主数据库上运行 DBCA 命令,将口令文件(和可选的 TDE wallet)打包到配置 BLOB 文件中。然后将该文件复制到 Oracle True Cache 节点,并确保该文件归 Oracle 主目录用户所有。
使用以下命令准备主数据库上的配置 BLOB 文件。
mkdir -p /tmp/passconfig $ORACLE_HOME/bin/dbca -configureDatabase -prepareTrueCacheConfigFile -sourceDB cdb1db1 -trueCacheBlobLocation /tmp/passconfig -silent
输出示例:
mkdir -p /tmp/passconfig [oracle@proddb ~]$ $ORACLE_HOME/bin/dbca -configureDatabase -prepareTrueCacheConfigFile -sourceDB DB1218 -trueCacheBlobLocation /tmp/passconfig -silent Enter password for the TDE wallet: Session ID of the current execution is: 1 Log file location: /u01/app/oracle/cfgtoollogs/dbca/DB1218_xts_iad/trace.log_2024-12-18_12-47-36PM_42681 ----------------- Running Initialization job Completed Initialization job 33% complete ----------------- Running Validate_dataguard job Skipping. Job is detected as not applicable. 40% complete ----------------- Running Validate_db_version job Completed Validate_db_version job 47% complete ----------------- Running Validate_tde_credentials job Completed Validate_tde_credentials job 53% complete ----------------- Running Validate_true_cache_instance job Completed Validate_true_cache_instance job 60% complete ----------------- Running Validate_archive_log_mode job Completed Validate_archive_log_mode job 67% complete ----------------- Running Prepare_blob job Completed Prepare_blob job 100% complete ---------- PLUGIN NOTES ---------- Successfully created blob file: /tmp/passconfig/blob_2024-12-18_12-47-36PM.tar.gz ---------- END OF PLUGIN NOTES ---------- Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/DB1218_xts_iad/DB1218_xts_iad0.log" for further details. [oracle@proddb ~]$
将 BLOB 文件复制到 Oracle True Cache 实例节点。
scp -i <private_key> <blob_file_name> opc@<true cache instance ip>:/tmp
任务 2:在 Oracle True Cache 节点上删除不需要的数据库
在 Oracle True Cache 节点上,删除 Oracle True Cache 主机上的现有数据库(如果数据库已存在且不需要)。
sqlplus / as sysdba
SQL> shut immediate
SQL> startup mount restrict
SQL> drop database;
任务 3:测试来自 True Cache 主机的主数据库连接字符串
运行以下命令以从 Oracle True Cache 主机测试主数据库连接字符串。
sqlplus sys/<sys_password>@<primary_database_hostname>:1521/<primary_database_service> as sysdba
任务 4:配置并启动 Oracle True Cache
在 Oracle True Cache 节点上,运行 -createTrueCache
命令以完成 Oracle True Cache 配置并启动 Oracle True Cache。
$ORACLE_HOME/bin/dbca -createTrueCache -gdbName true_cache_global_name -sid true_cache_sid -sourceDBConnectionString primary_db_easy_connect_string -trueCacheBlobFromSourceDB true_cache_config_blob_path -sgaTargetInMB sga_memory_size -pgaAggregateTargetInMB pga_memory_size -tdeWalletLoginType AUTO_LOGIN -listeners listener_name -silent
输出示例:
[oracle@test1 ~]$ $ORACLE_HOME/bin/dbca -createTrueCache -gdbName test1 -sid test1 -sourceDBConnectionString proddb.sub12101216100.dbnet.oraclevcn.com.:1521/DB1218_xts_iad.sub12101216100.dbnet.oraclevcn.com -trueCacheBlobFromSourceDB /home/oracle/blob_2024-12-18_12-47-36PM.tar.gz -sgaTargetInMB 25000 -pgaAggregateTargetInMB 12000 -initParams db_create_file_dest=/u02/app/oracle/oradata -listeners LISTENER -silent
Enter Remote DB SYS user password:
Enter password for the source database TDE wallet:
Session ID of the current execution is: 1
Log file location: /u01/app/oracle/cfgtoollogs/dbca/test1/trace.log_2024-12-18_01-01-33PM_61716
-----------------
Running Extract_password_file_from_blob_file job
Completed Extract_password_file_from_blob_file job
25% complete
-----------------
Running Create_static_listener job
Skipping. Job is detected as not applicable.
38% complete
-----------------
Running Register_listener job
Completed Register_listener job
50% complete
-----------------
Running Extract_tde_wallet_from_blob_file job
Completed Extract_tde_wallet_from_blob_file job
54% complete
-----------------
Running Setup_required_directories job
Skipping. Job is detected as not applicable.
57% complete
-----------------
Running Create_pfile job
Completed Create_pfile job
61% complete
-----------------
Running Start_nomount_instance job
Completed Start_nomount_instance job
64% complete
-----------------
Running Create_TDE_wallet job
Completed Create_TDE_wallet job
68% complete
-----------------
Running Create_truecache_instance job
Completed Create_truecache_instance job
71% complete
-----------------
Running Add_oratab_entry job
Completed Add_oratab_entry job
75% complete
-----------------
Running Reopen_wallet job
Completed Reopen_wallet job
100% complete
---------- PLUGIN NOTES ----------
Successfully created True Cache.
In order to complete the operation,configure the True Cache database application services from the primary database.
---------- END OF PLUGIN NOTES ----------
Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/test1/test1.log" for further details.
[oracle@test1 ~]$
任务 5:为 Oracle True Cache 创建和验证可插入数据库 (PDB) 级别应用程序服务
创建并启动要与 Oracle True Cache 服务一起使用的主数据库(在 PDB 级别)应用程序服务,并验证服务是否正在运行。
对于单实例主数据库,请使用 DBMS_SERVICE
PL/SQL 程序包。对于特定于 PDB 的服务,请在使用 DBMS_SERVICE
启动服务之前连接到特定 PDB,或在会话中设置正确的 PDB 容器。
输出示例:
alter session set container=<PDB_NAME>;
show pdbs
BEGIN
DBMS_SERVICE.CREATE_SERVICE('SALES', 'SALES');
DBMS_SERVICE.START_SERVICE('SALES');
END;
/
PL/SQL procedure successfully completed.
任务 6:在主数据库上配置 Oracle True Cache
运行带有 -configureTrueCacheInstanceService
参数的 dbca -configureDatabase
命令以在主数据库上配置 Oracle True Cache。这将配置主数据库上的 Oracle True Cache 数据库应用程序服务,然后在 Oracle True Cache 上启动 Oracle True Cache 服务。
对每个 Oracle True Cache 数据库应用程序服务运行以下命令。
$ORACLE_HOME/bin/dbca -configureDatabase -configureTrueCacheInstanceService -sourceDB primary_db_sid_or_db_unique_name -trueCacheConnectString true_cache_easy_connect_string -trueCacheServiceName true_cache_service_name -serviceName primary_db_service_name -pdbName primary_pdb_name -silent
输出示例:
[oracle@proddb ~]$ $ORACLE_HOME/bin/dbca -configureDatabase -configureTrueCacheInstanceService -sourceDB DB1218 -trueCacheConnectString test1.sub12101216100.dbnet.oraclevcn.com:1521/test1.sub12101216100.dbnet.oraclevcn.com -trueCacheServiceName sales_tc1 -serviceName sales -pdbName DB1218_PDB1 -silent
Session ID of the current execution is: 7
Log file location: /u01/app/oracle/cfgtoollogs/dbca/DB1218/trace.log_2024-12-18_02-39-50PM_60536
-----------------
Running Initialization job
Enter SYS user password:
Completed Initialization job
33% complete
-----------------
Running Validate_true_cache_instance_connection job
Completed Validate_true_cache_instance_connection job
37% complete
-----------------
Running Validate_dataguard job
Skipping. Job is detected as not applicable.
41% complete
-----------------
Running Validate_db_version job
Completed Validate_db_version job
44% complete
-----------------
Running Validate_true_cache_instance job
Completed Validate_true_cache_instance job
48% complete
-----------------
Running Validate_archive_log_mode job
Completed Validate_archive_log_mode job
52% complete
-----------------
Running Validate_pdb job
Completed Validate_pdb job
56% complete
-----------------
Running Validate_primary_db_service job
Completed Validate_primary_db_service job
59% complete
-----------------
Running Validate_true_cache_db_service job
Completed Validate_true_cache_db_service job
63% complete
-----------------
Running Validate_true_cache_instance_open_mode job
Completed Validate_true_cache_instance_open_mode job
67% complete
-----------------
Running Create_truecache_service job
Completed Create_truecache_service job
73% complete
-----------------
Running Add_network_entry job
Completed Add_network_entry job
80% complete
-----------------
Running Modify_primary_service job
Completed Modify_primary_service job
87% complete
-----------------
Running Start_truecache_service job
Completed Start_truecache_service job
93% complete
-----------------
Running Enable_service_registration job
Completed Enable_service_registration job
100% complete
Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/DB1218/DB12183.log" for further details.
[oracle@proddb ~]$
任务 7:在 Oracle True Cache 节点上启动服务
运行以下命令以在 Oracle True Cache 实例节点上启动服务。
alter session set container=<PDB_NAME>;
show pdbs
BEGIN
DBMS_SERVICE.START_SERVICE('sales_tc1');
END;
/
任务 8:更新主数据库中的参数
-
更新主数据库
listener.ora
文件中的以下参数。VALID_NODE_CHECKING_REGISTRATION_LISTENER = OFF REGISTRATION_INVITED_NODES_LISTENER=(<true_cache_instance_ip>)
-
在主数据库服务器上重新启动或重新加载监听程序。
任务 9:验证主数据库监听程序中的 Oracle True Cache 服务
运行以下命令以验证 Oracle True Cache (sales_tc
) 服务是否正在主数据库监听程序下运行。
SQL> select name,open_mode,database_role from gv$database;
NAME OPEN_MODE DATABASE_ROLE
------------------------------ -------------------- ----------------
DB1218 READ WRITE PRIMARY
SQL> select * from v$true_cache;
MY_DG_ID REMOTE_DG_ID DEST_ID TRUE_CACHE PRIMARY_NAME STATUS REMOTE_VERSION CON_ID
---------- ------------ ---------- ---------- -------------------- ---------- ------------------ ----------
4079357444 576841986 2 test1 DB1218_xts_iad HEALTHY 0.0.0.0.0 0
4079357444 2149296628 3 test2 DB1218_xts_iad HEALTHY 0.0.0.0.0 0
SQL> SELECT name, true_cache_service FROM DBA_SERVICES WHERE name='sales';
NAME TRUE_CACHE_SERVICE
------------------------------ ------------------------------
sales sales_tc2
[oracle@proddb ~]$ lsnrctl status LISTENER|grep -i sales_tc1
Service "sales_tc1.sub12101216100.dbnet.oraclevcn.com" has 1 instance(s).
[oracle@proddb ~]$
任务 10:验证 Oracle True Cache 实例节点上的 True Cache 服务
运行以下命令以验证 Oracle True Cache (sales_tc
) 服务是否正在 Oracle True 高速缓存实例节点上运行。
SQL> select name,open_mode,database_role from gv$database;
NAME OPEN_MODE DATABASE_ROLE
--------- -------------------- ----------------
DB1218 READ ONLY WITH APPLY TRUE CACHE
SQL> select * from v$true_cache;
MY_DG_ID REMOTE_DG_ID DEST_ID TRUE_CACHE PRIMARY_NAME STATUS REMOTE_VERSION CON_ID
---------- ------------ ---------- ---------- -------------------- ---------- ------------------ ----------
576841986 4079357444 0 test1 DB1218_xts_iad HEALTHY 23.0.0.0.0 0
[oracle@test1 ~]$ lsnrctl status LISTENER|grep sales_tc
Service "sales_tc1.sub12101216100.dbnet.oraclevcn.com" has 1 instance(s).
[oracle@test1 ~]$
任务 11:测试 Oracle True Cache 服务
向应用程序中添加以下透明网络基板 (Transparent Network Substrate,TNS) 条目。
TEST_TC =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = test1.sub12101216100.dbnet.oraclevcn.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = sales_tc1.sub12101216100.dbnet.oraclevcn.com)
)
)
sqlplus sys/<sys_password>@TEST_TC as sysdba
select name,open_mode,database_role from v$database;
show pdbs
相关链接
确认
- Authors — Pavan Yennampelli(Oracle 北美云服务— NACIE 高级云工程师)、Sravan Kumar K B(Oracle 北美云服务— NACIE 高级云工程师)、Bandari Chandu(Oracle 北美云服务— NACIE 高级云工程师)、Anupam Abhishek(Oracle 北美云服务— NACIE 高级云工程师)
更多学习资源
浏览 docs.oracle.com/learn 上的其他实验室,或者访问 Oracle Learning YouTube 渠道上的更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 成为 Oracle Learning Explorer。
有关产品文档,请访问 Oracle 帮助中心。
Implement Oracle True Cache Service with Oracle Database 23ai
G24567-01
January 2025