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 的聚簇,该聚簇存储 emp 和 dept 表:
CREATE CLUSTER emp_dept (deptno NUMBER(3))
SIZE 600
TABLESPACE mytbs
STORAGE (INITIAL 200K
NEXT 300K
MINEXTENTS 2
PCTINCREASE 33);
如果没有指定 INDEX 关键字,正如上面语句,那么会默认创建一个索引聚簇。指定哈希参数(HASHKEYS、HASH IS 或 SINGLE TABLE HASHKEYS)可以创建一个哈希聚簇。
创建聚簇的表
若在聚簇中创建表,必须具有 CREATE TABLE 或 CREATE ANY TABLE 系统权限。但不需要表空间配额或 UNLIMITED TABLESPACE 系统权限。
利用带 CLUSTER 子句的 CREATE TABLE 语句在聚簇中创建表。下面语句在 emp_dept 聚簇中创建 emp 和 dept 表:
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 |
这些视图把表的列映射到聚簇的列。 |