星期一, 一月 23, 2006
10g 中的全文检索
假设是在 oatext 用户下建立全文索引
用system 帐号登陆SQLPLUS
解锁ctxsys用户
alter user ctxsys account unlock;
更改ctxsys用户密码为ctxsys
alter user ctxsys identified by ctxsys;
给予 oatext 用户ctxapp权限:
GRANT CONNECT, RESOURCE, ctxapp TO extext;
索引建立:
第一步:
BEGIN
ctx_ddl.create_preference ('oa_lexer', 'CHINESE_VGRAM_LEXER');
ctx_ddl.create_preference ('oa_datastore_prefs', 'FILE_DATASTORE');
END;
第二步:
CREATE INDEX OADOCS_TEXT_INDEX ON ATTACHFILE(ATTACHDIR) INDEXTYPE IS ctxsys.context PARAMETERS('datastore oa_datastore_prefs
Filter ctxsys.inso_filter Lexer OA_LEXER');
查询建立索引时的错误:
select err_index_name, err_text from ctx_user_index_errors;
用 system 用户给 oatext 用户授权(一定要做)
grant execute on ctx_ddl to oatext;
在 extext 用户下建立JOB 来同步索引(间隔5分钟)
-- sync:
VARIABLE jobno number;
BEGIN
DBMS_JOB.SUBMIT(:jobno,'begin ctx_ddl.sync_index(''OADOCS_TEXT_INDEX''); end;',
SYSDATE, 'SYSDATE + (1/24/12)');
commit;
END;
建立JOB 来优化索引(每天做一次)
-- optimizer
VARIABLE jobno number;
BEGIN
DBMS_JOB.SUBMIT(:jobno,'ctx_ddl.optimize_index(''OADOCS_TEXT_INDEX'',''FULL'');',
SYSDATE, 'SYSDATE + 1');
commit;
END;
在linux下(注意的):
给oracle用户角色文件夹的权限:755
给oracle用户角色文件的权限:最低要644以上
用SELECT查询
select * from tablename where (docs,'')>0;
tablename 表名,docs是包含字符的字段
注意:现在的同步索引是通过 oracle 的 job 来执行的,oracle 9i 和 oracle 10g 的job 功能都是打开的,可以通过 sysdba 角色查看
SQL> show parameters job
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
job_queue_processes integer 10
如果 job_queue_processes =0 就需要用下面的命令来打开 JOB 功能
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 10 scope=BOTH;
System altered.
需要用另外一个工具运行才不会报错。在企业管理控制台中。
执行出错。
老大:
在Oracle9i 上执行“在 extext 用户下建立JOB 来同步索引(间隔5分钟)
”这段时,报“无效的SQL”。
是不是9i的语法和10g不一样哇?



