首页 > 编程知识 正文

oracle批量删除索引,oracle全文检索

时间:2023-05-05 13:13:31 阅读:37903 作者:3427

一些项目组开始使用oracle全文索引。 甲骨文词法分析器对ZHS16GBK字符集的词法分析还不够智能,只能机械地按字匹配。 utf8字符集数据库中有新的中文分析器chinese_lexer,大大提高了效率。 在这里,我们将验证如何设置oracle全文索引,并将整理好的文档发送给大家。 这适用于8i、9i的各个平台版本。

对于DB2,有一个名为tie (文本信息中心)的插件,可以实现全文索引,但据说语法分析也很原始。 据介绍,内容管理器(cm )可以提供更好的全文搜索,但需要安装大量软件,不适用于简单的APP应用。

一.建立数据库

使用dbassist创建数据库时,请选择两个选项: jserver和intermedia。

2、可以检查你的数据库中是否安装了intermedia,检查是否有ctxsys用户和ctxapp角色(role )。

3、如果与此用户没有角色,则表示创建数据库时未安装intermedia功能。 必须修改数据库才能安装此功能。 修复流程:

运行$ORACLE_HOME/csdbg/dbassist,然后选择“修改数据库”。 接下来,在选择数据库功能时,同时选择jserver和intermedia (请参见

extproc的设定

由于Oracle通过“外部调用功能”(external procedure )实现了内部媒体,因此正确设置extproc是重要的一步。 典型的数据库在安装jserver和intermedia后,在listener.ora和tnsnames.ora上设置了extproc。

1、测试extproc是否正常

重新启动监听器并测试是否使用tnsping正确配置。

在命令行上运行

tnsping extproc_connection_data或

tspingextproc _ connection _ data.world

如果配置正确,将显示以下内容:

attemptingtocontact (地址=(协议=IPC )密钥=ext proc ) (确定) 140毫秒) ) )。

如果正确,可以跳过2、3的步骤。 否则,请按照步骤2和3设置listener.ora和tnsnames.ora文件,并确保在更改后重新启动监听器。 但是,不需要重新启动数据库。

2、设置listerner.ora

如果tnsping失败,则必须设置监听器以接收对intermedia调用的请求。 可以通过运行$ORACLE_HOME/csdbg/netassit进行配置,也可以手动修改名为$ Oracle _ home/network/admin/listener.ora的配置文件来重新启动监听器

以下示例说明如何手动更改配置文件:

打开listener.ora文件时,通常在更改之前会出现以下内容: 假设使用默认监听器。

LISTENER= www.2cto.com

(描述=

(地址=(协议=TCP );主机=my database );端口=1521 ) )

SID_LIST_LISTENER=

(SID_DESC=

(GLOBAL_DBNAME=mydatabase.world )

(Oracle _ home=/u01/app/Oracle/product/8.1.6 )

(sid _ name=my数据库)

由于此监听器尚未设置extproc,因此必须通过分别添加description和sid_desc .更改后的listner.ora来增加对extproc的监听。

监听器=

(DESCRIPTION_LIST=

(描述=

(地址=(协议=TCP );主机=my database );端口=1521 ) )

(描述=

(地址=(协议=IPC )密钥=ext proc ) )

SID_LIST_LISTENER=

(SID_LIST=

(SID_DESC=

(GLOBAL_DBNAME=mydatabase.world )

(Oracle _ home=/u01/app/Oracle/product/8.1.6 )

(sid _ name=my数据库)

) ww

w.2cto.com

(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))

)   www.2cto.com

(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)索引,以正确反映数据的变化。   www.2cto.com

同步(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;   www.2cto.com

END;

其中,第一个job的SYSDATE + (1/24/4)是指每隔15分钟同步一次,第二个job的SYSDATE + 1是每隔1天做一次全优化。具体的时间间隔,你可以根据自己的应用的需要而定。至此,你的全文检索功能已设置完成。

作者 z_kanhai

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。