oracle 创建簇

来源:互联网 发布:软件项目任务模版 编辑:程序博客网 时间:2024/06/05 19:12

<在此声明,此博文转摘自别处,具体出处不详。>

簇的概念以及如何创建簇!

****************************簇***************************
簇可以实现将大的表和索引进行拆分,使处理速度提高和管理方便
1.1簇的概念
(cluster)就是将一组有机联系的表在物理上存放在一起,并且相同的关键列的值只存储一份,用于提高处理效率的的一项技术;oracle并行服务器通过使一组节点共享同一簇中的工作负载来扩展Windows NT的能力,
oracle提供具有高可用性和高伸缩性的簇解决方案。
  (1).何时建立簇
  如果通过引用完整性把两个或多个表联系起来并经常使用联结,则为这个表创建一个索引簇
  (2).有时簇会损害性能
  对频繁更新或删除的表使用簇对性能有不利的影响
  (3).限制
  .簇中的每一个表必须有一列与簇中指定的列的大小和类型匹配
  .簇码中可用的最大数目是16
  .列的最大长度为239字节
  .LONG和LONG RAW不能作为簇列码
1.2
  1.创建簇语法
  CREATE CLUSTER cluster(columndatatype)
  [pctused 40|integer] [pctfree10|integer]
  [size integer]
  [initrans 1|integer][maxtrans255|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_novarchar2(15))
    tablespace gao_tablespace
    storage(initial 1m maxextents 121 pctincrease0);
SQL> create index unit_inf_ind on clusteremp_unit
   tablespacegao_tablespace;
SQL> drop table unit_inf;
SQL> create table unit_inf
   (
   bank_code  varchar2(6),
    acc_no    varchar2(15),
   proc_date  date,
   unit_name  varchar2(50),
    area     varchar2(20),
    address   varchar2(50),
    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_departvarchar2(40)
19  )
20  clusteremp_unit(acc_no);
SQL> create unique index unit_inf_in onunit_inf(acc_no)
   storage(initial1m next 512k maxextents 121 pctincrease 0);
SQL> drop table pay_lst_det;
SQL> create table pay_lst_det
   (
   bank_code  varchar2(6) notnull,
    acc_no    varchar2(15)not null,
    emp_acc_no varchar2(20) not null,
    table_date date,
    name     varchar2(10)
   )
   clusteremp_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    INTEGER
|INITRANS INTEGER
|MAXTRANS INTEGER
|STORAGE  CLUSTER
[例]修改簇的参数
SQL> ALTER CLUSTER EMP_UNIT
    PCTFREE 30
    PCTUSER 60;

1.4删除簇
drop cluster [user.]cluster [including tables]

1.5删除簇索引
有时为了清除盘空间的碎片,我们经常进行删除簇索引的操作.

1.6收集簇信息
  .DBA_CLU_COLUMNS或USER_CLU_COLUMNS
  .DBA_CLUSTERS或USER_CLUSTERS
SQL> desc dba_clu_columns;
名称                   是否为空?类型
------------------------------- -------- ----
OWNER                    NOT NULLVARCHAR2(30)
CLUSTER_NAME               NOT NULLVARCHAR2(30)
CLU_COLUMN_NAME            NOT NULLVARCHAR2(30)
TABLE_NAME                 NOT NULLVARCHAR2(30)
TAB_COLUMN_NAME                  VARCHAR2(4000)

SQL> desc dba_clusters;
名称                         是否为空?类型
-------------------------------      --------       ----
OWNER                    NOT NULLVARCHAR2(30)
CLUSTER_NAME               NOT NULLVARCHAR2(30)
TABLESPACE_NAME            NOT NULLVARCHAR2(30)
PCT_FREE                        NUMBER
PCT_USED                  NOT NULLNUMBER
KEY_SIZE                        NUMBER
INI_TRANS                 NOT NULLNUMBER
MAX_TRANS                 NOT NULLNUMBER
INITIAL_EXTENT                   NUMBER
NEXT_EXTENT                      NUMBER
MIN_EXTENTS                NOT NULLNUMBER
MAX_EXTENTS                NOT NULLNUMBER
PCT_INCREASE               NOT NULLNUMBER
FREELISTS                              NUMBER
FREELIST_GROUPS                    NUMBER
AVG_BLOCKS_PER_KEY                NUMBER
[例]分析簇
SQL> ANALYZE CLUSTER emp_unit computestatistics;
SQL> select * from user_clusters wherecluster_name='emp_unit';
0 0
原创粉丝点击