下面的试验基于TimesTen 7.0.5 以及 Oracle 10.2.0.1.0。

在Oracle数据库中

create table test(a int
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中

首先创建DataStore:

[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表中插入一条记录:

SQL> insert into test values(4,’dd’);
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的方式去手工刷新过来。

Command> load cache
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那边去。其使用场景非常有限。

一个回复 “物化视图(Materialized View)和Cache Group(2)”

  1. luvic 说:

    好 ~

留言