这篇文章介绍
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
已选择6行。
上面的五张表都是全文索引生成的。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会将这些对象存放到默认表
空间中,并根据默认表
空间的存储参数设置这些对象的存储参数。
1 SQL SELECT
2 TABLE_NAME NAME,
3 DECODE
4 (
5 IOT_TYPE,
6 'IOT',
7 (
8 SELECT TABLESPACE_NAME
9 FROM USER_INDEXES
10 WHERE TABLE_NAME = A.TABLE_NAME
11 AND INDEX_TYPE = 'IOT - TOP'
12 ),
13 TABLESPACE_NAME
14 ) TABLESPACE_NAME
15 FROM USER_TABLES A
16 WHERE TABLE_NAME LIKE 'DR%'
17 UNION ALL
18 SELECT INDEX_NAME NAME, TABLESPACE_NAME
19 FROM USER_INDEXES
20 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
已选择6行。
下面通过设置STORAGE属性,设置自动生成的表和索引的表空间属性:
SQL CREATE TABLE T (ID NUMBER, DOCS VARCHAR2(1000));
表已创建。
SQL INSERT INTO T VALUES (1, 'A simple example for storage.');
已创建 1 行。
SQL COMMIT;
提交完成。
SQL CONN CTXSYS/CTXSYS@YANGTK
注意:这里是ctxsys登陆,登陆前一般需要解锁ctxsys用户/ alter user ctxsys account unlock;已连接。
1 SQL BEGIN
2 CTX_DDL.CREATE_PREFERENCE('TEST_WORDLIST_STORAGE', 'BASIC_WORDLIST');
3 CTX_DDL.SET_ATTRIBUTE('TEST_WORDLIST_STORAGE', 'SUBSTRING_INDEX', 'TRUE');
4 CTX_DDL.CREATE_PREFERENCE('TEST_STORAGE', 'BASIC_STORAGE');
5 CTX_DDL.SET_ATTRIBUTE('TEST_STORAGE', 'I_TABLE_CLAUSE', 'TABLESPACE USERS');
6 CTX_DDL.SET_ATTRIBUTE('TEST_STORAGE', 'K_TABLE_CLAUSE', 'TABLESPACE TOOLS');
7 CTX_DDL.SET_ATTRIBUT