[转帖]CREATE CACHE GROUP用法_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 4096 | 回复: 0   主题: [转帖]CREATE CACHE GROUP用法        下一篇 
shunzi
注册用户
等级:上尉
经验:782
发帖:133
精华:0
注册:2011-10-10
状态:离线
发送短消息息给shunzi 加好友    发送短消息息给shunzi 发消息
发表于: IP:您无权察看 2011-11-2 12:31:24 | [全部帖] [楼主帖] 楼主

CREATE CACHE GROUP的语句:


  • 创建cache group定义的表。
  • 通过系统表中的cache group插入所有信息。
  • 防止非法定义(例如,重复的cache group)。

Cache 表的注意事项:
  • Cache group 表必须有一个主键或者1个非空唯一索引。
  • Cache table可以只有Oracle表中一部分的列。
  • Cache table名称与Oracle表名一致。

系统管理cache group:

有READONLY,ASYNCHRONOUS WRITETHROUGH,SYNCHRONOUS WRITETHROUGH三种。
  • READONLY cache group是只读的,只用于更新,会将表的最新信息从Oracle update到cache中。
  • ASYNCHRONOUS cache group可以将cache中的更新到Oracle中去,事务可以在cache上连续执行,而不需要等待commit到Oracle上去。
  • WRITETHROUGH cache group可以将cache中的更新到Oracle中去,在cache中的事务会通知Oracle做commit之后才在cache中commit。

有一些语句或子句在系统管理的cache group中不能使用,包括:
  • WHERE子句,该子句只能在READONLY CACHE GROUP中定义。
  • READONLY,PROPAGATE 和 NOT PROPAGATE的表定义不能用。

其次,在WRITETHROUGH cache group中不允许用AUTOREFRESH,REFRESH 和 FLUSH。在READONLY CACHE GROUP中,默认AUTOREFRESH被打开(被设置成on)。

user managed cache group必须要有应用程序或用户管理,也有一些子句不能用于该类组:

  • 表级别的READONLY关键字只能用于用户管理cache group。

  • TimesTen与Oracle一样能解析WHERE子句。

  • 当replication agent启动时不能创建ASYNCHRONOUS WRITETHROUGH cache group,也不能删除。

CREATE CACHE GROUP主要有以下四类:

分别是只读、异步写、同步写、用户管理。

  • CREATE READONLY CACHE GROUP
  • CREATE ASYNCHRONOUS WRITETHROUGH CACHE GROUP
  • CREATE SYNCHRONOUS WRITETHROUGH CACHE GROUP
  • CREATE USERMANAGED CACHE GROUP

语法


CREATE READONLY CACHE GROUP
For READONLY cache groups, the syntax is:
CREATE READONLY CACHE GROUP [Owner.]GroupName
[AUTOREFRESH
[MODE {INCREMENTAL FULL}]
[INTERVAL IntervalValue {MINUTE[S] SECOND[S]
MILLESECOND[S] }]
[STATE {ON OFF PAUSED}]
]FROM
{[Owner.]TableName (
{ColumnDefinition[,…]}
      [,PRIMARY KEY(ColumnName[,…])]
      [,FOREIGN KEY(ColumnName [,…])
      REFERENCES RefTableName (ColumnName [,…])
      [ON DELETE CASCADE]
      [UNIQUE HASH ON (HashColumnName[,…]) PAGES=PrimaryPages]
      [WHERE ExternalSearchCondition]
      [AGING USE ColumnName
LIFETIME Num1 {MINUTE[S] HOUR[S] DAY[S]}
[CYCLE Num2 {MINUTE[S] HOUR[S] DAY[S]}]
      [ON OFF]
      ]
} [,...];
CREATE ASYNCHRONOUS WRITETHROUGH CACHE GROUP
For ASYNCHRONOUS WRITETHROUGH cache groups, the syntax is:
CREATE [ASYNCHRONOUS] WRITETHROUGH CACHE GROUP [Owner.]GroupName
FROM
{[Owner.]TableName (
{ColumnDefinition[,…]}
      [,PRIMARY KEY(ColumnName[,…])]
      [FOREIGN KEY(ColumnName [,…])
      REFERENCES RefTableName (ColumnName [,…])]
      [ ON DELETE CASCADE ]
      UNIQUE HASH ON (HashColumnName[,…]) PAGES=PrimaryPages]
      [AGING {LRU
            USE ColumnName
      LIFETIME Num1 {MINUTE[S] HOUR[S] DAY[S]}
      [CYCLE Num2 {MINUTE[S] HOUR[S] DAY[S]}]
      }[ON OFF]
      ]
} [,...];
CREATE SYNCHRONOUS WRITETHROUGH CACHE GROUP
For SYNCHRONOUS WRITETHROUGH cache groups, the syntax is:
CREATE SYNCHRONOUS WRITETHROUGH
CACHE GROUP [Owner.]GroupName
FROM
{[Owner.]TableName (
{ColumnDefinition[,…]}
      [,PRIMARY KEY(ColumnName[,…])]
      [FOREIGN KEY(ColumnName [,…])
REFERENCES RefTableName (ColumnName [,…])}]
[ ON DELETE CASCADE ]
[UNIQUE HASH ON (HashColumnName[,…]) PAGES=PrimaryPages]
[AGING {LRU USE ColumnName
LIFETIME Num1 {MINUTE[S] HOUR[S] DAY[S]}
[CYCLE Num2 {MINUTE[S] HOUR[S] DAY[S]}]
}[ON OFF]
]
} [,...];
CREATE USERMANAGED CACHE GROUP
For user managed cache groups, the syntax is:
CREATE [USERMANAGED] CACHE GROUP [Owner.]GroupName
[AUTOREFRESH
[MODE {INCREMENTAL FULL}]
[INTERVAL IntervalValue {MINUTE[S] SECOND[S]
MILLESECOND[S] }]
[STATE {ON OFF PAUSED}]
]
FROM
{[Owner.]TableName (
{ColumnDefinition[,…]}
      [,PRIMARY KEY(ColumnName[,…])]
      [FOREIGN KEY(ColumnName[,…])
      REFERENCES RefTableName (ColumnName [,…])]
      [ON DELETE CASCADE]
[, {READONLY PROPAGATE NOT PROPAGATE}]
      [UNIQUE HASH ON (HashColumnName[,…]) PAGES=PrimaryPages]
      [WHERE ExternalSearchCondition]
      [AGING {LRU
            USE ColumnName
      LIFETIME Num1 {MINUTE[S] HOUR[S] DAY[S]}
      [CYCLE Num2 {MINUTE[S] HOUR[S] DAY[S]}]
      }[ON OFF]
      ]
} [,...];


参数按FROM关键字分为两部分,一部分为FROM之前的,一部分为FROM之后的。

FROM之前的参数:

参数

描述

[Owner.]GroupName

Cache group的owner和名称。

AUTOREFRESH

该参数自动将Oracle刷新到Timesten中。系统管理的cache group中,会自动将数据库的改变发布到Timesten的cache中。

Timesten支持FULL或INCREMENTAL AUTOREFRESH,在FULL模式中,整个cache会周期地卸载和装载。

在INCREMENTAL模式中,Timesten会在Oracle上创建一个触发器用于跟踪变化,周期地更新那些变化的行。第一次增量刷新总是全刷新,除非使用了PAUSED状态。默认是INCREMENTAL模式。

AUTOREFRESH的STATE可以设置为ON,OFF或者PAUSED,默认是PAUSED。

可以用ALTER CACHE GROUP cache_name SET AUTOREFRESH修改STATE。

当一个cache group被设置为AUTOREFRESH或PROPAGATE,就不能再改变该属性了。

NOT PROPAGATE不能用在AUTOREFRESH语句中。

Oracle的临时表不能被cache。

列必须和Oracle数据库中的表的列具有相同的名称、类型和长度。

MODE

[INCREMENTAL FULL]

默认是增量模式,区别是增量模式下,Timesten会在Oracle上创建一个触发器来刷新那些变化的行,而不是所有。

INTERVAL

IntervalValue

设置自动刷新的时间间隔,单位可以是分钟、秒、毫秒。

MINUTES,SECONDS,MILLISECONDS。

默认是5分钟,如果指定的间隔时间不够长,没能刷新完,下一次刷新会等待本次刷新,如果等待达到10次,会在log中产生一个信息。

STATE [ON OFF PAUSED]

指定cache group是否打开自动刷新,可以通过ALTER CACHE GROUP语句修改状态,默认是PAUSED。

FROM

指定在cache group中定义的1个或多个表。


FROM之后的参数

参数

描述

[Owner.]TableName

Owner名和表名,如果没有指定owner,使用登入名作为owner。

ColumnDefinition

表中列的定义,名称、类型、长度、是否非空,每个表至少要有1个列

PRIMARY KEY

(ColumnName[,…])

Cache group中的表必须要有1个主键,如果多列,指定到后面的ColumnName,最多16列。不能指定一个已经指定为UNIQUE的列。

FOREIGN KEY

(ColumnName[,…])

指定外键。

REFERENCES

RefTableName

(ColumnName[,…])

指定外键中的关联表和关联列。

[ON DELETE CASCADE]

指定是否级联删除。

READONLY

指定是否只读,不能修改cache table

PROPAGATE

NOT PROPAGATE

指定cache table在commit时是否将变化自动地发布到Oracle数据库上。

如果用NOT PROPAGATE就不能使用AUTOREFRESH,或者所有表都必须是readonly才行。

如果用NOT PROPAGATE,commit之后还要用flush cache group语句将cache group刷新过去。

UNIQUE HASH ON

(HashColumnName)

为主键列指定hash索引,必须是主键,后面还要跟参数PAGES。

PAGES=PrimaryPages

指定了pages的数量,该值也定义了创建hash索引时的hash buckets。最小为1。

WHERE

ExternalSearchCondition

所带的条件

AGING LRU [ON OFF]

Root table是否按照LRU策略老化,设置为ON,激活aging state,自动老化,设置为OFF,关闭aging state,不自动老化。

LRU属性通过ttAgingLRUConfig过程设置。LRU参数不能定义在SQL级别。

LRU aging不支持自动刷新的cache group。

两种老化策略一旦定义就不能更改。

AGING USE

ColumnName...

[ON OFF]

定义基于时间的老化策略,设置为ON,激活aging state,自动老化,设置为OFF,关闭aging state,不自动老化。默认为ON。

基于时间的老化策略定义在SQL级别,需要指定LIFETIME 和 CYCLE子句。

ColumnName指定了哪列基于时间老化。定义的列是NOT NULL并且类型为TIMESTAMP或DATE。SYSDATE减去该列值所得结果与LIFETIME比较,如果大于LIFETIME,则该行准备老化。该值不能为NULL。

LIFETIME Num1

{MINUTE[S] HOUR[S]

DAY[S]}


LIFETIME是基于时间老化的参数,指定了一个keep在cache中的最小时间,值为正整数,单位可以是分钟、小时、天。如果一行超过该值就会被老化,从表中删除。需要注意的是,LIFETIME设置为3天不同于设置为72小时或432分钟。它们分别是同一天内的所有行被老化、同一个小时内的所有行被老化、同一分钟内的所有行被老化。

[CYCLE Num2

{MINUTE[S] HOUR[S]

DAY[S]}]

CYCLE也是基于时间老化的参数,跟在LIFETIME参数后面。

指定了探测周期,如果没有指定CYCLE,默认是5分钟。

如果指定为0,则持续探测,不做sleep。


该贴被shunzi编辑于2011-11-2 12:33:29

该贴被shunzi编辑于2011-11-2 12:35:00




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论