TimesTen内存数据库-第二章 快速开始

这章将讨论怎样使用SQL语句来建立并管理简单的缓存集合。也可以使用基于浏览器的Cache Administrator来建立缓存集合。sql

安装TimesTen和Oracle

在可以建立缓存集合以前,必须安装TimesTen和Oracle环境。完成如下任务:数据库

1. 在TimesTen主机上安装Oracle Client。浏览器

2. 建立必需的Oracle账号。缓存

3. 建立一个TimesTen账号。服务器

4. 建立TimesTen DSN。并发

在TimesTen主机上安装Oracle Client

Cache Connect to Oracle特性使用Oracle共享库来与Oracle数据库进行通讯。能够经过在安装了TimesTen的机器上安装Oracle Client来安装这些库文件。安装Oracle 9iClient或Oracle Database 10g。Oracle客户端的版本没必要与Oracle服务器端的版本相同。Cache Connect支持下面的Oracle客户端和服务器端的版本:异步

• Oracle 10g Release 2 (Oracle 10.2.0.1.0 或以后)工具

• Oracle 10g Release 1 (Oracle 10.1.0.5.0或以后)ui

• Oracle 9i Release 2 (Oracle 9.2.0.8.0或以后)spa

安装Oracle Client时,选择Application UserInstallation Type。没必要专门配置一个服务目录来用于Cache Connect to Oracle,因此能够跳过安装过程的这一步。

安装Oracle Client之后,安装TimesTen。

注意:若是在安装Oracle Client以前安装了TimesTen,必须从新启动操做系统(Windows)或TimesTen(UNIX)。

建立必需的Oracle账号

在可以使用Cache Connect to Oracle以前,必须从数据库管理员处得到一个Oracle账号。若是操做者实际拥有数据库管理权限,则在Oracle服务器上打开命令窗口并启动SQL*Plus,以系统管理员身份登陆:

sqlplus system/password@Oracle_Service_Name

例如,为了在由链接串、system1肯定的Oracle数据库上给testuser建立一个新Oracle账号,操做以下:

sqlplus system/manager@system1

SQL> CREATE USER testuser IDENTIFIED BY 11;

SQL> GRANT connect, resource, create any trigger TO cddbo;

SQL> COMMIT;

SQL> EXIT

为了与本章余下的部分讨论的一些示例缓存集合操做保持一致,Oracle用户为cddbo,口令为11,而且是system1中的一个Oracle账号。

在TimesTen上建立一个账号

做为实例管理者,使用ttIsql工具来链接到数据存储TT_tt70_32.。数据存储实例由TimesTen在安装时定义,用来使实例管理者可以执行数据存储链接管理任务。

而后使用CREATE USER和GRANT语句来建立一个名为cddbo的用户,拥有ADMIN和DDL权限:

ttIsqlTT_tt70_32.

Command> CREATE USER pgmrnew IDENTIFIED BY 'pgmrnew';

Command> GRANT ADMIN, DDL TO pgmrnew;

注意:此账号必须与Oracle数据库账号和口令相同。

建立TimesTen DSN

在Window系统中,建立一简单的TimesTen系统数据存储(System DSN),名称为cddboDSN。

关于cddboDSN,设置以下:

• Data Store Path and Name:c:/temp/cddbods

• Permanent Data Sz (MB):16

• Temporary Data Sz (MB):16

• User ID:pgmrnew(此ID也用做Oracle User ID)

• Oracle ID:orcl

• Oracle Password:pgmrnew

• DatabaseCharacterSet:ZHS16GBK。此数据库字符集必须与Oracle数据库字符集相同。为了获得Oracle数据库字符集信息,在Oracle数据库上输入下列查询:

SELECT value FROM nls_database_parameters

WHERE parameter='NLS_CHARACTERSET';

对于其他设置,使用缺省值。

建立READONLY缓存集合

在已经安装TimesTen和Oracle并进行配置之后,就能够建立缓存集合。

这部分将讨论怎样建立一个简单READONLY缓存集合,以缓存Oracle数据库中单一表中的内容。尽管一个缓存集合能够由多个表组成,这里只缓存一个Oracle表以保持示例的简单。

图 2.1 显示一个缓存一单个Oracle表的READONLY缓存集合。

图2.1简单READONLY缓存集合

clip_image008

第1步:建立一Oracle表

图2.2建立一Oracle表

clip_image010

链接到新账号并建立一数据表:

sqlplus testuser/mypsswrd@system1

SQL> CREATE TABLE readtab (a NUMBER NOT NULL PRIMARY KEY,

b VARCHAR2(31));

而后插入一些记录并进行提交:

SQL> INSERT INTO readtab VALUES (1, 'hello');

1 row created.

SQL> INSERT INTO readtab VALUES (2, 'world');

1 row created.

SQL> COMMIT;

Commit completed.

第2步:建立缓存集合

图2.3建立READONLY缓存集合

clip_image012

使用ttIsql工具来链接cddboDSN数据存储。在命令提示符下,使用ttCacheUidPwdSet程序来传递缓存管理用户ID和口令做为参数。而后调用ttCacheStart程序来为数据存储启动缓存代理。在这个示例中,缓存管理用户ID是cddbo,而且口令为11:

> ttIsql cddboDSN

Command> call ttCacheUidPwdSet('pgmrnew','pgmrnew');

Command> call ttCacheStart;

接下来,使用CREATE CACHE GROUP语句来建立名为readcache的READONLY缓存集合,用来在TimesTen中缓存Oracle表tsr20_user的内容:

Command> CREATE READONLY CACHE GROUP readcache

> AUTOREFRESH INTERVAL 5 SECONDS

> FROM tsr20_user

>(code char(5) NOT NULL PRIMARY KEY, name VARCHAR(20) NOT NULL);

第3步:加载缓存集合

加载Oracle表中的内容到缓存集合表中。

Command> LOAD CACHE GROUP readcache COMMIT EVERY 256 ROWS;

185 cache instances affected.

检查tsr20_user表的内容:

Command> SELECT * FROM tsr20_user;

< -000, test >

……………………

< 05999, 系统管理员05999 >

185 rows found

使用ttIsqlcachegroups命令来检查READCACHE缓存集合的定义:

Command> cachegroups;

Cache Group TESTUSER.READCACHE:

Cache Group Type: Read Only

Autorefresh: Yes

Autorefresh Mode: Incremental

Autorefresh State: On

Autorefresh Interval: 5 Seconds

Root Table: PGMRNEW.TSR20_USER

Table Type: Read Only

1 cache group found.

第4步:更新Oracle表

图2.4使用Oracle更新自动刷新TimesTen

clip_image014

使用SQL*Plus,插入多行到READTAB并提交事务:

SQL> INSERT INTO readtab VALUES (3, 'Hello');

1 row created.

SQL> INSERT INTO readtab VALUES (4, 'Again');

1 row created.

SQL> COMMIT;

Commit completed.

5秒以后,TimesTen将从Oracle自动刷新缓存数据。在ttIsql中检查READTAB表的内容:

Command> SELECT * FROM readtab;

< 1, hello >

< 2, world >

< 3, Hello >

< 4, Again >

4 rows found

第5步:删除缓存集合

在TimesTen窗口中,使用DROP CACHE GROUP语句从TimesTen数据存储中删除缓存集合:

Command> DROP CACHE GROUP readcache;

第6步:中止缓存集合

调用ttCacheStop程序中止数据存储的缓存代理:

Command> call ttCacheStop;

激活SQL passthrough特性

这部分将讨论怎样在DSN中设置PassThrough属性来命令TimesTen经过SQL定向到Oracle。

图 2.5 显示从一个应用将SQL传递到Oracle表。缓存表经过自动刷新机制从Oracle接收更新。

图2.5从Cache Group to Oracle传递SQL

clip_image016

第1步:建立新的TimesTen DSN

在Window系统中,建立一新的TimesTen系统数据源(System DSN),名称为cddboPT,使用与指定给cddboDSN的相同的属性。另外,设置PassThrough属性值为‘2’,以直接传递不在缓存集合中的Oracle表的查询和程序调用到Oracle。

对于cddboPT,设置以下:

• Data Store Path and Name:c:/temp/cgPT2d

• Permanent Data Sz (MB):16

• Temporary Data Sz (MB):16

• User ID:pgmrnew(此ID也用做Oracle User ID)

• Oracle ID:orcl

• Oracle Password:pgmrnew

• PassThrough:2

• DatabaseCharacterSet: ZHS16GBK。此数据库字符集必须与Oracle数据库字符集相同。为了获得Oracle数据库字符集信息,在Oracle数据库上输入下列查询:

SELECT value FROM nls_database_parameters

WHERE parameter='NLS_CHARACTERSET';

对于其他设置,使用缺省值。

第2步:建立READONLY缓存集合

图2.6建立READONLY缓相汇集合

clip_image018

在TimesTen窗口中,链接到DSN cddboPT,设置缓存管理用户ID和口令,启动缓存代理,并建立READONLY缓存集合:

ttIsql cgPT2

Command> call ttCacheUidPwdSet('pgmrnew','pgmrnew');

Command> call ttCacheStart;

Command> CREATE READONLY CACHE GROUP readcache

> AUTOREFRESH INTERVAL 5 SECONDS

> FROM tsr20_user

> (code char(5) NOT NULL PRIMARY KEY, name VARCHAR(20) NOT NULL);

第3步:加载缓存集合

加载Oracle表的内容到缓存集合表中。

Command> LOAD CACHE GROUP readcache COMMIT EVERY 256 ROWS;

4 cache instances affected.

第4步:更新缓存集合表

图2.7更新TimesTen缓存集合表

clip_image020

使用ttIsql,插入一些行到tsr20_user:

Command> INSERT INTO tsr20_user VALUES ('0001','Just','00000', 'dd','0000','1',NULL);

1 row inserted.

Command> INSERT INTO tsr20_user VALUES ('0002',' Passing ','00000', 'dd','0000','1',NULL);

1 row inserted.

Command> INSERT INTO tsr20_user VALUES ('0002',' Through ','00000', 'dd','0000','1',NULL);

1 row inserted.

使用SQL*Plus检查 check the contents of the readtab table on Oracle:

SQL> SELECT * FROM tsr20_user;

CODE NAME

---------- -------------------------------

-000 test

……………………

05999 系统管理员05999

187 rows selected.

而后使用ttIsql检查TimesTen中表tsr20_user的内容:

Command> SELECT * FROM tsr20_user;

< -000, test >

……………………

< 05999, 系统管理员05999 >

187 rows found

第5步:删除缓存集合

使用ttIsql,输入DROP CACHE GROUP语句来从TimesTen数据存储中删除缓存集合:

Command> DROP CACHE GROUP readcache;

第6步:中止缓存代理

调用ttCacheStop程序来中止数据存储的缓存代理:

Command> call ttCacheStop;

建立缓存集合任务列表

表 2.1 建立缓存集合任务列表

任务序号

任务

1

确保已经安装Cache Connect to Oracle。使用ttIsql来验证:

connect “uid=myuid;pwd=mypwd;OraclePWD=mypwd;passthrough=3”;

SELECT COUNT(*) FROM DUAL;

exit

此查询应该返回1。若是不是,则检查如下内容:

• 设置如下环境变动:ORACLE_HOME、LD_LIBRARY_PATH、SHLIB_PATH

• 缓存管理用户ID和口令,以及Oracle ID

• Oracle服务器的状态

2

对全部要建立的缓存集合设计缓存集合计划。可能使用Cache

Administrator。

3

确保有足够的资源来加载全部的缓存集合。

设置First Connection属性:

PermSize– 能够首先建立缓存集合,而后使用ttSize工具来估算PermSize属性的值。必须估算要使用ttSize工具进行缓存的行数。

TempSize– 没有必要的意义。

DatabaseCharacterSet– 确保它与Oracle数据库字符集相匹配。

文件系统大小推荐:

• 数据存储目录应足够大以处理两个检查点文件。每一个检查点文件的最大值为20 MB +PermSize

• 日志目录应足够大以处理积累在检查点之间的日志文件。注意,若是在自动刷新间隔期间Oracle表中有大量的更新,自动刷新事务可能至关大。 一个对于日志目录大小的处理规则是使它等于数据存储的大小加上3倍的LogFileSize的3倍。

• 临时目录应放在快速文件系统中,以提升执行大事务的速度。能够经过设置TMPDIR环境变量(UNIX)或TEMP环境变动(Window)来指定临时目录用于自动刷新操做。在设置环境变量以后,从新启动TimesTen

Daemon(UNIX)或机器(Window)。一个很大自动刷新事务在临时目录中要求很大空间。

4

若是缓存集合是自动刷新或异步写方式,要设置缓存管理用户ID和口令。缓存管理用户ID必须是一个Oracle用户,而且必须有相应的权限。

5

启动缓存代理。若是计划使用非日志模式(参阅第7步),则跳过此步。

6

建立并提交全部的缓存集合。

7

(选项)使用非日志模式加载缓存集合。

为了更快执行和下降资源使用,能够在非日志模式中加载缓存集合。非日志模式的缺点是:

• 全部到TimesTen数据存储已存在的链接必须中止。

• 加载操做不能进行复制。

执行下列任务来使用非日志模式加载缓存集合:

a.若是正在运行的话,中止缓存代理、复制代理以及TimesTen服务。

b.断开全部链接到TimesTen数据存储的应用。

c.使用First Connection attributesLogging=0、DurableCommits=0、LockLevel=1属性链接到数据存储。.

d.为每一个集合发送下列SQL语句:LOAD CACHE GROUP

cache_group_nameCOMMIT EVERY 0 ROWS。

e.在加载每一个缓存集合以后,提交事务并发送一个检查点。

f.使用日志从新将应用链接到TimesTen数据存储。

g.启动缓存代理。

8

若是须要复制,则在缓存集合表上建立TimesTen复制计划。

9

若是要复制缓存集合表或缓存集合是异步写(AWT)方式,则启动复制代理。

注意:当复制代理正在运行时,不能建立或删除AWT缓存集合。

10

加载缓存集合并提交(若是不执行第7步)。使用LOAD

CACHE GROUPcache_group_nameCOMMIT EVERYnROWS。对于n的推荐值为256。