配置TimesTen应用层数据库缓存
一、
配置TimesTen应用层数据库缓存
1、 创建一个新的表空间
以SYS用户登录SQL*Plus,命令如下:
create tablespace ttusers datafile 'ttusers.dbf' SIZE 40M;
2、 创建TimesTen用户
执行脚本initCacheGlobalSchema.sql(位于
3、 创建缓存管理员用户
创建一个Oracle账户作为缓存管理员用户,如下命令:
create user cacheadm identified by cacheadm default tablespace ttusers quota unlimited on ttusers temporary tablespace temp;
4、 给缓存管理员用户赋予系统权限
执行脚本
5、 给缓存管理员用户赋予数据访问权限
缓存管理员用户的职责是监控、同步缓存数据库与Oracle数据库,这个用户须要有访问Oracle中被缓存数据的表的权限,例如:
connect hr@ttorcl
grant select on hr.departments to cacheadm;
grant select, insert, update, delete on hr.employees to cacheadm; grant select, insert, update, delete on hr.job_history to cacheadm;
二、
设置缓存数据库
1、 创建一个缓存数据库
a、 通过定义一个DSN来创建缓存数据库;注意:DSN属性OracleNetServiceName必须为一
个有效的TNS服务名称来指定对应的Oracle数据库;属性DatabaseCharacterSet的值必须与Oracle数据库中的字符集一致。DSN的相关属性配置在sys.odbc.ini配置文件中。 b、 创建和连接DSN
2、 创建一个缓存管理员用户
创建缓存管理员用户并赋予ADMIN或CACHE_MANAGER权限,该用户的职责为配置和管理缓存Grid以及创建和加载数据到缓存组中。例如:
create user cacheadm identified by cacheadm; grant admin to cacheadm;
3、 创建一个缓存表用户
为了缓存Oracle中的表,TimesTen缓存数据库中必须存在这样的用户,他拥有缓存Oracle表的能力。例如:
create user hr identified by hr; grant create session to hr;
4、 将Oracle缓存管理员用户与该缓存数据库关联
以缓存管理员用户的身份登录,确保在Oracle数据库中为缓存管理员用户指定了密码。使用内部存储过程ttCacheUidPwdSet将Oracle缓存管理员用户与缓存数据库关联。通过调用存储过程ttCacheUidGet来验证Oracle缓存管理员用户已做了配置。例如:
connect \call ttcacheuidpwdset ('cacheadm','cacheadm'); call ttcacheuidget;
5、 创建缓存Grid(仅一次)
a、 仅有缓存管理员用户可以创建和管理缓存Grid,一个缓存数据库只能隶属于一个缓存
Grid,通过调用内部存储过程ttGridCreate来创建缓存Grid,仅在第一个Grid成员需要执行这个步骤。例如:
call ttgridcreate ('samplegrid');
b、 调用存储过程ttGridInfo来验证缓存Grid是否被创建。例如:
call ttgridinfo;
6、 将缓存数据库与缓存Grid关联
通过调用存储过程ttGridNameSet将当前缓存数据库与缓存Grid关联起来。例如:
call ttgridnameset ('samplegrid');
三、
给缓存数据库添加缓存组
缓存组是由缓存到TimesTen内存数据库中的Oracle表集合构成,缓存数据库可以包含一个或多个缓存组。缓存组既可以是只读的也可以是可更新的。对于只读缓存组来说,Oracle数据库中的更新是自动刷新到TimesTen中对应的缓存表中;而对于可更新缓存组,缓存表中的更新会自动更新到Oracle数据库中对应的表里。
缓存组中的数据能被预先加载,或按需加载。如果能预先确定要缓存的数据集,缓存组就能被预加载。一个动态缓存组(dynamic cache group)是按需缓存数据的缓存组,如果要缓存的数据集不能被事先确定,这种方式是合适的。
两种类型的缓存组:
局部缓存组包含的数据只能局限在自己的缓存数据库中使用,而不能被缓存Grid中的其他成员共享。
全局缓存组包含的数据能被缓存Grid中的其他成员共享;它确保了缓存Grid中相应缓存数据库中数据的一致性。
示例展示了如何创建动态可更新数据的全局缓存组,以及一个只读的局部缓存组 1、 启动缓存代理
a、 登录ttIsql,输入密码,例如:
connect \
b、 缓存代理进程是负责管理缓存数据库之间的通信和控制从Oracle数据库到TimesTen缓
存数据库的数据流。调用存储过程ttCacheStart为当前数据库开启缓存代理,例如: call ttcachestart; 2、 定义缓存组
a、 输入下面的语句CREATE CACHE GROUP来创建动态可更新全局缓存组,名称为g_awt缓
存的表为HR.EMPLOYEES和HR.JOB_HISTORY。语句如下:
create dynamic asynchronous writethrough global cache group g_awt from hr.employees ( employee_id number (6) not null, first_name varchar2(20), last_name varchar2(25) not null, email varchar2(25) not null, phone_number varchar2(20), hire_date date not null, job_id varchar2(10) not null, salary number (8,2),
commission_pct number (2,2), manager_id number (6), department_id number(4), primary key (employee_id)),
hr.job_history (employee_id number(6) not null, start_date date not null,