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 | 這些視圖把表的列映射到聚簇的列。 |
總結
以上是生活随笔為你收集整理的Oracle 11g Release 1 (11.1)——简单管理聚簇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: qt学习之路3 ---信号与槽机制
- 下一篇: 【Matlab】private文件夹