网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>数据库技术>>Oracle技术>>Oracle开发>查看文档  
  讲解oracle数据库的全文索引设置步骤 (1)     
  文章作者:未知  文章来源:赛迪网技术社区  
  查看:95次  录入:管理员--2008-03-27  
 

【赛迪网-it技术报道】一.创建数据库

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优化器的优化方式和优化模式 (1)    下一篇: where子句在编写过程中需要注意的问题 (1)
  相关文档
深入探讨Oracle数据缓冲区内部机制 04-11
Oracle中自动存储管理技术原理及应用 04-11
oracle数据库建表脚本当中使用默认值的实例 08-15
在Oracle 9i中Form Builder使用树心得 07-07
经验总结:sql server与oracle的数据同步 06-12
Oracle中有没有系统数据库? 09-29
帮你解决Oracle 9i和Tomcat的端口冲突 05-27
教你快速掌握一个简单的oracle定时任务 03-14
实例解析Oracle是共享模式还是专用模式 09-01
如何获取或记录Oracle语句执行时间 09-29
Oracle Online Redo LogFile 09-29
深入讲解如何保证和加强数据库的安全性 (1) 02-20
启动或关闭数据库的归档(archivelog)模式 08-06
Oracle 容灾复制解决方案分析Shar Plex 06-17
创建物化视图提高查询速度 04-11
从应用程序着手优化Oracle数据库 04-11
关于Oracle 9i数据库密码重用规则分析 04-11
Oracle-Decode()函数和CASE语句的比较 06-03
oracle11g之初体验 数据中心自动化等功能 09-24
讲解"oracle"下导出某用户所有表的方法 02-02
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
厦门(总部):13616026886 福州:0591-87655121
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息