网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.三巨头新加坡展示网格技术 促进在.
.Oracle组件实现动态Web数据库.
.通过LEI技术实现NOTES与SQL2000数.
.Oracle中使用自治事务保存日志表.
.如何处理Oracle中TEMP表空间满的.
.Linux日志管理详解.
.在报表视图中实现分类显示.
.如何确定Oracle是32 Bit(位)的还.
.利用Oracle数据库的JobQueue实现.
.Oracle数据库中Undo数据段的作用.
.Oracle开发(一).Windows下配置使.
.如何在Linux/390中定义SWAP卷.
.Oracle 数据库向 MS SQL Server .
.oracle 10g重建em db control.
.推荐:学习使用 Oracle触发器心得.
.Oracle SQL语言.
.win2000不能自动启动oracle服务全.
.oracle大型数据库的信息排错一法.
.Oracle10g闪回恢复区详解.
.oracle startup时 ORA-00600错误.

Oracle数据库全文索引设置步骤简介

发表日期:2008-2-9


    已有几个项目组开始使用Oracle的全文索引。Oracle的词法分析器针对ZHS16GBK字符集的词法分析尚不够智能,只能机械地以字为单元进行匹配。对于utf8字符集的数据库有一个新的汉语分析器chinese_lexer,效率有了很大改善。 现将验证并整理过的如何进行oracle全文索引设置的文档发给大家,适用于8i、9i各平台版本。 对于DB2,有一个叫做TIE(Text Information Extend)的插件可以实现全文索引,不过据说它的语法分析也很原始。据介绍使用CM(Content Manager)能做到比较好的全文检索,不过需要装一大堆的软件,不适于简单的应用。 一.创建数据库 1、使用dbassist创建数据库时要选择jserver和intermedia两个选项。 2、检查你的数据库是否安装了intermedia,可以通过检查是否有ctxsys用户和ctxapp角色(role). 3、假如没有这个用户和角色,意味着数据库创建时未安装intermedia功能。必须修改数据库以安装这项功能。修改过程: 运行 $ORACLE_HOME/bin/dbassist, 选择'modify database', 然后在选择数据库功能时将jserver 和 intermedia 都选上(安装intermedia必须同时安装jserver). 二.设置extproc Oracle 通过 ‘外部调用功能’(external procedure)来实现intermedia的,因此正确地设置extproc是要害一步。 一般数据库安装完jserver和intermedia后在listener.ora 和tnsnames.ora中已经设置了extproc。 1、测试extproc是否正常 重新启动listener,然后,使用tnsping 来测试一下是否配置正确, 命令行下运行
tnsping extproc_connection_data
或者
tnsping extproc_connection_data.world
假如配置正确,会显示:
Attempting to contact (ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC)) OK(140毫秒)
假如正确,可以跳过2、3步骤。否则请按照步骤2、3设置listener.ora 和tnsnames.ora文件,修改后一定要重新启动listener,但并不需要重新启动数据库。 2、设置listerner.ora 假如tnsping失败,需要配置listener 使它能监听intermedia 调用的请求。可以通过运行$ORACLE_HOME/bin/netassit 来进行配置,也可以手工修改配置文件:
$ORACLE_HOME/network/admin/listener.ora
然后重新启动listener。 下面以一个例子来讲述如何手工修改配置文件: 打开listener.ora文件,在修改前,通常有如下内容(假定使用缺省listener):
LISTENER = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = MYDATABASE)(PORT = 1521)) ) SID_LIST_LISTENER = (SID_DESC = (GLOBAL_DBNAME = mydatabase.world) (ORACLE_HOME = /u01/app/oracle/prodUCt/8.1.6) (SID_NAME = mydatabase) )
这个listener还没有配置extproc, 因此,需要为它增加对extproc的监听,办法就是分别增加description 和 sid_desc. 修改后的listner.ora 如下:
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = MYDATABASE)(PORT = 1521)) ) (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC)) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = mydatabase.world) (ORACLE_HOME = /u01/app/oracle/product/8.1.6)
(SID_NAME = mydatabase) ) (SID_DESC = (PROGRAM = extproc) (SID_NAME = PLSExtProc) (ORACLE_HOME = /u01/app/oracle/product/8.1.6) ) )
注重上面的host, global_dbname,sid_name,oracle_home应填写你的数据库的实际值,但program一项必须填写extproc. 3、设置tnsnames.ora 其次,要配置服务器端的tnsnames.ora文件。该文件的位置在$ORACLE_HOME/network/admin下面。同样可以通过运行netasst来进行配置。 在tnsnames.ora文件中需要增加如下一项:
EXTPROC_CONNECTION_DATA,EXTPROC_CONNECTION_DATA.WORLD = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC)) ) (CONNECT_DATA = (SID = PLSExtProc) ) )
注重其中,KEY 和SID必须与listener.ora中的key 和sid_name对应相同。 三.设置词法分析器(lexer) Oracle 缺省使用basic_lexer这个分析器。basic_lexer针对英语。 要指定使用中文分析器, 操作步骤: 1. 用ctxsys用户登陆intermedia text manager,口令ctxsys: 2.选择首选项——〉语言指示器——〉创建,输入指示器的名字如chinese_lexer,选择lexer下的chinese_vgrnm_lexer 。 3.建立intermedia索引,指定索引名,选择方案和表下的字段,例如system方案下的DOM_1_DOCLIB中的CURRENTTEXT字段,首选项中选择chinese_lexer 。 这样建立的全文检索索引,就会使用chinese_vgram_lexer作为分析器。 4.在索引建好后,在该用户下查到Oracle自动产生了以下几个表,可以使用dba studio查看:(假设索引名为myindex):
DR$myindex$I,DR$myindex$K,DR$myindex$R,DR$myindex$N
其中以I表最重要,查询该表:
select token_text, token_count from DR$I_RSK1$I where rownum<=20;
可以看到该表中保存的是Oracle分析你的文档后,生成的term记录,包括term出现的位置、次数、hash值等。 四.使用job定时同步和优化 在intermedia索引建好后,假如表中的数据发生变化,增加或修改了记录,由于对表所发生的任何dml语句,都不会自动修改索引,因此,必须定时同步(sync)和优化(optimize)索引,以正确反映数据的变化。 同步(sync):将新的term 保存到I表; 优化(optimize):清除I表的垃圾,主要是将已经被删除的term从I表删除。 Oracle提供了一个ctx server来做这个同步和优化的工作,只需要在后台运行这个进程,它会监视数据的变化,及时进行同步。但存在许多问题。可以用下的两个job来完成(该job要建在和表同一个用户下):
-- sync: VARIABLE jobno number; BEGIN DBMS_JOB.SUBMIT(:jobno,'ctx_ddl.sync_index(''myindex'');', SYSDATE, 'SYSDATE + (1/24/4)'); commit; END; -- optimizer VARIABLE jobno number; BEGIN DBMS_JOB.SUBMIT(:jobno,'ctx_ddl.optimize_index(''myindex'',''FULL'');', SYSDATE, 'SYSDATE + 1'); commit; END;
其中,第一个job的SYSDATE + (1/24/4)是指每隔15分钟同步一次,第二个job的SYSDATE + 1是每隔1天做一次全优化。具体的时间间隔,你可以根据自己的应用的需要而定。至此,你的全文检索功能已设置完成。
上一篇:Oracle数据库网络与安全之FAQ汇集 (1) 人气:960
下一篇:Oracle数据库全文索引查询模板的使用 人气:1141
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐