timesten系列五:如何定义cache,和后台oracle数据库同步数据

TT最典型的应用,就是TT后台连接一个oracle数据库,TT只保留少量的最需要的数据以提供最快的访问速度,尔后台oracle数据库则用来保留所 有的数据,在TT需要的时候,可以从oracle里面自动抽取数据到TT,当然,TT里面的数据也可以自动同步到oracle,这个功能,是目前其他内存 型数据库暂时无法提供的,或者不可能做到这么好的,毕竟TT和oracle是同一家公司的产品,当然能够更好的无缝集成了。


在TT里面,cache有下面几种类型
1.read only
数据从oracle 自动刷新到 TT里面,TT里面无法做修改。
典型应用是在TT里面保存只读的产品信息,用户信息等等,定期从oracle刷新该信息
2.异步写
数据在TT里面更新,异步传递到oracle 。
这种比较适合在TT上面做事务性操作,然后同步到oracle
3.同步写
数据在TT里面更新,同步传递到oracle 。
这种比较适合在TT上面做事务性操作,然后同步到oracle
4.人工管理的cache
在这种模式下,数据可以同时在TT和oracle里面更新,自动同步到对方。
这种方式最灵活,但是需要考虑数据冲突的问题,比如同时在oracle和TT上面修改统一条记录,怎么处理。
当然TT提供了基于时间戳的处理机制。

同步的原理是在oracle上面更新的数据会通过trigger捕获记录下来,然后通过cache agent定期来获取这些信息同步到TT。
而TT上的同步则是通过分析TT的操作日志来获得做了那些DML操作,然后通过cache agent同步到oracle .
由于我们第一次安装TT的时候,没有安装 cache connect to oracle ,所以还无法实现和oracle的通信,
所以首先我们需要做得就是安装 cache connect to oracle .

如果在配置cache之前,没有安装oracle client,请先安装好oracle client 。
TT支持如下版本的oracle client
9.2.0.8 or above
10.1.0.5 or above
10.2.0.1 or above

很简单的操作步骤,还是执行 setup.sh
./setup.sh -installCache ,然后安装提示,一路next下去,就ok了,详细信息请看下面的log


[timesten@rac01 linux86]$ ./setup.sh -installCache

There is 1 TimesTen instance installed locally :

1) tt70 (TimesTen7.0.5.0.0)

NOTE: There is only one instance which can be upgraded.

Instance Name : tt70
Product Installed : TimesTen7.0.5.0.0
Installation Directory : /oracle/timesten/TimesTen/tt70
BitLevel : 32
Component Installed : Client/Server and DataManager
Daemon Port : 17000

Would you like to upgrade this instance? [ yes ]

Extracting Cache Connect to Oracle ...

The following variables have been set in the file :
/oracle/timesten/TimesTen/tt70/bin/ttThunk

ORACLE_HOME=/oracle/product/10.2.0/db_1
LD_LIBRARY_PATH=/oracle/timesten/TimesTen/tt70/lib:/oracle/product/10.2.0/db_1/lib32:/oracle/product/10.2.0/db_1/network/lib32:/oracle/product/10.2.0/db_1/lib:/oracle/product/10.2.0/db_1/network/lib

Would you like to enable the Cache Connect to Oracle Administrator? [ yes ]
What TCP/IP port number would you like Cache Connect to Oracle Administrator to listen on? [ 17004 ]

NOTE: To access the TimesTen Cache Connect to Oracle Administrator
go to the url: http://localhost:17004/cache


Restarting the daemon ...
TimesTen Daemon stopped.
TimesTen Daemon startup OK.
End of TimesTen installation.

然后检查timesten 用户的.bash_profile文件,确认 ORACLE_HOME是否设置为正确的oracle client的安装目录,
确认LD_LIBRARY_PATH ,一定要包含
$ORACLE_HOME/lib:$ORACLE_HOME/network/lib


然后在oracle上面创建 用户,以便TT用来连接到oracle
sqlplus '/as sysdba'
create user tt identified by tt;
grant connect,resource to tt;

然后修改我们创建的wzy_tt70 data store的系统级DSN(info/sys.odbc.ini),加上如下信息
#oracle数据库用户名
UID=tt
#oracle数据库连接sid
OracleId=rac1
#oracle数据库密码
OraclePwd=tt

修改后的完整DSN如下(注意:DatabaseCharacterSet必须和oracle的一致):
[wzy_tt70]
Driver=/oracle/timesten/TimesTen/tt70/lib/libtten.so
DataStore=/oracle/timesten/TimesTen/tt70/info/wzy/wzy
DatabaseCharacterSet=WE8ISO8859P1
Authenticate=0
PermSize=64
TempSize=16
UID=tt
OracleId=rac1
OraclePwd=tt

在oracle client端的tnsnames.ora 里面添加一个名字叫rac1(对应上面定义的OracleId)的别名,如下

RAC1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac01-vip)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = rac)
(INSTANCE_NAME = rac1)
)
)

在oracle里面创建一个测试表
sqlplus tt/tt@rac1
create table t1(id number(2) primary key);

开始创建cache group ,
ttIsql wzy_tt70
Command>call ttCacheUidPwdSet('tt','tt'); #设置连接到oracle的用户名和密码
Command>call ttCacheStart; #启动cache


创建一个read only的语法如下

CREATE READONLY CACHE GROUP readcache AUTOREFRESH INTERVAL 1 SECONDS FROM t1 (id number(2) not null primary key);

注意:from t1后面是跟oracle里面需要同步的表的名字,一定要有同样的列和字段类型,而且一定要有pk或者非空的唯一性索引字段

一个只读的cache group创建好了,然后从oracle里面load一次数据,用如下语法:
LOAD CACHE GROUP readcache COMMIT EVERY 256 ROWS;

然后在oracle里面insert数据,看看是否能在TT里面出现。

创建一个同步的cache group语法如下:
CREATE SYNCHRONOUS WRITETHROUGH CACHE GROUP update_t1
FROM t1 (id number(2) not null primary key);

其他的都和创建read only的语法一样。。。

那我们最关心的应该还是创建一个用户管理的cache group,因为只有用户管理的cache group ,才能实现
双向的数据同步,数据可以在oracle上面修改,也可以在TT上修改,都能及时同步到对方。
创建一个用户管理的cache group语法如下:

CREATE USERMANAGED CACHE GROUP update_anywhere_t1
AUTOREFRESH
MODE INCREMENTAL
INTERVAL 5 SECONDS
FROM t1(id number(2) primary key,PROPAGATE);

其他的操作和read only一样,比如创建完成之后,需要第一次load数据 。

其中:MODE INCREMENTAL 说明我们从oracle里面是用增量的方式同步数据(会在oracle上面自动创建trigger和额外的表来记录oracle dml的信息),INTERVAL 5 SECONDS 定义每5S从oracle同步一次信息, 尔 PROPAGATE 则定义 TT的dml操作需要同步到 oracle 。。。

你可能感兴趣的:(oracle,cache,配置管理,bash,Derby)