网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
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教程,数据库安全,数据库文摘
本月文章推荐
.在非归档模式下如何更改数据文件.
.Qmail日志中为什么会出现“CNAME.
.Oracle自定义函数——f_henry_Ge.
.如何在oracle存储过程中返回游标.
.10g即时客户端在不同系统环境下的.
.ORACLE 面试问题-技术篇(2).
.今天帮朋友解决了一个ora-00904.
.如何单独备份一个或多个用户?.
.提高查询主、从表速度的一个方法.
.Oracle 9i管理工具的使用.
.使用命令行导入导出方案(oracle.
.Oracle Database 9i 在Linux 下的.
.stty使用方法.
.Oracle用“Cooking With Code”为.
.oracle中实现主键的自动增加.
.如何才能在同一台机器配置两个li.
.关于Oracle和SQL存储调试和出错处.
.Oracle 4月更新修复多个安全漏洞.
.如何拷贝与粘贴.
.两个有用的oracle数据库运算:in.

讲解Oracle数据库的全文索引设置步骤

发表日期:2008-3-27


一.创建数据库

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优化器的优化方式和优化模式 人气:1053
下一篇:实例讲解如何删除Oracle 10g的垃圾表 人气:1175
浏览全部Oracle的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐