TimesTen缓存组
dingdingfish
能将忙事成闲事 不薄今人爱古人
展开
-
TimesTen Aging会清理未来的数据吗
前一阵用户问一个问题,如果基于时间窗的缓存组中插入了未来的数据,此数据会被清理吗?我感觉不会,下面来验证以下。不过我不准备用缓存组来测试了,直接用缓存表吧。反正概念一样。先建一个带非空时间字段的表t1。-- Database is in Oracle type modecreate table ORATT.T1 ( C1 VARCHAR2(4000 BYTE) NOT INLINE, C2 DATE NOT NULL DEFAULT sysdate);定义基于时间原创 2021-06-18 13:50:03 · 152 阅读 · 0 评论 -
TimesTen Classic缓存组和NOT NULL
昨天在用户处测试,虽然最终完成,中间磕磕碰碰很多,其实主要就是列的定义需要NOT NULL。以下列举了两种情况:在为缓存组选择主键或唯一索引时,主键不必说,因为主键是不允许NULL的;如果选择唯一索引,唯一索引包含的所有键都必须NOT NULL。在Oracle端,我是通过SQL Developer在线改的表定义,时间最长的1分多钟改完。定义Aging,Aging列也要求NOT NULL。...原创 2021-05-12 13:25:00 · 179 阅读 · 0 评论 -
TimesTen缓存管理员用户到底需要什么权限?
TimesTen缓存组做初始化时需要用SYS用户执行一个脚本,即$TIMESTEN_HOME/install/oraclescripts下的grantCacheAdminPrivileges.sql。其实从此脚本输出中也可以看到一些信息:SQL> @grantCacheAdminPrivileges "cacheadm"Please enter the administrator user idThe value chosen for administrator user id is cac原创 2021-01-13 12:09:12 · 353 阅读 · 0 评论 -
将TimesTen缓存组aging lifetime设置更长会自动加载历史数据吗?
已有一个缓存组,aging lifetime设为1年,数据已加载。如果将aging lifetime设为2年,1年前到2年内的数据会自动刷新到缓存组吗?通过实验,发现不行!如果将aging lifetime设为更长,希望所有数据都能进入缓存组,方法是卸载缓存组后,再加载缓存组。这是由于aging是TimesTen表的属性,缓存代理刷新数据是根据Oracle端的触发器,修改aging lifetime是不会去动Oracle端的跟踪表的。修改aging lifetime示例如下:alter table原创 2021-01-03 19:51:13 · 197 阅读 · 1 评论 -
缓存表的数据类型可以与Oracle不一样吗? (续)
上一篇文章缓存表的数据类型可以与Oracle不一样吗?讲到:如果基础表数据类型为数字整型,则在建立缓存组时,可以指定对应的整型如果基础表数据类型为VARCHAR(N),在建立缓存组时指定类型为VARCHAR(M),M不等于N,也会失败。但我对第2点不甘心,因为当时指定的M<N,显然也是不合理的。这一次我做了3个实验。所有的实验都是通过命令行执行的,因为SQL Developer的向导禁止你这么做。实验1:增加VARCHAR宽度 - 失败指定M>N,错误和上一次一样。看来对于VAR原创 2020-12-23 22:22:48 · 181 阅读 · 0 评论 -
TimesTen只读缓存组在初始加载时会检查Aging吗?
先说为什么要问这个问题,用户的Oracle数据库中有一个非常大的表,存1年的数据,每天1000万条记录。现在需要用TimesTen来做只读缓存,但只需缓存最近一个月的数据,因此申请的内存也只够缓存1个月的。那么如果TimesTen在初始加载时,先加载所有数据,然后再使用Aging清除数据。那么加载所有数据这一步就会失败,因为内存不过;而且这么做显得有点多余。所以按照逻辑来说,应该在初始加载时就会利用Aging排除掉不满足条件的数据。下面来验证一下。先在Oracle中创建基础表,然后插入1000条数据原创 2020-12-23 20:59:01 · 160 阅读 · 0 评论 -
TimesTen只读缓存组可以部分加载吗
先说结论吧,对于auto refresh的只读缓存组,如果类型是Dynamic类型的,就可以部分加载。下面我们通过实验来说明,Oracle中的从基础表为orders,然后插入1000条初始数据create table orders(ord_num int primary key,ship_time date not null);grant select on orders to cacheadm;DECLARE ord_num NUMBER;BEGIN FOR i IN 1..1原创 2020-12-23 20:32:58 · 206 阅读 · 0 评论 -
TimesTen在Oracle数据库中安装的对象及清理
和此文相关的文章为TimesTen 应用层数据库缓存学习:20. TimesTen异常时的缓存清理建立TimesTen只读缓存组时,会在Oracle数据库中创建用户,建立对象并赋权,本文讲述如何查看这些对象。另外,如果TimesTen并未正常的删除缓存组,或正常卸载时都需要清理这些对象。相关脚本位于$TIMESTEN_HOME/install/oraclescripts目录。$ cd $TIMESTEN_HOME/install/oraclescripts/$ lscacheCleanUp.sq原创 2020-12-21 14:18:49 · 377 阅读 · 0 评论 -
Timesten Classic 18.1 建立缓存组
本实验假设你已经完成了TimesTen软件的安装,并建立了与Oracle数据库的联通性。如果没有,请参照TimesTen 18.1.2.1 Classic模式安装与配置过程。本例Oracle数据库版本为12.2.0.1,数据库使用pdb,名为orclpdb。设置用户Oracle的Schema用户此处使用了HR Schema,安装方法参见如何安装Oracle数据库自带的HR Sample Schema或如何使用github安装Oracle 数据库12c Sample Schema (示例Schema)原创 2020-12-18 15:30:14 · 504 阅读 · 0 评论 -
TimesTen 数据库复制学习:12. Classic带缓存组复制的几种固定架构模式
先说明一点,对于classic复制,是不区分普通表和缓存表的,所以普通表和缓存表都可以混搭作为复制的源或目标。置于缓存表后端与Oracle的同步,对于classic复制是透明的。从只读缓存表到非缓存表的复制拓扑如下:示例如下:SQL> select * from a; ID NAME---------- --------------------------------原创 2016-07-07 23:01:41 · 3055 阅读 · 0 评论 -
TimesTen 数据库复制学习:13. 设置复制系统
设置复制环境本章全部适用于classic复制,只有少部分适用于ASP复制。创建数据库保持源数据库存在,源复制表存在,目标数据库的DSN存在。然后建立目标的表: * 若是AWT复制,目标表通过ttRepAdmin -duplicate 建立 * 若是Classic复制,目标表通过SQL建立复制数据库的连接属性DatabaseCharacterSet : 必须相同,复制不字符集转换 Replica原创 2016-07-07 23:04:36 · 3548 阅读 · 0 评论 -
一个有趣的TimesTen大数据案例-美国邮政
最近看到一个TimesTen的案例,是关于美国邮政的。 看看美国邮政网站上的两张邮票。Shirley Temple, 我喜欢的童星。猴票,和猴有啥关系? 好了,言归正传,此案例有三点吸引了我: 1. 贴上了大数据的标签 2. 内存容量较大 3. 后面的电子邮票业务下面分别说说这几点。TimesTen大数据处理平均每秒处理2000封邮件,峰值达到74000封,扫描信息传递到后端数据分析系统,原创 2016-08-29 15:11:27 · 1919 阅读 · 0 评论 -
TimesTen支持缓存视图吗
问这个问题的初衷是希望能够在Oracle中通过视图关联多张表,然后将结果集缓存到TimesTen.不过答案是不支持,在Cache User Guide第245页,明确指出: TimesTen supports views and materialized views, but it cannot cache an Oracle Database view. TimesTen can c原创 2017-03-02 18:05:22 · 917 阅读 · 0 评论 -
TimesTen如何缓存两个用户的Schema
如果Oracle数据库中有两张表,分别属于不同的Schema, TimesTen是否可以缓存? 答案是可以的,来看一个例子,顺便了解一下概念;首先在Oracle数据库中建立两个用户user1和user2,并且分布在两个用户下建表t1和t2:SQL> create user user1 identified by oracle;User created.SQL> create user user原创 2017-03-06 17:14:37 · 940 阅读 · 0 评论 -
停止复制代理后AWT缓存组的行为
AWT缓存组中虽然大多数时候数据是从TimesTen到Oracle,但也存在数据从Oracle到TimesTen的情形。数据从TimesTen下沉到Oracle依靠复制代理,数据从Oracle到TimesTen的刷新依赖缓存代理。由于AWT缓存组不能定义autorefresh,因此缓存代理只用于手工Load或Refresh操作。如果停止复制代理,然后在两个数据库中均插入数据,会出现什么情况?为此做了原创 2017-03-24 15:36:22 · 2255 阅读 · 0 评论 -
建立缓存组时可以改变数据类型吗
建立缓存组时,缓存表和基础表的表名,属主和列名必须严格一致,不允许改变。 唯一可以改变的就是列的数据类型,主要是针对NUMBER到TimesTen数据库整数类型的映射。来看一个示例,基础表为VPN_USERS,使用SQL Developer建缓存组时,可以看到VPN_ID和VPN_NB这两列数据类型可以改变。以列VPN_NB为例,可以在缓存组中设定的数据类型为NUMBER(5), TT_INTEG原创 2017-03-15 12:19:16 · 1018 阅读 · 0 评论 -
TimesTen 应用层数据库缓存学习:20. TimesTen异常时的缓存清理
当TimesTen数据库被异常删除时,存放在Oracle数据库的缓存信息需要清理,以下为清理过程:# 删除数据库,提示有缓存组信息在Oracle中$ ttdestroy sampledb_1122Failed to destroy data store: TT10026: Some cache groups that hold triggers and other objects in Orac原创 2017-10-24 15:01:25 · 758 阅读 · 0 评论 -
TimesTen 应用层数据库缓存学习:21. AWT复制Oracle事务失败时的处理
前一阵有用户问到,如果AWT缓存组复制时,在TimesTen中成功,而在Oracle中失败,会有何影响,需如何处理。本文讨论此问题。 在Oracle中创建基础表,并特意为本实验定义了一个约束。虽然这是不建议的。SQL> create table t1(k int, v int, primary key(k));Table created.SQL> alter table t1 add cons原创 2017-10-24 17:17:40 · 750 阅读 · 0 评论 -
为缓存初始化需要在Oracle数据库中执行的TimesTen脚本
标题有点长,事情是这样的。 在用户那搭一个测试环境,由于需要建缓存组,因此需要做网格初始化。那边的规定是Oracle不能给SYS口令,脚本必须由他们的DBA执行。因此将timesten主机上oraclescripts目录下的文件打包成oraclescripts.tar.gz,然后给了一个步骤: 1. 登录Oracle数据库主机 2. 上传并解压oraclescripts.tar.gz文件 ...原创 2018-05-12 13:00:38 · 315 阅读 · 0 评论 -
缓存表的数据类型可以与Oracle不一样吗?
在建立缓存组时,默认时缓存表的类型与Oracle保持一致,那是否可以不一样呢? 之所以有这个问题是由于两点: 1. 之前Oracle中的表设计不合理,如果能改Oracle端的设计是最好的,这样从根源上解决了问题,但如果一时改不了,则希望在TimesTen端改 2. 由于TimesTen设计与Oracle不一样,因此为优化计,一些数据类型需要更改为TimesTen本地类型,特别是Oracle中...原创 2018-05-12 19:23:53 · 362 阅读 · 0 评论 -
AWT缓存组复制失效问题的解决
昨天给某用户安装TimesTen Classic 11.2.2.8,前面一切正常,建立只读缓存组及测试正常。建立AWT缓存组正常,但数据无法复制到Oracle。检查日志,发现不断报错:[timesten@n-pc-nf8260-71 ~/TimesTen/tt1122/info]$tail -f tterrors.log2019-05-13 12:09:59.89 Err : REP: 67...原创 2019-05-14 13:35:56 · 247 阅读 · 0 评论 -
TimesTen 应用层数据库缓存学习:19. 理解AWT缓存组的三种模式
概述本文很好的讲述了AWT三种缓存组的概念和区别,并给出了3种缓存组从建立到摧毁的完整过程。AWT缓存组有3中类型: 1. AWT 缺省 (Manually load) 2. AWT Dynamic 3. AWT Dynamic Globle (Cache Grid)各种AWT类型的区别AWT 缺省 (Manually load)TimesTen中inserted/updated/delet原创 2016-06-20 14:32:10 · 7510 阅读 · 0 评论 -
TimesTen 应用层数据库缓存学习:18. 利用TimesTen实现Sharding或数据分区
考虑到恢复和磁盘加载到内存的速度,单个TimesTen数据库可以缓存的数据一般不超过100G,如果需要缓存的数据较大,一般可以利用多个TimesTen来实现数据分区或分片(Sharding)。 虽然TimesTen有Cache Grid即Global Cache Group的概念,但由于其还不太成熟,一般采用手工分区的方式,即通过应用服务器定向到指定的TimesTen的方式。以下给出了只读和读写数原创 2016-06-19 20:28:02 · 6509 阅读 · 0 评论 -
TimesTen 数据库复制学习:11. ASP带缓存组复制的几种固定架构模式
概述对于带缓存组的复制,推荐的复制策略是 Active-Standby (A/S) pair。因为其复制整个库,并且复制和恢复都比较简单和直接,而且错误切换和恢复都是自动的。带AWT缓存组的ASP复制 - 单站点此种复制不支持灾备 注意数据的流向带只读缓存组的ASP复制注意数据的流向带AWT缓存组的ASP复制 - 多站点此种复制支持灾备从standby到subscriber的克隆使用特殊的ttRe原创 2016-07-05 10:06:34 · 3969 阅读 · 0 评论 -
TimesTen 应用层数据库缓存学习:16. Aging策略与AWT缓存组
本文讨论如果一个Cache Table设定了Aging策略,那么Aging导致的缓存中数据的删除是否会影响到Oracle数据库?如果是只读缓存组,当然是不会影响到Oracle的。如果是AWT缓存组,答案也是不会影响,即Aging导致的数据删除不会传播到Oracle,下面通过实验验证一下。之前的建立缓存组的准备工作此处略过。在Oracle中建立源表(schema 用户 - tthr):create t原创 2016-05-30 16:46:14 · 5540 阅读 · 0 评论 -
TimesTen 应用层数据库缓存学习:9. 一些独特的缓存组定义选项
在缓存组定义中,有一些选项,它们平常很少会用到,但在一些特定的场合也许有用。 这些选项是: * ON DELETE CASCADE * UNIQUE HASH ON * Where 条件中的SYNONYM * 缓存LOB数据ON DELETE CASCADEon delete cascade由于涉及到delete操作,因此一般用于AWT缓存组。不过只读缓存组也可以用。设定了ON DELET原创 2016-04-21 17:22:31 · 822 阅读 · 0 评论 -
TimesTen 应用层数据库缓存学习:8. 配置Sliding Window(滑动窗口)
Sliding Window(滑动窗口)是Cache Group常用的一种场景。 本文介绍滑动窗口的基本概念以及如何配置滑动窗口。滑动窗口的描述如下: In a sliding window configuration, new rows are inserted into and old rows are deleted from the cache tables on a regular原创 2016-04-15 19:09:43 · 1040 阅读 · 0 评论 -
TimesTen 应用层数据库缓存学习:7. 同步读写缓存
同步读写缓存(SWT)比较少用到,它性能肯定是不如AWT,但数据一致性强于AWT。 数据先在Oracle提交,然后才在TimesTen中提交,因此TimesTen的约束可以比Oracle弱。和AWT一样,SWT的定义不能出现where条件 和AWT一样,虽然Oracle端可以修改,但是不建议。定义dynamic SWT缓存CREATE DYNAMIC SYNCHRONOUS WRITETHROU原创 2016-04-15 19:07:36 · 1186 阅读 · 0 评论 -
TimesTen 应用层数据库缓存学习:2. 缓存组分类
Cache Group,简单来说,就是在TimesTen中建立Oracle表的内存缓存,然后数据在两者之间自动同步。如下图,Oracle中黄颜色的表称为cached table,TimesTen中绿色的表称为cache table. TimesTen中Cache Group有很多类型,如下图,这张图对于了解Cache Group的概念非常重要: 红框内的类型是最常用的,我们先只关注此部分。主类型原创 2016-04-05 16:44:36 · 1162 阅读 · 0 评论 -
TimesTen访问Oracle的口令存在哪里(ttCacheUidPwdSet还是OraclePWD)
在TimesTen中建立Cache Group时,需要用ttCacheUidPwdSet存储Oracle数据库中Cache Admin的用户名和口令。但同时,在一些操作如passthrough或者是ttLoadFromOracle时,还需要在connectString中指定OraclePWD,若未指定,则出现以下的错误,例如: Command> refresh cache group readca原创 2016-04-27 18:49:48 · 1235 阅读 · 0 评论 -
TimesTen 应用层数据库缓存学习:6. Aging策略
declare a number := 1; begin select max(a) into :a from lru_tab; a := a+1; insert into lru_tab values(a, sysdate); end; /Aging基本概念Aging就是缓存的老化策略,毕竟缓存不能容纳所有的数据库数据,因此根据Aging设置,一些数据在某些时刻会退出缓原创 2016-04-14 16:52:59 · 1406 阅读 · 0 评论 -
TimesTen 应用层数据库缓存学习:5. 异步读写缓存
eleAsynchronous Write Through(AWT) cache group, 即TimesTen的异步写缓存。数据只允许在TimesTen中修改,然后同步到Oracle。当然,TimesTen中的数据最初是从Oracle加载而来。 对于熟悉存储的人来说,cache 分为write-through和write back。而TimesTen的AWT对应的就是存储的write-back原创 2016-04-14 16:52:01 · 5797 阅读 · 0 评论 -
TimesTen 应用层数据库缓存学习:4. 只读缓存
在运行本文例子前,首先先执行TimesTen 应用层数据库缓存学习:2. 环境准备中的操作。Read-only Cache Group的概念只读缓存组如下图: 只读缓存组(Read-Only Cache Group)的cache table不能直接修改,在Oracle数据库中的数据更新后自动同步到Timesten。 只读缓存的原理是对Oracle中需要缓存的表建立触发器来捕捉其变化 For原创 2016-04-14 09:52:34 · 2408 阅读 · 0 评论 -
TimesTen 应用层数据库缓存学习:10. 监控缓存组的autorefresh操作
测试环境准备$ sqlplus tthr/oracle@ttorclcreate table orders(ord_num int primary key, ship_time timestamp not null);insert into orders values(1, sysdate);commit;grant select on orders to cacheadm;$ ttisql原创 2016-04-21 20:56:17 · 1675 阅读 · 0 评论 -
TimesTen 应用层数据库缓存学习:11. AWT性能监控
演示环境准备为了运行以下的例子,我们建立了一个AWT缓存组 Oracle Schema用户:$ sqlplus tthr/oracle@ttorclcreate table orders(ord_num int primary key, ship_time timestamp not null);grant select, insert, update, delete on orders to原创 2016-04-22 09:45:33 · 1454 阅读 · 0 评论 -
TimesTen 数据库复制学习:16. 一个缓存组,复制,客户端自动切换的串烧实验
简介这时一个集只读,AWT缓存组,Active Standby 复制,client auto failover为一体的集成实验。 整个过程来至于Doc ID 1359840.1, 本文基于此文档按照自己的环境重做了一遍,并更正了其中的小错误,增加了自己的理解。 本文省略了在Oracle端设置缓存组的过程,可以参见前面的文章。搭建的环境为虚拟机 timesten-hol 上安装了两个TimesTe原创 2016-07-03 11:03:23 · 8151 阅读 · 0 评论 -
TimesTen 应用层数据库缓存学习:17. 全局数据缓存(cache grid)的高可用性
概述本文有两个目的: 1. 介绍TimesTen Global Cache Grid的高可用性 2. 给出了一个简单的建立和清理Global Cache Grid的过程,前面已经有一篇文章: TimesTen 应用层数据库缓存学习:13. 全局数据缓存(cache grid),但那个Cache Group太复杂建立一个简单的Global Cache Grid首先建立两个TimesTen inst原创 2016-06-15 08:05:39 · 8157 阅读 · 0 评论 -
TimesTen 数据库复制学习:8. 管理Active Standby Pair(带缓存组)
带缓存组的Active standby pairs(ASP)在不带缓存组的ASP中,复制发生在TimesTen的表间;而在带缓存组的ASP中,复制发生在cache table之间。带缓冲组的复制仅支持只读和AWT缓存组。对于只读缓存组,复制的意义在于保持状态的连续,而对于AWT,复制可以保证数据不丢失。设置带只读缓存组的ASP(例)假设active master为cachedb1,standby m原创 2016-06-27 17:57:46 · 6498 阅读 · 3 评论 -
TimesTen可以缓存哪些版本的Oracle数据库
TimesTen最初的产品是可以缓存非Oracle数据库的,不过被收购后,就只支持Oracle数据库了。 支持的Oracle数据库版本可以从 HOWTO : Find Oracle TimesTen In-Memory RDBMS Current Release And Support Policy Information (Doc ID 1305293.1) 找到,如下图: 从此图可以看出,原创 2016-04-24 18:45:07 · 1241 阅读 · 0 评论 -
TimesTen 应用层数据库缓存学习:15. TimesTen 缓存组autorefresh的原理
autorefresh操作的数据同步流方向是从Oracle到TimesTen,因此只有read-only缓存组和user managed缓存组才能定义autorefresh。 AWT和SWT缓存的数据同步流方向是从TimesTen到Oracle,由于TimesTen有事务日志,则可以利用日志来做数据同步。 而从Oracle到TimesTen的autorefresh则是依赖于触发器和change原创 2016-04-23 20:13:26 · 1029 阅读 · 0 评论