zoukankan      html  css  js  c++  java
  • 第一次实施Oracle Text项目,经验与教训记录

    前面对Oracle Text做了一段时间的学习和研究应用
    但是都关注于如果使用以与我们的系统集成

    这2周去客户那实施,
    由于2台Oracle服务器虽然版本相同,但某些配置或环境的原因(最后也没找到那些区别)
    之间遇到的N多问题把我郁闷坏了
    google不到,其间还通知ITPub重启了一次服务器。。

    在此做一下总结吧,免得又忘了

    1. 关于不同服务器,2个模糊搜索or的解决办法
    数据表T1有2个字段f1,f2均建有全文索引
    搜索语法应该是
    Select Count(id) from t1 where contains(idx_f1,'about(中国)')>0 or  contains(idx_f2,'about(中国)')>0

     在一台服务器是正常的(搜索耗时不到1s),另一台有问题如下(搜索耗时1min+):

    SQL> SELECT count(t1.sFileID) FROM bms115.tfilecache t1 where ((Contains(t1.sdoc
    info,'About(sports arts)', 1) > 0 or Contains(t1.scontext,'About(sports arts)' , 2) > 0));


    COUNT(T1.SFILEID)
    -----------------
    872


    Execution Plan
    ----------------------------------------------------------
    0 SELECT STATEMENT Optimizer=CHOOSE (Cost=55 Card=1 Bytes=107)
    1 0 SORT (AGGREGATE)
    2 1 TABLE ACCESS (FULL) OF 'TFILECACHE' (Cost=55 Card=135 By
    tes=14445)

    上面TABLE ACCESS (FULL) OF 'TFILECACHE' 在正常机器为Table Access(By Index RowID)


    Statistics
    ----------------------------------------------------------
    1378394 recursive calls
    0 db block gets
    1386185 consistent gets
    2 physical reads
    0 redo size
    386 bytes sent via SQL*Net to client
    503 bytes received via SQL*Net from client
    2 SQL*Net roundtrips to/from client
    0 sorts (memory)
    0 sorts (disk)
    1 rows processed

    解决办法为
    修改查询语句,采用union分别计算2个字段的情况
    SELECT count(t1.sFileID) FROM bms115.tfilecache t1 where ((Contains(t1.sdocinfo,'About(sports arts)', 1) > 0
    union
    SELECT count(t1.sFileID) FROM bms115.tfilecache t1 where Contains(t1.scontext,'About(sports arts)' , 2) > 0));
    这种语句并不是对所有情适用,在我们单位测试机器上,就只能使用Or连接的方式


    2.无法启用在线更新的办法
    在执行索引更新时
      execute immediate
     ' alter index BMS115.IDX_CONTEXT rebuild online ' ||
     ' parameters ( ''sync'' )' ;
    时出现问题 说 未启用特性 Online Index Build
    这个据google说是Oracle版本问题
    但我们的情况是2台都是企业版,可能安装有差别
    解决办法是使用ctx_ddl包的相关办法
    ctx_ddl.sync_index('BMS115.IDX_CONTEXT' );
    要在存储过程中使用这个包,需要用户授予ctxApp角色,同时添加对该包的访问权限: EnterpriseManager 安全性--〉用户 -->对象页签

    或者重建索引
    drop index idx_f1;
    create index idx_f1 on t1(f1) index type is ....;

    对于查询使用Union的情况,
    在执行完同步后,要记得要执行一次分析
    dbms_stats.gather_index_stats(ownname=> 'BMS115', indname=> 'IDX_CONTEXT', partname=> NULL);
    否则速度慢的可怜。。。



  • 相关阅读:
    axios的使用/
    jQuery好玩的双向控制轮播
    vue的路由跳转方式/两种
    vfor的某些注意事项
    vue使用插件时不能撑满页面?
    swiper中的双向控制器不生效问题
    sass的安装及使用
    .net必懂题
    软件架构初读01
    EJB
  • 原文地址:https://www.cnblogs.com/calmzeal/p/770514.html
Copyright © 2011-2022 走看看