分类: Oracle
2011-06-22 12:48:18
1.cluster 可以将两个或多个表捆绑在一起,,cluster是一种数据库结构,在这个结构中,可以将两个或者多个表储存在相同的数据块或段中,加入到cluster中的每个表行将物理地存储在相同的块中,好像这些表在cluster key 处连接起来了一样.通过下面的例子,你将理解cluster如何的工作.
aa 表
SQL> select * from aa;
ID NAME *** AGE
---- ---- -- ----------
01 cc m 20
02 dd f 18
03 ee m 22
04 ff f 21
05 gg f 19
06 hh m 20
已选择6行。
bb表
SQL> select * from bb;
*** LIVING
-- ------
m 11-01
f 11-02
2.在使用aa,bb表的时候,如果想要将这两个表放到一个cluster中,则可以将这两个
表在***列上连接起来,在这种情况下,吧***列称为cluster key ,当完成cluster的
创建后,两个表中的数据将会在cluster中物理地连接起来.在创建cluster的时候有两种选择:
* index cluster(默认,需要在其中创建cluster index)
* hash cluster
3.创建cluster的步骤:
1). SQL> create cluster ab_cluster (*** char(2) ) tablespace users;
簇已创建。
上面的语句创建了一个名为ab_cluster的cluster,且将它置于表空间usrs中.因为上面创建的是index cluster ,所以当cluster创建完后,还必须在cluster key上创建索引.
2). SQL> create index ab_cluster_idx on cluster ab_cluster tablespace users;
索引已创建。
{ 当创建hash cluster的时候,例子如下:
Create cluster ab_cluster (*** char(2) size 8k hashkeys 1000 tablespace users;
参数hashkeys用来定义分配给表的hash]值的数目.指出了在cluster中唯一性cluster key的最大值.}
3).创建参与cluster的表.(aa bb)
SQL> create table aa(id varchar2(4) ,name varchar2(4),*** char(2),age number(2))
cluster ab_cluster (***);
表已创建.
SQL> create table bb( *** char(2) , living varchar(6)) cluster ab_cluster (***);
表已创建。
插入数据:
insert into aa values(1,'hb','m',27);
insert into bb values('m','aaa');
insert into bb values('m','bbb');
查询rowid,
AAAQ1OAAFAAAHE/AAA
AAAQ1OAAFAAAHE/AAA
AAAQ1OAAFAAAHE/AAB
会发现这三条数据的rowid的block部分是相同的,而且第一条的rowid和第二条的rowid居然是相同的。
dump datafile
data_block_dump,data header at 0xe3f3c64
===============
tsiz: 0x1f98
hsiz: 0x22
pbl: 0x0e3f3c64
bdba: 0x0140713f
76543210
flag=--------
ntab=3
nrow=4
frre=-1
fsbo=0x22
fseo=0x1f66
avsp=0x1f40
tosp=0x1f40
0xe:pti[0] nrow=1 offs=0
0x12:pti[1] nrow=1 offs=1
0x16:pti[2] nrow=2 offs=2
0x1a:pri[0] offs=0x1f82
0x1c:pri[1] offs=0x1f76
0x1e:pri[2] offs=0x1f6e
0x20:pri[3] offs=0x1f66
block_row_dump:
tab 0, row 0, @0x1f82
tl: 22 fb: K-H-FL-- lb: 0x0 cc: 1
curc: 3 comc: 3 pk: 0x0140713f.0 nk: 0x0140713f.0
col 0: [ 2] 6d 20
tab 1, row 0, @0x1f76
tl: 12 fb: -CH-FL-- lb: 0x0 cc: 3 cki: 0
col 0: [ 1] 31
col 1: [ 2] 68 62
col 2: [ 2] c1 1c
tab 2, row 0, @0x1f6e
tl: 8 fb: -CH-FL-- lb: 0x0 cc: 1 cki: 0
col 0: [ 3] 61 61 61
tab 2, row 1, @0x1f66
tl: 8 fb: -CH-FL-- lb: 0x2 cc: 1 cki: 0
col 0: [ 3] 62 62 62
end_of_block_dump
4.删除cluster.
在删除cluster的时候,首先必须删除参与该cluster的表或者使用including tables子句.不能从正在使用的cluster删除表.
SQL> drop cluster ab_cluster including tables cascade constraints;
簇已删除。