zoukankan      html  css  js  c++  java
  • Oracle 11g Release 1 (11.1)——简单管理聚簇

    http://docs.oracle.com/cd/B28359_01/server.111/b28310/clustrs.htm#i1006586

    本文内容

    • 创建聚簇
    • 变更聚簇
    • 删除聚簇

    创建聚簇


    创建聚簇

    在你的模式中或在另一个用户模式中,创建聚簇必须具有 CREATE CLUSTER(后者是 CREATE ANY CLUSTER系统权限,以及计划包含聚簇的表空间配额,或 UNLIMITED TABLESPACE 系统权限。

    利用 CREATE CLUSTER 语句创建聚簇。下面语句用 deptno 列创建一个名为 emp_dept 的聚簇,该聚簇存储 empdept 表:

    CREATE CLUSTER emp_dept (deptno NUMBER(3))
       SIZE 600
       TABLESPACE mytbs
       STORAGE (INITIAL 200K
          NEXT 300K
          MINEXTENTS 2
          PCTINCREASE 33);

    如果没有指定 INDEX 关键字,正如上面语句,那么会默认创建一个索引聚簇。指定哈希参数(HASHKEYSHASH ISSINGLE TABLE HASHKEYS)可以创建一个哈希聚簇。

    创建聚簇的表

    若在聚簇中创建表,必须具有 CREATE TABLECREATE ANY TABLE 系统权限。但不需要表空间配额或 UNLIMITED TABLESPACE 系统权限。

    利用带 CLUSTER 子句的 CREATE TABLE 语句在聚簇中创建表。下面语句在 emp_dept 聚簇中创建 empdept 表:

    CREATE TABLE EMP
    (
       EMPNO      NUMBER (4) NOT NULL,
       ENAME      VARCHAR2 (10),
       JOB        VARCHAR2 (9),
       MGR        NUMBER (4),
       HIREDATE   DATE,
       SAL        NUMBER (7, 2),
       COMM       NUMBER (7, 2),
       DEPTNO     NUMBER (3)
    )
    CLUSTER emp_dept ( deptno );
     
    CREATE TABLE DEPT
    (
       DEPTNO   NUMBER (3) NOT NULL,
       DNAME    VARCHAR2 (14),
       LOC      VARCHAR2 (13)
    )
    CLUSTER emp_dept ( deptno );

    备注:可以在 CREATE TABLE 语句为聚簇的表指定模式。聚簇的表可以在不同的模式。另外,列的名称不需要匹配,但是结构必须一致。

    创建聚簇索引

    创建聚簇索引必须具备以下条件:

    • 包含聚簇
    • 具有 CREATE ANY INDEX 系统权限

    也必须具有计划包含聚簇索引的表空间配额,或 UNLIMITED TABLESPACE 系统权限。

    下面语句为聚簇 emp_dept 创建聚簇索引:

    CREATE INDEX emp_dept_index
       ON CLUSTER emp_dept
       STORAGE (INITIAL 50 K
                NEXT 50 K
                MINEXTENTS 2
                MAXEXTENTS 10
                PCTINCREASE 33);

    ON CLUSTER 子句指定聚簇 emp_dept。语句也指定了很多对聚簇和聚簇索引的存储设置。

    变更聚簇


    变更聚簇

    若变更聚簇,你的模式必须包含聚簇,或具有 ALTER ANY CLUSTER 系统权限。你可以变更一个已存在的聚簇的如下设置:

    • 物理属性(INITRANS 和 storage 特性)
    • 要求存储所有聚簇行的平均空间大小
    • 默认的并行程度

    参看 ALTER CLUSTER http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_1.htm#SQLRF008

    变更聚簇的表

    利用 ALTER TABLE 语句来变更聚簇的表。但为一个聚簇的表,设置数据块参数、事务参数或存储参数会抛出错误信息(ORA-01771,illegal option for a clustered table)。数据库为所有聚簇的表使用聚簇参数。因此,使用 ALTER TABLE 语句只能添加或修改列,删除非聚簇的列,或是添加删除启用禁用完整性约束,或是聚簇表的触发器。

    参考 Altering Tables http://docs.oracle.com/cd/B28359_01/server.111/b28310/tables006.htm#i1006494

    变更聚簇索引

    变更聚簇索引跟变更索引一样。

    删除聚簇


    删除聚簇

    若聚簇内的表不再使用,则可以删除聚簇。当删除聚簇时,聚簇内的所有表和相应的聚簇索引也会被删除。属于聚簇的数据段和其索引段的空间会被释放,被重新使用。

    使用 DROP CLUSTER 语句,删除一个不包含任何表的聚簇,及其索引。如下所示,删除一个名为 emp_dept 的空的聚簇:

    DROP CLUSTER emp_dept;

    使用带 INCLUDING TABLES 子句的 DROP CLUSTER 语句,删除一个包含一个或多个聚簇表的聚簇。如下所示,删除一个非空的聚簇:

    DROP CLUSTER emp_dept INCLUDING TABLES;

    使用带 CASCADE CONSTRAINTS 子句的 DROP CLUSTER 语句,删除聚簇,和聚簇的表及其依赖关系。如下所示:

    DROP CLUSTER emp_dept INCLUDING TABLES CASCADE CONSTRAINTS;

    参看 DROP CLUSTER  http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_8007.htm#SQLRF01511

    删除聚簇的表

    若删除一个聚簇,你的模式必须包含聚簇,或具有 DROP ANY CLUSTER 系统权限。不需要额外的权限来删除一个包含聚簇表的聚簇,即使聚簇的表拥有者不是你。

    聚簇的表可以被单独删除,而不会影响聚簇,或是其他聚簇的表,或聚簇索引。删除一个聚簇的表跟删除一个非聚簇的表一样。

    备注:当从聚簇删除一个表时,数据库单独删除表的所有行。处于效率的考虑,若想删除整个聚簇,则使用 DROP CLUSTER 语句。若只想聚簇中的一个表,则使用 DROP TABLE 语句。

    删除聚簇索引

    删除聚簇索引不会影响聚簇或其聚簇的表。但若没有聚簇索引,就不能使用聚簇的表;想访问聚簇,必须重新创建聚簇索引。有时,存储过程会删除聚簇索引以重建破碎的聚簇索引。

    聚簇数据字典视图


    下面视图显示关于聚簇的信息:

    视图 描述
    DBA_CLUSTERS
    ALL_CLUSTERS
    USER_CLUSTERS
    DBA_CLUSTERS 视图描述数据库中的所有聚簇。ALL_CLUSTERS 视图描述用户可以访问的视图。USER_CLUSTERS 视图限制在聚簇的拥有者。这些的视图的列包含由 DBMS_STATS 包或 ANALYZE 语句产生的统计信息。
    DBA_CLU_COLUMNS
    USER_CLU_COLUMNS

    这些视图把表的列映射到聚簇的列。

  • 相关阅读:
    android:text 文字阴影设置
    android 布局的android:padding 和android:margin的区别
    sqlite的Query方法操作和参数详解
    SQL Server中如何让SQL语句对字符串大小写敏感
    android SQLite数据库(转)
    JAVA中内存分配的问题
    testview属性之详解
    在linux环境下安装VMtools(成功)
    关于配置文件
    C#的几种“属性”概念理解
  • 原文地址:https://www.cnblogs.com/liuning8023/p/2657003.html
Copyright © 2011-2022 走看看