CREATE CACHE GROUP用法

本文介绍如何使用CREATECACHEGROUP语句创建不同类型的缓存组,包括只读、异步写、同步写和用户管理缓存组,并详细解释了各参数的作用及限制。

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。

 

<think>我们正在处理一个关于如何使用`npm create vue@latest`创建Vue 2项目的请求。但是,根据引用[1]和引用[2]的信息,`npm create vue@latest`实际上是用于创建Vue 3项目的。引用[1]提到:“为什么可以用npm create vue@latest来安装vue项目呢”,这里指的是Vue 3项目。引用[2]也对比了`npm create vue@latest`和`npm create vite@latest`,两者都是用于创建Vue 3项目的工具。 然而,用户想要创建的是Vue 2项目。因此,我们需要提供创建Vue 2项目的方法。 在Vue的官方文档中,Vue 2项目的创建通常使用Vue CLI(命令行工具)。Vue CLI是一个全局安装的包,可以通过`vue create`命令来创建项目,并且在创建过程中可以选择Vue 2的预设。 步骤: 1. 确保已经安装了Node.js和npm。 2. 全局安装Vue CLI(如果尚未安装): ```bash npm install -g @vue/cli ``` 3. 使用Vue CLI创建项目,并在提示中选择Vue 2: ```bash vue create my-project ``` 在运行命令后,会出现一个交互式提示,让你选择预设。你可以选择“Default (Vue 3)”或“Default (Vue 2)”,或者手动选择特性。如果手动选择,在最后一步可以选择Vue的版本为2.x。 但是,用户特别提到了`npm create vue@latest`,并希望用它来创建Vue 2项目。实际上,`npm create`是`npm init`的别名,它用于执行创建项目的命令。对于Vue 3,官方推荐使用`npm create vue@latest`,因为它会启动一个基于Vite的创建工具。然而,Vue 2的官方脚手架仍然是Vue CLI。 因此,我们需要澄清:`npm create vue@latest`不能用来创建Vue 2项目,它只能创建Vue 3项目。 所以,我们应该建议用户使用Vue CLI来创建Vue 2项目。 另外,引用[3]提到了使用`npm create vue@latest`时可能遇到的权限问题,这进一步说明我们可能需要指导用户正确使用命令。 总结回答: 1. 明确`npm create vue@latest`用于创建Vue 3项目,而不是Vue 2。 2. 提供使用Vue CLI创建Vue 2项目的步骤。 同时,根据系统指令,我们需要生成相关问题。</think>### 使用 npm 创建 Vue 2 项目的正确方法 `npm create vue@latest` **只能创建 Vue 3 项目**(如引用[1][^1]和引用[2][^2]所述),无法直接创建 Vue 2 项目。以下是创建 Vue 2 项目的两种推荐方法: #### 方法 1:使用 Vue CLI(官方推荐) 1. **全局安装 Vue CLI**: ```bash npm install -g @vue/cli ``` 2. **创建 Vue 2 项目**: ```bash vue create my-vue2-project ``` - 在交互菜单中选择 `Manually select features` - 取消勾选 `Vue 3`,勾选 `Vue 2` - 完成其他配置后生成项目 #### 方法 2:通过 Vite 模板(需手动配置) 1. **创建基础项目**: ```bash npm create vite@latest my-vue2-project -- --template vue ``` 2. **降级到 Vue 2**: ```bash cd my-vue2-project npm install vue@2 vue-template-compiler@2 ``` 3. **修改 `main.js`**: ```javascript import Vue from 'vue' import App from './App.vue' new Vue({ render: h => h(App) }).$mount('#app') ``` ### 注意事项 1. **权限问题**:若遇到 `EPERM: operation not permitted`(如引用[3][^3]),需修复 npm 缓存权限: ```bash npm cache clean --force sudo chown -R $USER:$GROUP ~/.npm ``` 2. **兼容性**:Vue 2 项目需使用 `vue-template-compiler` 且版本需与 `vue` 严格匹配。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值