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

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

原文地址:https://www.cnblogs.com/liuning8023/p/2657003.html