<在此声明,此博文转摘自别处,具体出处不详。>
簇的概念以及如何创建簇!
****************************簇***************************
簇可以实现将大的表和索引进行拆分,使处理速度提高和管理方便
1.1簇的概念
(cluster)就是将一组有机联系的表在物理上存放在一起,并且相同的关键列的值只存储一份,用于提高处理效率的的一项技术; oracle并行服务器通过使一组节点共享同一簇中的工作负载来扩展Windows NT的能力,
oracle提供具有高可用性和高伸缩性的簇解决方案。
(1).何时建立簇
如果通过引用完整性把两个或多个表联系起来并经常使用联结,则为这个表创建一个索引簇
(2).有时簇会损害性能
对频繁更新或删除的表使用簇对性能有不利的影响
(3).限制
.簇中的每一个表必须有一列与簇中指定的列的大小和类型匹配
.簇码中可用的最大数目是16
.列的最大长度为239字节
.LONG和LONG RAW不能作为簇列码
1.2
1.创建簇语法
CREATE CLUSTER cluster(column datatype)
[pctused 40|integer] [pctfree 10|integer]
[size integer]
[initrans 1|integer][maxtrans 255|integer]
[tablespace tablespace]
[storage storage]
2.创建簇及其表的步骤[****注意顺序***]
(1)用CREATE CLUSTER创建簇
(2)用CREATE INDEX创建簇索引
(3)用CREATE TABLE创建表,并指定簇
(4)插入数据并进行DML操作
[例]住房公积金(创建簇的具体实例)
SQL> drop cluster emp_unit;
SQL> create cluster emp_unit(acc_no varchar2(15))
2 tablespace gao_tablespace
3 storage(initial 1m maxextents 121 pctincrease 0);
SQL> create index unit_inf_ind on cluster emp_unit
2 tablespace gao_tablespace;
SQL> drop table unit_inf;
SQL> create table unit_inf
2 (
3 bank_code varchar2(6),
4 acc_no varchar2(15),
5 proc_date date,
6 unit_name varchar2(50),
7 area varchar2(20),
8 address varchar2(50),
9 zip varchar2(6),
10 master varchar2(20),
11 belong varchar2(20),
12 ecnomic varchar2(20),
13 tot_emp number(6),
14 sal_bank varchar2(40),
15 sal_date date,
16 pay_tot number(6),
17 pay_money number(13,2),
18 pro_depart varchar2(40)
19 )
20 cluster emp_unit(acc_no);
SQL> create unique index unit_inf_in on unit_inf(acc_no)
2 storage(initial 1m next 512k maxextents 121 pctincrease 0);
SQL> drop table pay_lst_det;
SQL> create table pay_lst_det
2 (
3 bank_code varchar2(6) not null,
4 acc_no varchar2(15) not null,
5 emp_acc_no varchar2(20) not null,
6 table_date date,
7 name varchar2(10)
8 )
9 cluster emp_unit(acc_no);
oracle_gao_dba 发表于 2004-6-21 21:07
1.3改变簇在用户具有ALTER ANY CLUSTER的权限下,可以对已建好的簇(cluster)改变其设置
.物理属性PCTFREE,pctused,initrans,maxtrans,storage
.为cluster关键字值存储所有行所需的一般空间容量
.默认平行度
ALTER CLUSTER CLUSTER_NAME
|PCTUSED INTEGER
|PCTFREE INTEGER
|SIZE
|INITRANS INTEGER
|MAXTRANS INTEGER
|STORAGE
[例]修改簇的参数
SQL> ALTER CLUSTER EMP_UNIT
1.4删除簇
drop cluster [user.]cluster [including tables]
1.5删除簇索引
有时为了清除盘空间的碎片,我们经常进行删除簇索引的操作.
1.6收集簇信息
SQL> desc dba_clu_columns;
名称
------------------------------- -------- ----
OWNER
CLUSTER_NAME
CLU_COLUMN_NAME
TABLE_NAME
TAB_COLUMN_NAME
SQL> desc dba_clusters;
名称
-------------------------------
OWNER
CLUSTER_NAME
TABLESPACE_NAME
PCT_FREE
PCT_USED
KEY_SIZE
INI_TRANS
MAX_TRANS
INITIAL_EXTENT
NEXT_EXTENT
MIN_EXTENTS
MAX_EXTENTS
PCT_INCREASE
FREELISTS
FREELIST_GROUPS
AVG_BLOCKS_PER_KEY
[例]分析簇
SQL> ANALYZE CLUSTER emp_unit compute statistics;
SQL> select * from user_clusters where cluster_name='emp_unit';