根据Oracle Text Application Developer’s Guide,我们首先需要建立一个测试用的用户,然后Grant CTXAPP这个角色给它。
如果这个角色不存在,会报:
SQL> grant CTXAPP to haozhu;
grant CTXAPP to haozhu
*
ERROR at line 1:
ORA-01919: role 'CTXAPP' does not exist
那么如何创建这个角色和其他相关的对象呢?
从10G开始,我们只需要执行这个SQL脚本即可:$ORACLE_HOME/ctx/admin/catctx.sql
这个脚本有四个输入参数:
define pass = "&1"
define tbs = "&2"
define ttbs = "&3"
define dolock = "&4"
这四个参数其实是传递给在这个脚本里调用的另一个脚本的:
@@ctxsys.sql &pass &tbs &ttbs &dolock
再打开ctxsys.sql就可以看到这四个参数的意思:
create user ctxsys
identified by &pass default tablespace &tbs temporary tablespace &ttbs;
begin
if ('&dolock' = 'LOCK') then
execute immediate
'alter user ctxsys password expire account lock';
end if;
end;
/
原来,&pass是CTXSYS user的密码,&tbs是CTXSYS user的default tablespace,&ttbs是CTXSYS user的temporary tablespace;而&dolock只要不为'LOCK',那么CTXSYS user就不会被锁住。
于是,执行如下命令安装TEXT相关user,role,objects...
SQL> @?/ctx/admin/catctx.sql mypwd DATA TEMP NOLOCK
接着我们按照文档创建一个简单的测试:
CREATE TABLE docs (id NUMBER PRIMARY KEY, text VARCHAR2(200));
INSERT INTO docs VALUES(1, 'California is a state in the US.');
INSERT INTO docs VALUES(2, 'Paris is a city in France.');
INSERT INTO docs VALUES(3, 'France is in Europe.');
然后创建TEXT index:
SQL> CREATE INDEX idx_docs ON docs(text)
2 INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS
3 ('FILTER CTXSYS.NULL_FILTER SECTION GROUP CTXSYS.HTML_SECTION_GROUP');
CREATE INDEX idx_docs ON docs(text)
*
ERROR at line 1:
ORA-29855: error occurred in the execution of ODCIINDEXCREATE routine
ORA-20000: Oracle Text error:
DRG-10700: preference does not exist: CTXSYS.DEFAULT_LEXER
ORA-06512: at "CTXSYS.DRUE", line 160
ORA-06512: at "CTXSYS.TEXTINDEXMETHODS", line 366
我们发现在创建index的时候出错了,原因是我们并没有执行这个脚本:$ORACLE_HOME/ctx/admin/defaults/drdefus.sql
于是执行之:(注意,这个脚本需要用CTXSYS用户执行)
SQL> conn CTXSYS/mypwd
SQL> @?/ctx/admin/defaults/drdefus.sql
在使用SYS赋权之后,再尝试创建index:
SQL> CREATE INDEX idx_docs ON docs(text)
2 INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS
3 ('FILTER CTXSYS.NULL_FILTER SECTION GROUP CTXSYS.HTML_SECTION_GROUP');
CREATE INDEX idx_docs ON docs(text)
*
ERROR at line 1:
ORA-00955: name is already used by an existing object
发现,虽然我们前面创建TEXT index出错,但是实际还是创建出来了一个index,只是他的user_indexes.DOMIDX_OPSTATUS='FAILED'。
SQL> l
1 select INDEX_TYPE,STATUS,DOMIDX_STATUS,DOMIDX_OPSTATUS
2* from user_indexes where INDEX_NAME='IDX_DOCS'
SQL> /
INDEX_TYPE STATUS DOMIDX_STATUS DOMIDX_OPSTATUS
---------- ------- ------------------------------------ ------------------
DOMAIN VALID VALID FAILED
而且这个TEXT index是无法被使用的:
SQL> SELECT SCORE(1), id, text FROM docs WHERE CONTAINS(text, 'France', 1) > 0;
SELECT SCORE(1), id, text FROM docs WHERE CONTAINS(text, 'France', 1) > 0
*
ERROR at line 1:
ORA-20000: Oracle Text error:
DRG-10599: column is not indexed
所以我们只得drop重建。
SQL> drop index IDX_DOCS;
Index dropped.
SQL> CREATE INDEX idx_docs ON docs(text)
2 INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS
3 ('FILTER CTXSYS.NULL_FILTER SECTION GROUP CTXSYS.HTML_SECTION_GROUP');
Index created.
SQL> SELECT SCORE(1), id, text FROM docs WHERE CONTAINS(text, 'France', 1) > 0;
SCORE(1) ID TEXT
---------- ---------- ------------------------------------------------------------
4 2 Paris is a city in France.
4 3 France is in Europe.
最后按照文档,我们需要grant如下权限给当前测试用户。
GRANT RESOURCE, CONNECT, CTXAPP TO TEXT_USER;
GRANT EXECUTE ON CTXSYS.CTX_CLS TO TEXT_USER;
GRANT EXECUTE ON CTXSYS.CTX_DDL TO TEXT_USER;
GRANT EXECUTE ON CTXSYS.CTX_DOC TO TEXT_USER;
GRANT EXECUTE ON CTXSYS.CTX_OUTPUT TO TEXT_USER;
GRANT EXECUTE ON CTXSYS.CTX_QUERY TO TEXT_USER;
GRANT EXECUTE ON CTXSYS.CTX_REPORT TO TEXT_USER;
GRANT EXECUTE ON CTXSYS.CTX_THES TO TEXT_USER;
GRANT EXECUTE ON CTXSYS.CTX_ULEXER TO TEXT_USER;
综上,在11G,手工创建ORACLE TEXT只需要如下三步:
1.
login as SYS:
@?/ctx/admin/catctx.sql mypwd DATA TEMP NOLOCK
2.
login as CATSYS user,run:
conn CTXSYS/mypwd
@?/ctx/admin/defaults/drdefus.sql
3.
create user TEXT_USER identified by TEXT_USER;
GRANT RESOURCE, CONNECT, CTXAPP TO TEXT_USER;
GRANT EXECUTE ON CTXSYS.CTX_CLS TO TEXT_USER;
GRANT EXECUTE ON CTXSYS.CTX_DDL TO TEXT_USER;
GRANT EXECUTE ON CTXSYS.CTX_DOC TO TEXT_USER;
GRANT EXECUTE ON CTXSYS.CTX_OUTPUT TO TEXT_USER;
GRANT EXECUTE ON CTXSYS.CTX_QUERY TO TEXT_USER;
GRANT EXECUTE ON CTXSYS.CTX_REPORT TO TEXT_USER;
GRANT EXECUTE ON CTXSYS.CTX_THES TO TEXT_USER;
GRANT EXECUTE ON CTXSYS.CTX_ULEXER TO TEXT_USER;
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15415488/viewspace-622482/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/15415488/viewspace-622482/
本文详细介绍Oracle Text在Oracle 11G中的手动安装配置步骤,包括创建CTXSYS用户、执行初始化脚本、创建测试用户及权限分配等,并解决创建全文索引过程中遇到的问题。
一 :手工建立TEXT&spm=1001.2101.3001.5002&articleId=100418994&d=1&t=3&u=1e7980b994934a2d9591b5d38898252d)
1344

被折叠的 条评论
为什么被折叠?



