這篇文章介紹Oracle全文索引的STORAGE屬性
Oracle全文索引的STORAGE屬性是為了給全文索引生成的輔助表設置存儲參數的
Oracle的全文索引會生成一張或多張輔助表由於這些表是Oracle自動生成的用戶沒有辦法直接設置這些表和索引的物理參數因此Oracle提供了STORAGE屬性專門設置這些輔助表和索引的物理參數
SQL SELECT * FROM TAB;
TNAME TABTYPE CLUSTERID—————————— —— ———DR$IND_T_DOCS$I TABLEDR$IND_T_DOCS$K TABLEDR$IND_T_DOCS$N TABLEDR$IND_T_DOCS$P TABLEDR$IND_T_DOCS$R TABLET TABLE
已選擇行
上面的五張表都是全文索引生成的CONTEXT索引生成表的規則是DR$+索引名+$+表用途標識
DR$IND_T_DOCS$I存儲的是索引數據表(Index data table);
DR$IND_T_DOCS$K存儲的是鍵值映射表(Keymap table);
DR$IND_T_DOCS$R是ROWID表(Rowid table);
DR$IND_T_DOCS$N是負鍵值鏈表(Negative list table);
DR$IND_T_DOCS$P這個表只有在CONTEXT索引中設置BASIC_WORDLIST的SUBSTRING_INDEX屬性後才會生成用來保存單詞的部分內容
DR$IND_T_DOCS$X這個索引是DR$IND_T_DOCS$I表的索引
SQL SELECT TABLE_NAME INDEX_NAME FROM USER_INDEXES WHERE INDEX_NAME LIKE DR%;
TABLE_NAME INDEX_NAME—————————— ——————————DR$IND_T_DOCS$I DR$IND_T_DOCS$X
如果不進行設置那麼Oracle會將這些對象存放到默認表空間中並根據默認表空間的存儲參數設置這些對象的存儲參數
SQL SELECT
TABLE_NAME NAME
DECODE
(
IOT_TYPE
IOT
(
SELECT TABLESPACE_NAME
FROM USER_INDEXES
WHERE TABLE_NAME = ATABLE_NAME
AND INDEX_TYPE = IOT TOP
)
TABLESPACE_NAME
) TABLESPACE_NAME
FROM USER_TABLES A
WHERE TABLE_NAME LIKE DR%
UNION ALL
SELECT INDEX_NAME NAME TABLESPACE_NAME
FROM USER_INDEXES
WHERE INDEX_NAME LIKE DR%;
NAME TABLESPACE_NAME—————————— ———————DR$IND_T_DOCS$I YANGTKDR$IND_T_DOCS$K YANGTKDR$IND_T_DOCS$N YANGTKDR$IND_T_DOCS$P YANGTKDR$IND_T_DOCS$R YANGTKDR$IND_T_DOCS$X YANGTK
已選擇行
下面通過設置STORAGE屬性設置自動生成的表和索引的表空間屬性
SQL CREATE TABLE T (ID NUMBER DOCS VARCHAR());
表已創建
SQL INSERT INTO T VALUES ( A simple example for storage);
已創建 行
SQL COMMIT;
提交完成
SQL CONN CTXSYS/CTXSYS@YANGTK
注意這裡是ctxsys登陸登陸前一般需要解鎖ctxsys用戶/ alter user ctxsys account unlock;已連接
SQL BEGIN
CTX_DDLCREATE_PREFERENCE(TEST_WORDLIST_STORAGE BASIC_WORDLIST);
CTX_DDLSET_ATTRIBUTE(TEST_WORDLIST_STORAGE SUBSTRING_INDEX TRUE);
CTX_DDLCREATE_PREFERENCE(TEST_STORAGE BASIC_STORAGE);
CTX_DDLSET_ATTRIBUTE(TEST_STORAGE I_TABLE_CLAUSE TABLESPACE USERS);
CTX_DDLSET_ATTRIBUTE(TEST_STORAGE K_TABLE_CLAUSE TABLESPACE TOOLS);
CTX_DDLSET_ATTRIBUTE(TEST_STORAGE R_TABLE_CLAUSE TABLESPACE EXAMPLE);
CTX_DDLSET_ATTRIBUTE(TEST_STORAGE N_TABLE_CLAUSE TABLESPACE USERS);
CTX_DDLSET_ATTRIBUTE(TEST_STORAGE P_TABLE_CLAUSE TABLESPACE TOOLS);
CTX_DDLSET_ATTRIBUTE(TEST_STORAGE I_INDEX_CLAUSE TABLESPACE INDX);
END;
/
PL/SQL 過程已成功完成
SQL CONN YANGTK/YANGTK@YANGTK已連接
SQL CREATE INDEX IND_T_DOCS ON T(DOCS) INDEXTYPE IS CTXSYSCONTEXT
PARAMETERS (WORDLIST CTXSYSTEST_WORDLIST_STORAGE STORAGE CTXSYSTEST_STORAGE);
索引已創建
SQL SELECT
TABLE_NAME NAME
DECODE
(
IOT_TYPE
IOT
(
SELECT TABLESPACE_NAME
FROM USER_INDEXES
WHERE TABLE_NAME = ATABLE_NAME
AND INDEX_TYPE = IOT TOP
)
TABLESPACE_NAME
) TABLESPACE_NAME
FROM USER_TABLES A
WHERE TABLE_NAME LIKE DR%
UNION ALL
SELECT INDEX_NAME NAME TABLESPACE_NAME
FROM USER_INDEXES WHERE INDEX_NAME LIKE DR%;
NAME TABLESPACE_NAME—————————— ——————————DR$IND_T_DOCS$I USERSDR$IND_T_DOCS$K TOOLSDR$IND_T_DOCS$N USERSDR$IND_T_DOCS$P TOOLSDR$IND_T_DOCS$R EXAMPLEDR$IND_T_DOCS$X INDX
已選擇行
通過查詢看到STORAGE屬性的設置已經生效了
From:http://tw.wingwit.com/Article/program/Oracle/201311/18200.html