下面的试验基于TimesTen 7.0.5 以及 Oracle 10.2.0.1.0。
在Oracle数据库中:
primary key,b char(10));
insert into test values(1,’aa’);
insert into test values(2,’bb’);
insert into test values(3,’cc’);
commit;
grant 相应的权限 to test;
create materialized view log on test;
create materialized view mv_test refresh fast on commit
enable query rewrite as select * from test;
SQL> select * from mv_test;
A B
———-
1 aa
2 bb
3 cc
在TimesTen中:
[ttcore]
Driver=/home/tt705/TimesTen/tt705/lib/libtten.so
DataStore=/home/tt705/TimesTen/tt705/info/ttcore
DatabaseCharacterSet=ZHS16GBK
PermSize=12
TempSize=12
UID=test
PWD=test
OracleID=orcl
OraclePWD=test
注意字符集要和Oracle中的一样。
ttisql ttcore
Command> call ttcacheuidpwdset(’test’,'test’);
Command> CREATE USERMANAGED CACHE GROUP cg_mv_test from
> test.mv_test (a int primary key,b char(10));
Warning 5144:The cache group contains a Oracle materialized view, cache operations are restricted.
Command> load cache group cg_mv_test commit every 10 rows;
3 cache instances affected.
Command> select * from mv_test;
<1,aa >
<2,bb >
<3,cc >
3 rows found.
再次到Oracle test表中插入一条记录:
1 row created.
SQL> commit;
Commit complete.
SQL> select * from mv_test;
A B
———-
1 aa
2 bb
3 cc
4 dd
但这些新增的数据无法自动刷新到TimesTen中,只能通过Load或者refresh的方式去手工刷新过来。
group cg_mv_test commit every 10 rows;
1 cache instance affected.
Command> select * from mv_test;
<1,aa >
<2,bb >
<3,cc >
<4,dd >
4 rows found.
TimesTen中虽然可以对mv_test进行修改,但这些修改无法自动地或者手动地(flush)到Oracle中去。原因是对物化视图的Cache Group有很多限制:
- 只能在 Usermanaged Cache Group中创建
- 不能带有autorefresh 和 propagate 参数
上面这两条就限制了既不能自动刷新(可以手动)也不能自动同步修改到Oracle那边去。其使用场景非常有限。
文章 (RSS)
December 12th, 2008于4:39 pm
好 ~