服务器配置:
         os:window 2003;
         内存:4G;
         32bit;数据库配置:
         db:oracle 9.2.0.7
         shared_pool_size:200M
         db_cache_size:600M
         pga:700m
         sort_area_size=300000运行语句:CREATE INDEX vol_maintitle ON menu_vol(maintitle) INDEXTYPE IS ctxsys.CONTEXT  PARAMETERS   ('lexer  my_chinese_lexer');
报错;
错误信息:
          ORA-29855: error occurred in the execution of ODCIINDEXCREATE routine
         ORA-20000: Oracle Text error:
         ORA-04030: out of process memory when trying to allocate 66840 bytes (Heap for lexic,gxlGetMem:memory)
         ORA-06512: at "CTXSYS.DRUE", line 157
         ORA-06512: at "CTXSYS.TEXTINDEXMETHODS", line 186         数据库数据800多万,最多执行到34%的时候报错。
          曾经试过把sga和pga调大或者调小。但是最多执行到34%报错。          不知是我的配置问题?还是oracle的bug.或是别的什么原因。
          这台机器上只装有数据库,和一些杀毒防火墙之类的软件。
 
          之前我对这张表的其他字段也曾经做过这样的操作。成功了。唯一的不同就是maintitle的长度要比成功的那个字段要长。maintitle(varchar2(600));成功字段(varchar2(200));
          望高手指点。
       
         

解决方案 »

  1.   

    就是内存分配不够了。Google了一下,得到两种答案。1。
    不使用原来的lexer,换了一种。有人可以正确做完。
    2。
    修改了内存方面的参数,都是缩小,不是放大。
    修改了下面的参数:
    alter session set workarea_size_policy=manual;
    alter session set sort_area_size=500m;
    alter session set sort_area_retained_size=500m; 不知道对你有没有用。你在trace里面看看,更加具体的错误信息是什么呢?
      

  2.   

    看到了一些关于SHARED_POOL_RESERVED_SIZE参数的。他用来确保共有池的大小,默认是SHARED_POOL_SIZE的5%,可以设置的范围是 5000 <= n <= SHARED_POOL_SIZE * 1.5。把它放大到20%看看呢?