本实验假设你已经完成了TimesTen软件的安装,并建立了与Oracle数据库的联通性。如果没有,请参照TimesTen 18.1.2.1 Classic模式安装与配置过程。

本文档于2020/12/21日修正过,安装TimesTen Release 18.1.4.1.0 (64 bit Linux/x86_64)。

本例Oracle数据库版本为12.2.0.1,数据库使用pdb,名为orclpdb。

设置用户

Oracle的Schema用户

如果想使用HR Schema,安装方法参见如何安装Oracle数据库自带的HR Sample Schema或如何使用github安装Oracle 数据库12c Sample Schema (示例Schema)

本例使用oratt作为schema用户,注意是在PDB中建立:

$ sqlplus sys@orclpdb as sysdba
CREATE USER oratt IDENTIFIED BY oracle;
GRANT CREATE SESSION, RESOURCE TO oratt;
alter user oratt quota unlimited on users;

TimesTen端的Schema用户

用户名必须与Oracle端对应,本例为hr。 如未建立,请以实例管理员执行以下命令。

$ ttisql ttdb
create user oratt identified by timesten;
grant create session, create table to oratt;

TimesTen端的Cache管理员

以实例管理员执行以下命令:

CREATE USER cacheadm IDENTIFIED BY timesten;
GRANT CREATE SESSION, CACHE_MANAGER, CREATE ANY TABLE, DROP ANY TABLE TO, ALTER ANY TABLE, DELETE ANY TABLE to cacheadm;

验证登录:

ttisql "uid=cacheadm;pwd=timesten;dsn=ttdb"

Oracle的Cache管理员

此管理员用户名为cacheadm, 口令为oracle。

登录数据库,注意先切换到指定目录 ,因为此目录下有需执行的SQL脚本:

cd $TIMESTEN_HOME/install/oraclescripts
sqlplus sys@orclpdb as sysdba

执行以下SQL:

alter session set container=orclpdb;
CREATE TABLESPACE cachetblsp DATAFILE 'cachetblsp.dbf' SIZE 100M;CREATE USER cacheadm IDENTIFIED BY oracle DEFAULT TABLESPACE cachetblsp QUOTA UNLIMITED ON cachetblsp;@grantCacheAdminPrivileges "cacheadm"

输出如下:

SQL> @grantCacheAdminPrivileges "cacheadm"Please enter the administrator user id
The value chosen for administrator user id is cacheadm***************** Creation of TT_CACHE_ADMIN_ROLE starts ******************
0. Creating TT_CACHE_ADMIN_ROLE role
** Creation of TT_CACHE_ADMIN_ROLE done successfully **
***************** Initialization for cache admin begins ******************
0. Granting the CREATE SESSION privilege to CACHEADM
1. Granting the TT_CACHE_ADMIN_ROLE to CACHEADM
2. Granting the DBMS_LOCK package privilege to CACHEADM
3. Granting the DBMS_DDL package privilege to CACHEADM
4. Granting the DBMS_FLASHBACK package privilege to CACHEADM
5. Granting the CREATE SEQUENCE privilege to CACHEADM
6. Granting the CREATE CLUSTER privilege to CACHEADM
7. Granting the CREATE OPERATOR privilege to CACHEADM
8. Granting the CREATE INDEXTYPE privilege to CACHEADM
9. Granting the CREATE TABLE privilege to CACHEADM
10. Granting the CREATE PROCEDURE  privilege to CACHEADM
11. Granting the CREATE ANY TRIGGER  privilege to CACHEADM
12. Granting the GRANT UNLIMITED TABLESPACE privilege to CACHEADM
13. Granting the DBMS_LOB package privilege to CACHEADM
14. Granting the SELECT on SYS.ALL_OBJECTS privilege to CACHEADM
15. Granting the SELECT on SYS.ALL_SYNONYMS privilege to CACHEADM
16. Checking if the cache administrator user has permissions on the default
tablespacePermission exists
18. Granting the CREATE TYPE privilege to CACHEADM
19. Granting the SELECT on SYS.GV$LOCK privilege to CACHEADM
20. Granting the SELECT on SYS.GV$SESSION privilege  to CACHEADM
21. Granting the SELECT on SYS.DBA_DATA_FILES privilege  to CACHEADM
22. Granting the SELECT on SYS.USER_USERS privilege  to CACHEADM
23. Granting the SELECT on SYS.USER_FREE_SPACE privilege  to CACHEADM
24. Granting the SELECT on SYS.USER_TS_QUOTAS privilege  to CACHEADM
25. Granting the SELECT on SYS.USER_SYS_PRIVS privilege  to CACHEADM
26. Granting the SELECT on SYS.V$DATABASE privilege  to CACHEADM (optional)
27. Granting the SELECT ANY TRANSACTION privilege to CACHEADM
********* Initialization for cache admin user done successfully *********

在TimesTen中缓存Oracle Cache管理员的口令

使用timesten cache管理员登录:

$ ttIsql "DSN=ttdb;UID=cacheadm;PWD=timesten;OraclePWD=oracle"
call ttCacheUidPwdSet('cacheadm','oracle');

如果出现以下错误,请查看DNS文件中OracleNetServiceName的设置,以及是否与tnsnames.ora中保持一致:

Command> call ttCacheUidPwdSet('cacheadm','oracle');5220: Permanent Oracle connection failure error in OCIServerAttach: ORA-12154: TNS:could not resolve the connect identifier specified rc = -15935: Could not validate Oracle login: uid = CACHEADM, pwd = HIDDEN, OracleNetServiceName = orcl, TNS_ADMIN = "/home/oracle/tt181/conf", ORACLE_HOME= "/home/oracle/tt181/install/ttoracle_home/instantclient_12_1"
The command failed.

缓存组测试

在Oracle中建立基础表

基础表即被缓存的表。

$ sqlplus oratt/oracle@orclpdbCREATE TABLE readtab (keyval NUMBER NOT NULL PRIMARY KEY, str VARCHAR2(32));
CREATE TABLE writetab (pk NUMBER NOT NULL PRIMARY KEY, attr VARCHAR2(40));

插入数据:

INSERT INTO readtab VALUES (1, 'Hello');
INSERT INTO readtab VALUES (2, 'World');INSERT INTO writetab VALUES (100, 'TimesTen');
INSERT INTO writetab VALUES (101, 'CACHE');
COMMIT;

赋权给缓存管理员:

GRANT SELECT ON readtab TO cacheadm;
GRANT SELECT ON writetab TO cacheadm;
GRANT INSERT ON writetab TO cacheadm;
GRANT UPDATE ON writetab TO cacheadm;
GRANT DELETE ON writetab TO cacheadm;

读缓存组

先启动缓存代理:

$ ttAdmin -cacheStart ttdb$ ttisql "uid=cacheadm;pwd=timesten;dsn=ttdb;oraclepwd=oracle"
CREATE READONLY CACHE GROUP readcacheAUTOREFRESH INTERVAL 5 SECONDSFROM oratt.readtab(keyval NUMBER NOT NULL PRIMARY KEY, str VARCHAR2(32));

监控:

Command> cachegroups
Cache Group CACHEADM.READCACHE:Cache Group Type: Read OnlyAutorefresh: YesAutorefresh Mode: IncrementalAutorefresh State: PausedAutorefresh Interval: 5 SecondsAutorefresh Status: okAging: No aging definedRoot Table: ORATT.READTABTable Type: Read Only1 cache groups found.

写缓存组

先建立缓存组:

$ ttisql "uid=cacheadm;pwd=timesten;dsn=ttdb;oraclepwd=oracle"CREATE DYNAMIC ASYNCHRONOUS WRITETHROUGH CACHE GROUP writecacheFROM oratt.writetab(pk NUMBER NOT NULL PRIMARY KEY, attr VARCHAR2(40));

然后启动复制代理

$ ttAdmin -repStart ttdb

注意其顺序,如果启动复制代理时,没有任何写缓存组,则报错:

[oracle@ttserver ~]$ ttadmin -repStart ttdb
*** [TimesTen][TimesTen 18.1.4.1.0 ODBC Driver][TimesTen]TT8191: This database (TTDB on TTSERVER) is not involved in a replication scheme -- file "eeMisc.c", lineno 2987, procedure "sbEeGridErrorProc"
*** ODBC Error = S1000, TimesTen Error = 8191

测试

读缓存组

刷新操作后,Oracle与TimesTen数据一致:

$ ttisql "uid=cacheadm;pwd=timesten;dsn=ttdb;oraclepwd=oracle"
LOAD CACHE GROUP readcache COMMIT EVERY 256 ROWS;

在Oracle端更新:

$ sqlplus oratt/oracle@orclpdbINSERT INTO readtab VALUES (3, 'Welcome');
DELETE FROM readtab WHERE keyval=2;
UPDATE readtab SET str='Hi' WHERE keyval=1;
COMMIT;

5秒后,两边数据一致。
以下是Oracle端修改前后的数据:

Command> select * from oratt.readtab;
< 1, Hello >
< 2, World >
2 rows found.
Command> select * from oratt.readtab;
< 1, Hi >
< 3, Welcome >
2 rows found.

写缓存组

注意到写缓存组的属性是Dynamic:

Cache Group CACHEADM.WRITECACHE:Cache Group Type: Asynchronous Writethrough (Dynamic)Autorefresh: NoAging: LRU onRoot Table: ORATT.WRITETABTable Type: Propagate3 cache groups found.

因此,最初timesten中的表并没有数据,但通过主键select时可动态加载数据:

$ ttisql "uid=cacheadm;pwd=timesten;dsn=ttdb;oraclepwd=oracle"
Command> SELECT * FROM writetab;
0 rows found.
Command> SELECT * FROM writetab where pk=100;
< 100, TimesTen >

在timesten端更新数据:

INSERT INTO oratt.writetab VALUES (102, 'Cache');
DELETE FROM oratt.writetab WHERE pk=101;
UPDATE oratt.writetab SET attr='Oracle' WHERE pk=100;
COMMIT;

然后在Oracle端看到的数据如下:

SQL> select * from writetab;PK ATTR
---------- ----------------------------------------100 Oracle102 Cache

清理

  1. 停止复制代理
  2. 删除缓存组
  3. 停止缓存代理
  4. 销毁Oracle数据库

参考

https://docs.oracle.com/database/timesten-18.1/TTCAC/gettingstarted.htm#TTCAC144

Timesten Classic 18.1 建立缓存组相关推荐

  1. TimesTen Classic 18c 安装与配置过程

    参考 Complete example for installing and uninstalling TimesTen Classic 概述 TimesTen 18.1.2.1版是首个兼容Times ...

  2. TimesTen 应用层数据库缓存学习:16. Aging策略与AWT缓存组

    本文讨论如果一个Cache Table设定了Aging策略,那么Aging导致的缓存中数据的删除是否会影响到Oracle数据库? 如果是只读缓存组,当然是不会影响到Oracle的.如果是AWT缓存组, ...

  3. 停止复制代理后AWT缓存组的行为

    AWT缓存组中尽管大多数时候数据是从TimesTen到Oracle,但也存在数据从Oracle到TimesTen的情形. 数据从TimesTen下沉到Oracle依靠复制代理,数据从Oracle到Ti ...

  4. 【Springboot 入门培训 】#18 SpringBoot Cache 缓存实现

    目录 1 EhCache3 1 执行环境设置 2 Ehcache3 应用 3 Ehcache3 xml设置 2 Caffeine 3 Infinispan 1 SpringBoot嵌入式缓存 2 Ja ...

  5. OpenCV HDF和建立群组Group

    OpenCV HDF和建立群组 HDF和建立群组 目标 源代码 解释 结果 HDF和建立群组 目标 本教程将向您展示: 如何创建HDF5文件? 如何建立群组? 如何检查给定的组是否存在? 如何创建一个 ...

  6. 罗克韦尔AB PLC 通过RSLinx Classic与PLC建立通信的具体方法步骤

    罗克韦尔AB PLC 通过RSLinx Classic与PLC建立通信的具体方法步骤 本次我们使用以太网通信的方式,通过RSLinx Classic实现与AB PLC的通信. 具体方法可参考以下内容: ...

  7. 18届完全模型组预总

    文章目录 18届完全模型组预总: 一.室内赛道 规则导读: • 重点提示: 必须在电路板正面敷铜面放置队伍信息,包括学校名称.队伍名称.制作日期. 后续规则: 摄像头组:传感器除了负压电磁组的传感器之 ...

  8. 如何构建计算机家庭组,windows7家庭组共享设置方法_windows7如何建立家庭组共享-win7之家...

    家庭组是win7系统电脑上家庭网络可以共享文件和打印机的一组计算机,使用家庭组可以使共享变得比较简单,从而使用与家庭组中的其他人进行共享文件,而且自己保持有权限作用,那么windows7如何建立家庭组 ...

  9. php 微信 群聊,vbot微信机器人微信聊天消息详解(18):群组变动

    <vbot微信机器人微信聊天消息详解(18):群组变动>要点: 本文介绍了vbot微信机器人微信聊天消息详解(18):群组变动,希望对您有用.如果有疑问,可以联系我们. 当微信群新增了成员 ...

  10. Server系列18:如何通过组策略赋予domain user受限网络管理权限?

    如何通过组策略赋予domain user受限网络管理权限? 为实现需求: 1.为部分域用户赋予权限,用于创建多用户使用的网络连接(PPTP-×××)或者是多用户拨号连接. 关于此需求,这边要用到NCP ...

最新文章

  1. ES的跨索引查询有多便利?对比下分库分表、分片更直观
  2. pythonasyncio在哪个版本好_理解Python asyncio的简洁方式
  3. springboot不能加载https的证书文件(二)
  4. 这只猫在云端定居了?边缘计算在天猫精灵云应用上的落地实践
  5. 【例1】 0/1背包《信息学奥赛一本通》【解法一】 02
  6. LeetCode 125. Valid Palindrome
  7. Scala Object
  8. UCHome风格模版 框架核心代码提取
  9. POJ 3617 Best Cow Line
  10. 软件测试用什么cpu,给你的CPU做体检!主流CPU测试软件使用宝典
  11. Linux软RAID换硬盘
  12. jmeter 保存响应到文件
  13. sencha touch 百度地图扩展(2014-12-17)
  14. 老李聊股:中油工程(第三篇)
  15. 在英文版的remix部署,拿到部署地址在中文版的remix 中 合约地址中输入地址,再部署可以实现调用 java调用智能合约Unmatched arguments from index 2
  16. 生成模型笔记预备知识笔记——概率分布变换
  17. Linux下常用打流方式
  18. 企业办理两化融合有什么优势?
  19. 杭电ACM-LCY算法进阶培训班-专题训练09
  20. oracle 查询缓存是否开启,数据库强制的开启全库缓存模式

热门文章

  1. Pyspider 框架的用法
  2. 用html做一个图表,04做一个简单的图表.html
  3. android谷歌打印插件下载地址,谷歌浏览器打印插件:Print Plus
  4. Lodop打印控件介绍
  5. win10下载ios及安装方法
  6. 电量统计(1)-原理
  7. pyboard :红外遥控模块,class UART
  8. 学生图书管理系统(附源代码及数据库)
  9. U8记账凭证修改方法汇总
  10. Python爬虫从入门到精通:(14)验证码识别_Python涛哥