Oracle Text -- ctxsys.context

Hi
We are creating a oracle text index on one table . The table contains 200 million records
The script is failing in the middle by giving the error unable to extend temp segement by 128 in temp table space.
Can you please provide any suggestions of how this issue can be rectified.
Also Can we use nosort option with text indexes.
Regards
Ramakrishna

Are you using automatic PGA work area sizing?
You could switch to manual for this session and override sort_area_size.
Also, memory parameters of index can be changed.
See:
http://download.oracle.com/docs/cd/E11882_01/text.112/e16594/aoptim.htm#i1006756

Similar Messages

  • Oracle Text, ctxsys.context problem with number column

    Hi,
    DB 11.2.0.3
    Is there any solution to create ctxsys.context index on number column ? Or I have to create other index type ?
    When I try do that (create ctxsys.context index), I get
    09:01:18  ORA-29855: wystąpił błąd przy wykonywaniu podprogramu ODCIINDEXCREATE  (An error has occurred in the performance of the subprogram)
    09:01:18  ORA-20000: Oracle Text - błąd: (- error:)
    09:01:18  DRG-10509: niepoprawna kolumna tekstowa: ITEM_TYPE (invalid text column:)
    09:01:18  ORA-06512: przy "CTXSYS.DRUE", linia 160
    09:01:18  ORA-06512: przy "CTXSYS.TEXTINDEXMETHODS", linia 366Btw, is there possible to search like "*LIKE %123%*" clause any of index (in contains) ?
    Edited by: Ndejo on 2012-11-21 00:53

    The multi_column_datastore says that the text to be indexed should be fetched from the supplied COLUMNS list rather than from the actual column the index is created on.
    So in this case we're fetching the contents of "theNumber" column, converting it to text, and indexing it.
    You don't necessarily need a dummy column, if "a_title" is a varchar column you could create the index on that instead.
    For example:
    SQL> create table mytab( a_id number, a_code number, a_title varchar2(80), a_subtitle varchar2(80), a_info clob );
    Table created.
    SQL> insert into mytab values ( 12, 9812376, 'foo is the title',
      2  'foobar is the subtitle', 'the info column will not be indexed' );
    1 row created.
    SQL> exec ctx_ddl.drop_preference( 'myds' )
    PL/SQL procedure successfully completed.
    SQL> exec ctx_ddl.create_preference( 'myds', 'MULTI_COLUMN_DATASTORE' )
    PL/SQL procedure successfully completed.
    SQL> exec ctx_ddl.set_attribute( 'myds', 'COLUMNS', 'a_code, a_title, a_subtitle' )
    PL/SQL procedure successfully completed.
    SQL> create index myindex on mytab (a_title) indextype is ctxsys.context
      2  parameters ('datastore myds');
    Index created.
    SQL> select a_id from mytab where contains (a_title, '%123%') > 0;
          A_ID
            12
    SQL> select a_id from mytab where contains (a_title, 'foo') > 0;
          A_ID
            12If you want to be able to search within a particular column, then add "section group CTXSYS.AUTO_SECTION_GROUP" to the parameters clause, and you can then do:
    SQL> select a_id from mytab where contains (a_title, 'foobar WITHIN a_subtitle') > 0;
          A_ID
            12

  • Oracle Text - CTX Context Index Soundex Problem

    Hi,
    I'm running into a problem with Oracle Text when searching using the ! (soundex) option. I've created a simple test example to highlight the issue.
    Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit
    Windows 2008 Server 64-bit
    create table test_tab (test_col  varchar2(200));
    insert all
      into test_tab (test_col) values ('ab-tönes')
      into test_tab (test_col) values ('ab-tones')
      into test_tab (test_col) values ('abtones')
      into test_tab (test_col) values ('ab tones')
      into test_tab (test_col) values ('ab-tanes')
      select * from dual
    select * from test_tab
    begin
          ctx_ddl.create_preference ('test_lex1', 'basic_lexer');
          ctx_ddl.set_attribute ('test_lex1', 'whitespace', '/\|-_+&''');
          ctx_ddl.set_attribute('test_lex1','base_letter','YES');
          -- ctx_ddl.set_attribute('test_lex1','skipjoins','-');
    end;
    create index test_idx on test_tab (test_col)
      indextype is ctxsys.context
        parameters
          ('lexer        test_lex1'     
    select token_text from dr$test_idx$i;
    TOKEN_TEXT
    AB
    ABTONES
    TANES
    TONES
    select * from test_tab where contains (test_col, '!ab tones') > 0;
    TEST_COL
    ab-tönes
    ab-tones
    ab tones
    select * from test_tab where soundex(test_col) = soundex('ab tones');
    TEST_COL
    ab-tönes
    ab-tones
    abtones
    ab tones
    ab-tanes
    So my question is, can anyone suggest an approach whereby I can get the Oracle Text Context index (or CTXCAT index if it's more appropriate) to return all 5 rows like the simple Soundex is doing?
    I can't really use soundex as this search query will form part of a search screen for a multi-language application. Soundex is limited to English sounding words, so I need the solution to be able to compare strings that may not "sound" English.
    It must be an attribute of the BASIC_LEXER, and I've tried skipjoins, start/end-joins, stop lists, but I just cannot get the Soundex feature of Oracle Text to function like the SOUNDEX() function!
    Looking at how the tokens are stored dr$test_idx$i I need Oracle Text to almost concat 'AB' and 'TONES' to search as a single string.
    Any help greatly appreciated.
    Thanks,

    I am not getting the same problem that you are getting with the umlat, but I don't see what is different.  Please post the result of:
    select ctx_report.create_index_script ('test_idx') from dual;
    Here are the results on my system.  Perhaps you can spot the difference.  I added an empty_stoplist, so that it won't print out a long list of stopwords.
    SCOTT@orcl12c> create table test_tab (test_col    varchar2(200))
      2  /
    Table created.
    SCOTT@orcl12c> insert all
      2    into test_tab (test_col) values ('ab-tönes')
      3    into test_tab (test_col) values ('ab-tones')
      4    into test_tab (test_col) values ('abtones')
      5    into test_tab (test_col) values ('ab tones')
      6    into test_tab (test_col) values ('ab-tanes')
      7  select * from dual
      8  /
    5 rows created.
    SCOTT@orcl12c> select * from test_tab
      2  /
    TEST_COL
    ab-tönes
    ab-tones
    abtones
    ab tones
    ab-tanes
    5 rows selected.
    SCOTT@orcl12c> begin
      2    ctx_ddl.create_preference ('test_lex1', 'basic_lexer');
      3    ctx_ddl.set_attribute('test_lex1','base_letter','YES');
      4  end;
      5  /
    PL/SQL procedure successfully completed.
    SCOTT@orcl12c> create or replace procedure test_proc
      2    (p_rowid in          rowid,
      3      p_clob    in out nocopy clob)
      4  as
      5  begin
      6    select replace (translate (test_col, '/\|-_+&''', '      '), ' ', '')
      7    into   p_clob
      8    from   test_tab
      9    where  rowid = p_rowid;
    10  end test_proc;
    11  /
    Procedure created.
    SCOTT@orcl12c> show errors
    No errors.
    SCOTT@orcl12c> begin
      2    ctx_ddl.create_preference ('test_ds', 'user_datastore');
      3    ctx_ddl.set_attribute ('test_ds', 'procedure', 'test_proc');
      4  end;
      5  /
    PL/SQL procedure successfully completed.
    SCOTT@orcl12c> create index test_idx on test_tab (test_col)
      2    indextype is ctxsys.context
      3    parameters
      4       ('lexer    test_lex1
      5         datastore    test_ds
      6         stoplist    ctxsys.empty_stoplist')
      7  /
    Index created.
    SCOTT@orcl12c> select token_text from dr$test_idx$i
      2  /
    TOKEN_TEXT
    ABTANES
    ABTONES
    2 rows selected.
    SCOTT@orcl12c> variable search_string varchar2(100)
    SCOTT@orcl12c> exec :search_string := 'ab tones'
    PL/SQL procedure successfully completed.
    SCOTT@orcl12c> select * from test_tab
      2  where  contains
      3            (test_col,
      4             '!' || replace (:search_string, ' ', ' !') ||
      5             ' or !' || replace (:search_string, ' ', '')) > 0
      6  /
    TEST_COL
    ab-tönes
    ab-tones
    abtones
    ab tones
    ab-tanes
    5 rows selected.
    SCOTT@orcl12c> exec :search_string := 'abtones'
    PL/SQL procedure successfully completed.
    SCOTT@orcl12c> /
    TEST_COL
    ab-tönes
    ab-tones
    abtones
    ab tones
    ab-tanes
    5 rows selected.
    SCOTT@orcl12c> exec :search_string := 'ab tönes'
    PL/SQL procedure successfully completed.
    SCOTT@orcl12c> /
    TEST_COL
    ab-tönes
    ab-tones
    abtones
    ab tones
    ab-tanes
    5 rows selected.
    SCOTT@orcl12c> select ctx_report.create_index_script ('test_idx') from dual
      2  /
    CTX_REPORT.CREATE_INDEX_SCRIPT('TEST_IDX')
    begin
      ctx_ddl.create_preference('"TEST_IDX_DST"','USER_DATASTORE');
      ctx_ddl.set_attribute('"TEST_IDX_DST"','PROCEDURE','"SCOTT"."TEST_PROC"');
    end;
    begin
      ctx_ddl.create_preference('"TEST_IDX_FIL"','NULL_FILTER');
    end;
    begin
      ctx_ddl.create_section_group('"TEST_IDX_SGP"','NULL_SECTION_GROUP');
    end;
    begin
      ctx_ddl.create_preference('"TEST_IDX_LEX"','BASIC_LEXER');
      ctx_ddl.set_attribute('"TEST_IDX_LEX"','BASE_LETTER','YES');
    end;
    begin
      ctx_ddl.create_preference('"TEST_IDX_WDL"','BASIC_WORDLIST');
      ctx_ddl.set_attribute('"TEST_IDX_WDL"','STEMMER','ENGLISH');
      ctx_ddl.set_attribute('"TEST_IDX_WDL"','FUZZY_MATCH','GENERIC');
    end;
    begin
      ctx_ddl.create_stoplist('"TEST_IDX_SPL"','BASIC_STOPLIST');
    end;
    begin
      ctx_ddl.create_preference('"TEST_IDX_STO"','BASIC_STORAGE');
      ctx_ddl.set_attribute('"TEST_IDX_STO"','R_TABLE_CLAUSE','lob (data) store as (
    cache)');
      ctx_ddl.set_attribute('"TEST_IDX_STO"','I_INDEX_CLAUSE','compress 2');
    end;
    begin
      ctx_output.start_log('TEST_IDX_LOG');
    end;
    create index "SCOTT"."TEST_IDX"
      on "SCOTT"."TEST_TAB"
          ("TEST_COL")
      indextype is ctxsys.context
      parameters('
        datastore       "TEST_IDX_DST"
        filter          "TEST_IDX_FIL"
        section group   "TEST_IDX_SGP"
        lexer           "TEST_IDX_LEX"
        wordlist        "TEST_IDX_WDL"
        stoplist        "TEST_IDX_SPL"
        storage         "TEST_IDX_STO"
    begin
      ctx_output.end_log;
    end;
    1 row selected.

  • Oracle Text search returning no results

    Hi,
    I have created an oracle text (ctxsys.context) on a BLOB column which has various documents of .doc,.docx,.pdf, types.
    CREATE INDEX IND_RESUME_DETAILS ON RESUME_DETAILS (RESUME)
       INDEXTYPE IS CTXSYS.CONTEXT
    PARAMETERS ('datastore ctxsys.default_datastore filter ctxsys.inso_filter sync (on commit)')
    However, the query using 'Contains' does not return any search results.
    select employee_number,Score(1) from resume_details where CONTAINS(RESUME,'JAVA',1)>0 order by score(1) desc
    On checking the  'ctx_user_index_errors' view , it has an entry for every row in the table. However, it does not show any error in the err_text column
    ERR_INDEX_NAME
    ERR_TIMESTAMP
    ERR_TEXTKEY
    ERR_TEXT
    IND_RESUME_DETAILS
    5/8/2014 18:27
    AAAl0GAAGAAEFoWAAC
    IND_RESUME_DETAILS
    5/8/2014 18:27
    AAAl0GAAGAAEFoWAAD
    IND_RESUME_DETAILS
    5/8/2014 18:27
    AAAl0GAAGAAEFoWAAE
    Even the index status shows 'VALID'.
    I tried dropping and recreating indexes, dropping and recreating the table.. However, it's not working at all.
    What's surprising is,it used to work earlier without any problems.
    I also have another context index on  another column on the same  table which is a varchar2 column. The search on that column works absolutely fine.
    The database version is
    Oracle Database 11g Enterprise Edition Release 11.2.0.3.0
    Request someone in helping  me root cause this issue. Any help is appreciated.
    Thanks

    Hi Barbara,
    Still the same issue.
    Its putting an entry into 'ctx_user_index_errors' but with nothing in the err_text column..Hence, difficult to track what or where the problem lies.
    And moreover, the same index was working earlier. Just stopped working all of a sudden.

  • Oracle Text, multi_column_datastore describe index

    Referring to Re: Oracle Text, ctxsys.context problem with number column
    In TOAD or SQL Navigator you can click on some object (like table, index) and click on tab "script" where is generated the code to create it.
    Assuming that I am a person who sees the index for the first time where/how I can find multi_columns/parameters with which the index was created ?
    For example:
    exec ctx_ddl.drop_preference( 'myds' );
    exec ctx_ddl.create_preference( 'myds', 'MULTI_COLUMN_DATASTORE' );
    exec ctx_ddl.set_attribute( 'myds', 'COLUMNS', 'item_barcode, item_title, item_subtitle' );
    CREATE INDEX i_index_test
       ON item (item_title)
       INDEXTYPE IS ctxsys.context
       PARAMETERS ( 'datastore myds' );And script says:
    CREATE INDEX PLSQL.I_INDEX_TEST ON PLSQL.ITEM
    (ITEM_TITLE)
    INDEXTYPE IS CTXSYS.CONTEXT
    PARAMETERS('datastore myds')
    NOPARALLEL;
    Where I can find datastore "myds" ?

    You can use ctx_report to get all the information about an index.
    I use it from SQL*Plus like this:
    set pagesize 0
    set heading off
    set trimspool on
    set long 500000
    spool index.sql
    select ctx_report.create_index_script('MyIndexName') from dual;
    spool offThe only thing this won't give you is the source for any procedures used in the user_datastore. You can get that from user_sources.

  • Suggestion: Oracle text CONTEXT index on one or more columns ?

    Hi,
    I'm implementing Oracle text using CONTEXT ..... and would like to ask you for performance suggestion ...
    I have a table of Articles .... with columns .. TITLE, SUBTITLE , BODY ...
    Now is it better from performance point of view to move all three columns into one dummy column ... with name like FULLTEXT ... and put index on this single column,
    and then use CONTAINS(FULLTEXT,'...')>0
    Or is it almost the same for oracle if i put indexes on all three columns and then call:
    CONTAINS(TITLE,'...')>0 OR CONTAINS(SUBTITLE,'...')>0 OR CONTAINS(BODY,'...')>0
    I actually don't care if the result is a match in TITLE OR SUBTITLE OR BODY ....
    So if i move into some FULLTEXT column, then i have duplicate data in a article row ... but if i create indexes for each column, than oracle has 2x more to index,optimize and search ... am I wright ?
    Table has 1.8mil records ...
    Thank you.
    Kris

    mackrispi wrote:
    Now is it better from performance point of view to move all three columns into one dummy column ... with name like FULLTEXT ... and put index on this single column,
    and then use CONTAINS(FULLTEXT,'...')>0What version of Oracle are you on? If 11 then you could use a virtual column to do this, otherwise you'd have to write code to maintain the column which can get messy.
    mackrispi wrote:
    Or is it almost the same for oracle if i put indexes on all three columns and then call:
    CONTAINS(TITLE,'...')>0 OR CONTAINS(SUBTITLE,'...')>0 OR CONTAINS(BODY,'...')>0Benchmark it and find out :)
    Another option would be something like this.
    http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:9455353124561
    Were i you, i would try out those 3 approaches and see which meet your performance requirements and weigh that with the ease of implementation and administration.

  • ORACLE TEXT 10G의 수동 설치와, 설치 해제 방법

    제품 : ORACLE SERVER
    작성날짜 : 2006-03-17
    ORACLE TEXT 10G의 수동 설치와, 설치 해제 방법
    ===================================
    PURPOSE
    이 문서는, Oracle Text 10gR1의 수동 설치와 설치 내용의 확인, 설치 해제 방법을 기술하고 있다.
    이 정보는, Oracle 10g Release 1 (10.1.0.2)의 Text를 구성하는 데이터베이스 관리자와, 기술 지원 담당자에게
    유용한 정보가 될 것이다.
    Explanation
    * 주의 사항
    오라클 데이터베이스를 Database Configuration Assistant (DBCA)를 사용하여 생성하였다면, Text는
    기본적으로 설치되며, 별도로 아래 기술된 절차에 따라 설치를 진행할 필요가 없다.
    Oracle Text는 모든 데이터베이스 에디션에 (Oracle Database Standard Edition One,
    Oracle Database Standard Edition (SE), Oracle Database Enterprise Edition (EE),
    Oracle Database Personal Edition ) 추가 라이센스 비용 없이 사용할 수 있다.
    Oracle Database Enterprise Edition (EE)의 경우, Oracle Text를 설치하기전에 Oracle Data Mining (ODM)
    기능을 사용할 수 있게 하는 것이 좋다. 이와 같이 하면, SVM classifier 와 KMEANS clustering 기능을 사용
    할 수 있다. RULE classifier 나 TEXTK clustering과 같은 다른 기능은 ODM이 설치되지 않는 상태에서도
    실행 가능하다.
    * 설치 절차
    데이터베이스를 수동으로 생성하였거나, 데이터베이스 생성 후 Text를 나중에 별도로 설치하기 위해서는
    다음과 같은 절차를 따른다.
    참고: SQL*Plus에서 $ORACLE_HOME 대신에 '?'를 사용하였다.
    1. SQL*Plus에 SYSDBA로 연결 한 수, 다음과 같이 스크립트를 호출하면, CTXSYS 스키마에 Text dictionary가
    생성된다.
    SQL> connect SYS/password as SYSDBA
    SQL> spool text_install.txt
    SQL>@?/ctx/admin/catctx.sql CTXSYS SYSAUX TEMP LOCK
    위 명령에서:
    CTXSYS - ctxsys 사용자의 패스워드
    SYSAUX - ctxsys 사용자의 default tablespace명
    TEMP - ctxsys 사용자의 temporary tablespace명
    LOCK|NOLOCK - ctxsys 사용자 계정을 잠글 것인지, 잠금 해제 할 것인지 여부
    2. 위 작업이 끝나면 언어별로 적절한 default preference를 생성한다.
    Oracle text가 지원하는 언어별 default preference는 /ctx/admin/defaults 디렉토리에 있다.
    예를 들면, English(US), Danish(DK), Dutch(NL), Finnish(SF), French(F), German(D), Italian(IT),
    Portuguese(PT), Spanish(E), Swedish(S) 등이 있다.
    이들 스크립트는 drdefXX.sql과 같은 파일 명을 갖는데, 여기서 XX는 사용하고자 하는 국제
    코드이다. 예를 들어 US default preference를 수동으로 설치하기 위해서는 sqlplus에 CTXSYS
    계정으로 로그인 한 후, 'drdefus.sql'을 다음과 같이 실행시킨다.
    예를 들어 한국의 경우엔 KR default preference를 수동으로 설치하기 위해서는 sqlplus에 CTXSYS
    계정으로 로그인 한 후, 'drdefkr.sql'을 다음과 같이 실행시킨다.
    SQL> connect CTXSYS/password
    SQL>@?/ctx/admin/defaults/drdefko.sql
    SQL> spool off
    *** 주의 ***
    만약 Text를 설치하기 전에 Oracle Data Mining (ODM)을 설치하였다면, text_install.txt 파일에서
    public synonym과 관련된 ORA-955 에러가 남겨진 것을 확인 할 수 있다. 예를 들어 dm_svm_build 와
    관련된 에러가 발생하게 되는데 이 에러는 무시하면 된다. CTXSYS 스키마에 API를 휴내내는 더미
    패키지를 생성하는데, 설치 과정에서 public synonym을 생성하는 것을 시도해 보기 때문이다.
    ODM이 설치되어 있는 상태에서는, public synonym 생성은 실패하게 되고, public synonym이
    ODM의 객체를 가리키는 상태가 되므로, 정상적인 동작이 된다.
    3. Text 10gR1 (10.1.0.x) 정상 설치 여부에 대한 확인
    a. 모든 Text 객체가 CTXSYS 스키마에 정상적으로 설치 되었는지 여부를 확인한다.
    b. CTXSYS 스키마에 속한 객체중 invalid 상태인 것들이 없는 것이 있는지 확인한다.
    정상적으로 설치된 상태에서는 결과 값으로 "no rows selected"가 나와야 한다.
    만약 invalid 상태의 객체가 있다면 수동으로 이들 객체를 컴파일 해 주어야 한다.
    ------------------- cut here ------------------------------
    connect SYS/password as SYSDBA
    set pages 1000
    col object_name format a40
    col object_type format a20
    col comp_name format a30
    column library_name format a8
    column file_spec format a60 wrap
    spool text_install_verification.log
    -- check on setup
    select comp_name, status, substr(version,1,10) as version
    from dba_registry
    where comp_id = 'CONTEXT';
    select * from ctxsys.ctx_version;
    select substr(ctxsys.dri_version,1,10) VER_CODE from dual;
    select count(*)
    from dba_objects where owner='CTXSYS';
    -- Get a summary count
    select object_type, count(*)
    from dba_objects where owner='CTXSYS'
    group by object_type;
    -- Any invalid objects
    select object_name, object_type, status
    from dba_objects
    where owner='CTXSYS'
    and status != 'VALID'
    order by object_name;
    spool off
    ------------------- cut here ------------------------------
    정상적으로 설치가 되었다면 다음과 같은 결과가 나와야 한다:
    SQL> select comp_name, status, substr(version,1,10) as version
    from dba_registry
    where comp_id = 'CONTEXT';
    COMP_NAME STATUS VERSION
    Oracle Text VALID 10.1.0.2.0
    SQL> select * from ctxsys.ctx_version;
    VER_DICT VER_CODE
    10.1.0.2.0 10.1.0.2.0
    SQL> select substr(ctxsys.dri_version,1,10) VER_CODE from dual;
    VER_CODE
    10.1.0.2.0
    SQL> select count(*)
    from dba_objects where owner='CTXSYS';
    COUNT(*)
    338
    SQL> select object_type, count(*)
    from dba_objects where owner='CTXSYS'
    group by object_type;
    OBJECT_TYPE COUNT(*)
    FUNCTION 5
    INDEX 46
    INDEXTYPE 4
    LIBRARY 1
    LOB 1
    OPERATOR 6
    PACKAGE 71
    PACKAGE BODY 58
    PROCEDURE 3
    SEQUENCE 3
    TABLE 37
    TYPE 42
    TYPE BODY 7
    VIEW 54
    14 rows selected.
    SQL> select object_name, object_type, status
    from dba_objects
    where owner='CTXSYS'
    and status != 'VALID'
    order by object_name;
    no rows selected
    SQL>
    4. 수동으로 설치 해제를 하는 절차
    *** 주의 ***
    Oracle Text를 설치 해제 하기 전에, CTXSYS 이외의 계정에서 생성한 모든 Text 인덱스를 drop 시키는 것이
    좋다.
    CTXSYS 스키마의 Text dictionary는 SQL*Plus에 SYSDBA로 연결하여 다음과 같이 스크립트를 실행 시킴으로써
    제거된다.
    SQL> connect SYS/password as SYSDBA
    SQL> spool spool textdeinstall.log
    SQL>@?/ctx/admin/catnoctx.sql
    SQL> spool off
    Review the output file textdeinstall.log for errors.
    Deinstallation of Oracle Text 10.1.0.x is complete.
    Example
    Reference Documents
    Oracle Text Reference 10g Release 1 (10.1) Part Number B10730-02
    Note 280713.1 Manual installation, deinstallation of Oracle Text 10gR1

  • Oracle Text, create index (indextype is ctxsys.context)

    Dear sirs,
    I am a new user of Oracle Text (Oracle 11g release 11.2) and I am unable to create an index of type ctxsys.context). Any suggestions?:
    code:
    drop table mytable;
    drop index myindex force;
    create table mytable(id number primary key, docs clob);
    insert into mytable values(111555,'this text will be indexed');
    insert into mytable values(111556,'this is a default datastore example');
    commit;
    create index myindex on mytable(docs)
    indextype is ctxsys.context
    parameters ('DATASTORE CTXSYS.DEFAULT_DATASTORE');
    +++++++
    error messages:
    create index myindex on mytable(docs)
    ERROR at line 1:
    ORA-29855: error occurred in the execution of ODCIINDEXCREATE routine
    ORA-20000: Oracle Text error:
    ORA-06508: PL/SQL: could not find program unit being called
    ORA-06512: at "CTXSYS.DRUE", line 160
    ORA-06512: at "CTXSYS.TEXTINDEXMETHODS", line 366

    Please check for invalid objects. Log on as sys or system and run:
    select owner, object_name, object_type from all_objects where status='INVALID';
    Post the results here and we'll advise the next step.
    If any objects owned by CTXSYS are invalid you may need to recompile the CTXSYS schema.

  • ERROR at line 1: ORA-29855: error occurred in the execution of ODCIINDEXCREATE routine ORA-20000: Oracle Text error: DRG-10700: preference does not exist: global_lexer ORA-06512: at "CTXSYS.DRUE", line 160 ORA-06512: at "CTXSYS.TEXTINDEXMETHODS", line 366

    database version 11.2.0.4
    rac two node
    CREATE INDEX MAXIMO.ACTCI_NDX3 ON MAXIMO.ACTCI
    (DESCRIPTION)
    INDEXTYPE IS CTXSYS.CONTEXT
    PARAMETERS('lexer global_lexer language column LANGCODE')
    ERROR at line 1:
    ORA-29855: error occurred in the execution of ODCIINDEXCREATE routine
    ORA-20000: Oracle Text error:
    DRG-10700: preference does not exist: global_lexer
    ORA-06512: at "CTXSYS.DRUE", line 160
    ORA-06512: at "CTXSYS.TEXTINDEXMETHODS", line 366

    Like the error message says, you don't have a global_lexer.  So, you need to create a global_lexer and that lexer must have at least a default sub_lexer, then you can use that global_lexer in your index parameters.  Please see the demonstration below, including reproduction of the error and solution.
    SCOTT@orcl12c> -- reproduction of problem:
    SCOTT@orcl12c> CREATE TABLE actci
      2    (description  VARCHAR2(60),
      3      langcode     VARCHAR2(30))
      4  /
    Table created.
    SCOTT@orcl12c> CREATE INDEX ACTCI_NDX3 ON ACTCI (DESCRIPTION)
      2  INDEXTYPE IS CTXSYS.CONTEXT
      3  PARAMETERS('lexer global_lexer language column LANGCODE')
      4  /
    CREATE INDEX ACTCI_NDX3 ON ACTCI (DESCRIPTION)
    ERROR at line 1:
    ORA-29855: error occurred in the execution of ODCIINDEXCREATE routine
    ORA-20000: Oracle Text error:
    DRG-10700: preference does not exist: global_lexer
    ORA-06512: at "CTXSYS.DRUE", line 160
    ORA-06512: at "CTXSYS.TEXTINDEXMETHODS", line 366
    SCOTT@orcl12c> -- solution:
    SCOTT@orcl12c> DROP INDEX actci_ndx3
      2  /
    Index dropped.
    SCOTT@orcl12c> BEGIN
      2    CTX_DDL.CREATE_PREFERENCE ('global_lexer', 'multi_lexer');
      3    CTX_DDL.CREATE_PREFERENCE ('english_lexer', 'basic_lexer');
      4    CTX_DDL.ADD_SUB_LEXER ('global_lexer', 'default', 'english_lexer');
      5  END;
      6  /
    PL/SQL procedure successfully completed.
    SCOTT@orcl12c> CREATE INDEX ACTCI_NDX3 ON ACTCI (DESCRIPTION)
      2  INDEXTYPE IS CTXSYS.CONTEXT
      3  PARAMETERS('lexer global_lexer language column LANGCODE')
      4  /
    Index created.

  • CTXSYS.Context in Oracle Multitenant Database (Cloud) - is this supported?

    Hello guys,
    I am new to the world of apex which makes the administration console for the oracle database cloud a trivial ground for me.
    I am trying to setup context indextype which i require for some applications on the jcs front end. however, i am having no luck setting up this index types.
    I havent been able to find any resources regarding the CTXSYS package within the oracle database cloud documentation so I am hoping someone out here may have a few tips or tricks for me.
    How can I grant execute on CTXSYS.CTX_DDL object to my database users?
    thanks.

    There's no oracle text support for database cloud services shamefully.
    I cant help but wonder why oracle wont support features of its own product, not something to brag about "Oracle!!!!"

  • Oracle text performance with context search indexes

    Search performance using context index.
    We are intending to move our search engine to a new one based on Oracle Text, but we are meeting some
    bad performance issues when using search.
    Our application allows the user to search stored documents by name, object identifier and annotations(formerly set on objects).
    For example, suppose I want to find a document named ImportSax2.c: according to user set parameters, our search engine format the following
    search queries :
    1) If the user explicitely ask for a search by document name, the query is the following one =>
         select objid FROM ADSOBJ WHERE CONTAINS( OBJFIELDURL , 'ImportSax2.c WITHIN objname' , 1 ) > 0;
    2) If the user don't specify any extra parameters, the query is the following one =>
         select objid FROM ADSOBJ WHERE CONTAINS( OBJFIELDURL , 'ImportSax2.c' , 1 ) > 0;
    Oracle text only need around 7 seconds to answer the second query, whereas it need around 50 seconds to give an answer for the first query.
    Here is a part of the sql script used for creating the Oracle Text index on the column OBJFIELDURL
    (this column stores a path to an xml file containing properties that have to be indexed for each object) :
    begin
    Ctx_Ddl.Create_Preference('wildcard_pref', 'BASIC_WORDLIST');
    ctx_ddl.set_attribute('wildcard_pref', 'wildcard_maxterms', 200) ;
    ctx_ddl.set_attribute('wildcard_pref','prefix_min_length',3);
    ctx_ddl.set_attribute('wildcard_pref','prefix_max_length',6);
    ctx_ddl.set_attribute('wildcard_pref','STEMMER','AUTO');
    ctx_ddl.set_attribute('wildcard_pref','fuzzy_match','AUTO');
    ctx_ddl.set_attribute('wildcard_pref','prefix_index','TRUE');
    ctx_ddl.set_attribute('wildcard_pref','substring_index','TRUE');
    end;
    begin
    ctx_ddl.create_preference('doc_lexer_perigee', 'BASIC_LEXER');
    ctx_ddl.set_attribute('doc_lexer_perigee', 'printjoins', '_-');
    ctx_ddl.set_attribute('doc_lexer_perigee', 'BASE_LETTER', 'YES');
    ctx_ddl.set_attribute('doc_lexer_perigee','index_themes','yes');
    ctx_ddl.create_preference('english_lexer','basic_lexer');
    ctx_ddl.set_attribute('english_lexer','index_themes','yes');
    ctx_ddl.set_attribute('english_lexer','theme_language','english');
    ctx_ddl.set_attribute('english_lexer', 'printjoins', '_-');
    ctx_ddl.set_attribute('english_lexer', 'BASE_LETTER', 'YES');
    ctx_ddl.create_preference('german_lexer','basic_lexer');
    ctx_ddl.set_attribute('german_lexer','composite','german');
    ctx_ddl.set_attribute('german_lexer','alternate_spelling','GERMAN');
    ctx_ddl.set_attribute('german_lexer','printjoins', '_-');
    ctx_ddl.set_attribute('german_lexer', 'BASE_LETTER', 'YES');
    ctx_ddl.set_attribute('german_lexer','NEW_GERMAN_SPELLING','YES');
    ctx_ddl.set_attribute('german_lexer','OVERRIDE_BASE_LETTER','TRUE');
    ctx_ddl.create_preference('japanese_lexer','JAPANESE_LEXER');
    ctx_ddl.create_preference('global_lexer', 'multi_lexer');
    ctx_ddl.add_sub_lexer('global_lexer','default','doc_lexer_perigee');
    ctx_ddl.add_sub_lexer('global_lexer','german','german_lexer','ger');
    ctx_ddl.add_sub_lexer('global_lexer','japanese','japanese_lexer','jpn');
    ctx_ddl.add_sub_lexer('global_lexer','english','english_lexer','en');
    end;
    begin
         ctx_ddl.create_section_group('axmlgroup', 'AUTO_SECTION_GROUP');
    end;
    drop index ADSOBJ_XOBJFIELDURL force;
    create index ADSOBJ_XOBJFIELDURL on ADSOBJ(OBJFIELDURL) indextype is ctxsys.context
    parameters
    ('datastore ctxsys.file_datastore
    filter ctxsys.inso_filter
    sync (on commit)
    lexer global_lexer
    language column OBJFIELDURLLANG
    charset column OBJFIELDURLCHARSET
    format column OBJFIELDURLFORMAT
    section group axmlgroup
    Wordlist wildcard_pref
    Oracle created a table named DR$ADSOBJ_XOBJFIELDURL$I which now contains around 25 millions records.
    ADSOBJ is the table contaings information for our documents,OBJFIELDURL is the field that contains the path to the xml file containing
    data to index. That file looks like this :
    <?xml version="1.0" encoding="UTF-8" ?>
    <fields>
    <OBJNAME><![CDATA[NomLnk_177527o.jpgp]]></OBJNAME>
    <OBJREM><![CDATA[Z_CARACT_141]]></OBJREM>
    <OBJID>295926o.jpgp</OBJID>
    </fields>
    Can someone tell me how I can make that kind of request
    "select objid FROM ADSOBJ WHERE CONTAINS( OBJFIELDURL , 'ImportSax2.c WITHIN objname' , 1 ) > 0;"
    run faster ?

    Below are the execution plan for both the 2 requests :
    select objid FROM ADSOBJ WHERE CONTAINS( OBJFIELDURL , 'ImportSax2.c WITHIN objname' , 1 ) > 0
    PLAN_TABLE_OUTPUT
    |     Id     | Operation                              |Name                         |Rows     |Bytes     |Cost (%CPU)|
    |     0     | SELECT STATEMENT                    |                              |1272     |119K     |     4     (0)     |
    |     1      | TABLE ACCESS BY INDEX ROWID     |ADSOBJ      |1272     |119K     |     4     (0)     |
    |     2      |     DOMAIN INDEX                    |ADSOBJ_XOBJFIELDURL     |          |          |     4     (0)     |
    Note
    - 'PLAN_TABLE' is old version
    Executed in 2 seconds
    select objid FROM ADSOBJ WHERE CONTAINS( OBJFIELDURL , 'ImportSax2.c' , 1 ) > 0
    PLAN_TABLE_OUTPUT
    |     Id     |Operation                              |Name                         |Rows     |Bytes     |Cost (%CPU)|
    |     0     | SELECT STATEMENT                    |                              |1272     |119K     |     4     (0)     |
    |     1     | TABLE ACCESS BY INDEX ROWID     |ADSOBJ                         |1272     |119K     |     4     (0)     |
    |     2     | DOMAIN INDEX                    |ADSOBJ_XOBJFIELDURL     |          |          |     4     (0)     |
    Sorry for the result formatting, I can't get it "easily" readable :(

  • Oracle Text (schema CTXSYS): additional licence costs?

    Hi,
    it's my understanding that through installing and using Oracle-Text (schema CTXSYS) no additional licence costs arise (for Oracle Enterprise Edition).
    I'm asking this question in this forum just to be sure that my understanding is not wrong...
    Many thanks
    JH

    As far as I know this is correct.
    Oracle Text is neither listed as an Entreprise Edition option in US price list:
    http://www.oracle.com/us/corporate/pricing/technology-price-list-070617.pdf
    nor in Licensing Information:
    http://download.oracle.com/docs/cd/E11882_01/license.112/e10594/toc.htm .
    Edited by: P. Forstmann on 9 août 2011 10:25

  • Oracle Text Index Error - DRG-10700: preference does not exist: CTXSYS.DEFA

    Hi we are having a Oracle 11g db.And we have installed CTX SYS package and provided the grants to the required schema.
    But while creating the oracle text index, following error is thrown:
    ORA-29855: error occurred in the execution of ODCIINDEXCREATE routine
    ORA-20000: Oracle Text error:
    DRG-10700: preference does not exist: CTXSYS.DEFAULT_LEXER
    ORA-06512: at "CTXSYS.DRUE", line 160
    ORA-06512: at "CTXSYS.TEXTINDEXMETHODS", line 365
    Following grnats are given :
    GRANT EXECUTE ON CTXSYS.CTX_DDL TO <schema_name>;
    GRANT APPOWN TO <schema_name>;
    GRANT CTXAPP TO <schema_name>;
    I have verifyed the ctxsys.CTX_PREFERENCES view which is having an entry as :
    SELECT PRE_OWNER, PRE_NAME
    FROM CTXSYS.CTX_PREFERENCES
    WHERE PRE_NAME = 'DEFAULT_LEXER';
    The Result is :
    PRE_OWNER     PRE_NAME
    SYS     DEFAULT_LEXER
    Can you please assist if there is a way to update the permission on this DEFAULT_LEXER preference to set the PRE_OWNER as CTXSYS ?
    Thanks

    That's odd. If I run the same query I see:
    SQL> SELECT PRE_OWNER, PRE_NAME
      2  FROM CTXSYS.CTX_PREFERENCES
      3  WHERE PRE_NAME = 'DEFAULT_LEXER';
    PRE_OWNER                      PRE_NAME
    CTXSYS                         DEFAULT_LEXERAre all your defaults like thsi? What do you see if you run
    select pre_owner, pre_name from ctxsys.ctx_preferences where pre_name like 'DEFAULT%';
    It would be easy enough to update the underlying table DR$PREFERENCES to fix the owner, but who knows what else might be wrong.
    Has this database been updated from a 9i installation by any chance?

  • ORACLE TEXT  Context index so big, why ?

    Hi,
    One year ago, I've created a context index, for a table that had 2 million rows , and the context index was around 2.8 Mil rows ....
    Today we have 2.9mil rows but the Context index has 95 Mil rows ??
    Last weekend I did a FULL optimize index and it took 28hours and it was still not finished .... so this weekend I droped the index and re-created
    it .... it took 6 hours ....
    Now I started CTX_REPORT.INDEX_STATS to see how it looks like .... cause I exprected 95mil to become like 3.5mil max not more ....
    Can anyone please tell me what should I check to see why did this happen so that the last 900.000 records created 91 mil rows in index ?
    If there would be something wrong, why would the last 900.000 rows create something that prev 2mil rows did not ...
    HEre is index creation :
    CREATE INDEX ART_IDX ON MS_ARTICLE(ORATEXT) INDEXTYPE IS CTXSYS.CONTEXT  FILTER BY ID,ART_DATE,MEDIA_CODE ORDER BY
    ART_DATE DESC PARAMETERS (' LEXER ART_LEX STOPLIST CTXSYS.EMPTY_STOPLIST sync(ON COMMIT) DATASTORE DS_ART');If anyone needs definition of lexer od datastore, then please tell me what do I have to do to get definitions of that.
    Thank you.
    KRis

    Hi,
    Ok there must be something I did wrong .... cause after running INDEX_STATS ...I got this results :
    ===========================================
                        STATISTICS FOR "PRESCLIP"."ART_IDX"
    ===========================================
    indexed documents:                                              2,876,228
    allocated docids:                                               2,876,228
    $I rows:                                                       96,110,561
                                 TOKEN STATISTICS
    unique tokens:                                                  5,584,188
    average $I rows per token:                                          17.21
    tokens with most $I rows:
      JE (0:TEXT)                                                      11,650
      V (0:TEXT)                                                       11,183
      IN (0:TEXT)                                                      10,085So I have expected Average rows per token to be 1 after droping and re-creating index ..... so what else must I do to get the number 96mil to 5.5mil ?
    Thank you.
    Kris

  • Oracle Text Context index keeps growing. Optimize seems not to be working

    Hi,
    In my application I needed to search through many varchar columns from differents tables.
    So I created a materialized view in which I concatenate those columns, since they exceed the 4000 characters I merged them concatenating the columns with the TO_CLOBS(column1) || TO_CLOB(column)... || TO_CLOB(columnN).
    The query is complex, so the refresh is complete on demand for the view. We refresh it every 2 minutes.
    The CONTEXT index is created with the sync on commit parameter.
    The index then is synchronized every two minutes.
    But when we run the optimize index it does not defrag the index. So it keeps growing.
    Any idea ?
    Thanks, and sorry for my poor english.
    Edited by: detryo on 14-mar-2011 11:06

    What are you using to determine that the index is fragmented? Can you post a reproducible test case? Please see my test of what you described below, showing that the optimization does defragment the index.
    SCOTT@orcl_11gR2> -- table:
    SCOTT@orcl_11gR2> create table test_tab
      2    (col1  varchar2 (10),
      3       col2  varchar2 (10))
      4  /
    Table created.
    SCOTT@orcl_11gR2> -- materialized view:
    SCOTT@orcl_11gR2> create materialized view test_mv3
      2  as
      3  select to_clob (col1) || to_clob (col2) clob_col
      4  from   test_tab
      5  /
    Materialized view created.
    SCOTT@orcl_11gR2> -- index with sync(on commit):
    SCOTT@orcl_11gR2> create index test_idx
      2  on test_mv3 (clob_col)
      3  indextype is ctxsys.context
      4  parameters ('sync (on commit)')
      5  /
    Index created.
    SCOTT@orcl_11gR2> -- inserts, commits, refreshes:
    SCOTT@orcl_11gR2> insert into test_tab values ('a', 'b')
      2  /
    1 row created.
    SCOTT@orcl_11gR2> commit
      2  /
    Commit complete.
    SCOTT@orcl_11gR2> exec dbms_mview.refresh ('TEST_MV3')
    PL/SQL procedure successfully completed.
    SCOTT@orcl_11gR2> insert into test_tab values ('c a', 'b d')
      2  /
    1 row created.
    SCOTT@orcl_11gR2> commit
      2  /
    Commit complete.
    SCOTT@orcl_11gR2> exec dbms_mview.refresh ('TEST_MV3')
    PL/SQL procedure successfully completed.
    SCOTT@orcl_11gR2> -- query works:
    SCOTT@orcl_11gR2> select * from test_mv3
      2  where  contains (clob_col, 'ab') > 0
      3  /
    CLOB_COL
    ab
    c ab d
    2 rows selected.
    SCOTT@orcl_11gR2> -- fragmented index:
    SCOTT@orcl_11gR2> column token_text format a15
    SCOTT@orcl_11gR2> select token_text, token_first, token_last, token_count
      2  from   dr$test_idx$i
      3  /
    TOKEN_TEXT      TOKEN_FIRST TOKEN_LAST TOKEN_COUNT
    AB                        1          1           1
    AB                        2          3           2
    C                         3          3           1
    3 rows selected.
    SCOTT@orcl_11gR2> -- optimizatino:
    SCOTT@orcl_11gR2> exec ctx_ddl.optimize_index ('TEST_IDX', 'REBUILD')
    PL/SQL procedure successfully completed.
    SCOTT@orcl_11gR2> -- defragmented index after optimization:
    SCOTT@orcl_11gR2> select token_text, token_first, token_last, token_count
      2  from   dr$test_idx$i
      3  /
    TOKEN_TEXT      TOKEN_FIRST TOKEN_LAST TOKEN_COUNT
    AB                        2          3           2
    C                         3          3           1
    2 rows selected.
    SCOTT@orcl_11gR2>

Maybe you are looking for