Pular para o conteúdo

Fóruns Banco de dados Oracle Erro na criação de índice Erro na criação de índice

#91152
burga
Participante

    Oi Roberto,

    No caso da clausula like se a sua busca for por ‘string%’ ela não “mataria” o indice, agora se a sua busca pode conter qualquer palavra antes (‘%string’ ou ‘%string%’) acredito que somente com os índices CTX mesmo.

    Aqui na empresa nós temos estes índices mas utilizamos o CONTEXT e não o CTXCAT. Nunca peguei este erro que você está tendo, mas aí vai um exemplo do script que utilizamos:


    -- conectado como system ou sysdba
    GRANT RESOURCE, CONNECT, CTXAPP TO "USUARIO";
    GRANT CREATE TABLE TO "USUARIO";
    GRANT EXECUTE ON CTXSYS.CTX_CLS TO "USUARIO";
    GRANT EXECUTE ON CTXSYS.CTX_DDL TO "USUARIO";
    GRANT EXECUTE ON CTXSYS.CTX_DOC TO "USUARIO";
    GRANT EXECUTE ON CTXSYS.CTX_OUTPUT TO "USUARIO";
    GRANT EXECUTE ON CTXSYS.CTX_QUERY TO "USUARIO";
    GRANT EXECUTE ON CTXSYS.CTX_REPORT TO "USUARIO";
    GRANT EXECUTE ON CTXSYS.CTX_THES TO "USUARIO";
    GRANT EXECUTE ON CTXSYS.CTX_ULEXER TO "USUARIO";
    ALTER USER USUARIO DEFAULT ROLE ALL;

    -- conectado como usuario
    BEGIN
    CTX_DDL.CREATE_PREFERENCE('USUARIO_lexer', 'BASIC_LEXER');
    CTX_DDL.SET_ATTRIBUTE('USUARIO_lexer', 'base_letter', 'YES');
    CTX_DDL.CREATE_PREFERENCE('USUARIO_wordlist', 'BASIC_WORDLIST');
    CTX_DDL.SET_ATTRIBUTE('USUARIO_wordlist', 'WILDCARD_MAXTERMS', 15000);
    END;
    /

    BEGIN
    CTX_DDL.CREATE_PREFERENCE('ctx_store_tbs', 'BASIC_STORAGE');
    CTX_DDL.SET_ATTRIBUTE('ctx_store_tbs','I_TABLE_CLAUSE',
    'tablespace USUARIO_I storage (initial 10M next 10M)');
    CTX_DDL.SET_ATTRIBUTE('ctx_store_tbs', 'K_TABLE_CLAUSE',
    'tablespace USUARIO_I storage (initial 10M next 10M)');
    CTX_DDL.SET_ATTRIBUTE('ctx_store_tbs', 'R_TABLE_CLAUSE',
    'tablespace USUARIO_I storage (initial 1M) lob (data) store as (cache)');
    CTX_DDL.SET_ATTRIBUTE('ctx_store_tbs', 'N_TABLE_CLAUSE',
    'tablespace USUARIO_I storage (initial 1M)');
    CTX_DDL.SET_ATTRIBUTE('ctx_store_tbs', 'I_INDEX_CLAUSE',
    'tablespace USUARIO_I storage (initial 1M) compress 2');
    CTX_DDL.SET_ATTRIBUTE('ctx_store_tbs', 'P_TABLE_CLAUSE',
    'tablespace USUARIO_I storage (initial 1M)');
    END;
    /

    CREATE INDEX "USUARIO"."PAIS_CTX_I" ON "USUARIO".PAISES (NOME)
    INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS ( 'LEXER USUARIO_lexer WORDLIST USUARIO_wordlist STORAGE ctx_store_tbs SYNC (ON COMMIT)' );

    Note que nos egundo procedimento eu defino a tablespace USUARIO_I a ser usada pelo indice.