Oracle Text 學習筆記(11G)<一> :手工建立TEXT
根據Oracle Text Application Developer’s Guide,我們首先需要建立一個測試用的使用者,然後Grant CTXAPP這個角色給它。
如果這個角色不存在,會報:
SQL> grant CTXAPP to haozhu;
grant CTXAPP to haozhu
*
ERROR at line 1:
ORA-01919: role 'CTXAPP' does not exist
那麼如何建立這個角色和其他相關的物件呢?
從10G開始,我們只需要執行這個SQL指令碼即可:$ORACLE_HOME/ctx/admin/catctx.sql
這個指令碼有四個輸入引數:
define pass = "&1"
define tbs = "&2"
define ttbs = "&3"
define dolock = "&4"
這四個引數其實是傳遞給在這個指令碼里呼叫的另一個指令碼的:
@@ctxsys.sql &pass &tbs &ttbs &dolock
再開啟ctxsys.sql就可以看到這四個引數的意思:
create user ctxsys
identified by &pass default tablespace &tbs temporary tablespace &ttbs;
begin
if ('&dolock' = 'LOCK') then
execute immediate
'alter user ctxsys password expire account lock';
end if;
end;
/
原來,&pass是CTXSYS user的密碼,&tbs是CTXSYS user的default tablespace,&ttbs是CTXSYS user的temporary tablespace;而&dolock只要不為'LOCK',那麼CTXSYS user就不會被鎖住。
於是,執行如下命令安裝TEXT相關user,role,objects...
SQL> @?/ctx/admin/catctx.sql mypwd DATA TEMP NOLOCK
接著我們按照文件建立一個簡單的測試:
CREATE TABLE docs (id NUMBER PRIMARY KEY, text VARCHAR2(200));
INSERT INTO docs VALUES(1, 'California is a state in the US.');
INSERT INTO docs VALUES(2, 'Paris is a city in France.');
INSERT INTO docs VALUES(3, 'France is in Europe.');
然後建立TEXT index:
SQL> CREATE INDEX idx_docs ON docs(text)
2 INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS
3 ('FILTER CTXSYS.NULL_FILTER SECTION GROUP CTXSYS.HTML_SECTION_GROUP');
CREATE INDEX idx_docs ON docs(text)
*
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: CTXSYS.DEFAULT_LEXER
ORA-06512: at "CTXSYS.DRUE", line 160
ORA-06512: at "CTXSYS.TEXTINDEXMETHODS", line 366
我們發現在建立index的時候出錯了,原因是我們並沒有執行這個指令碼:$ORACLE_HOME/ctx/admin/defaults/drdefus.sql
於是執行之:(注意,這個指令碼需要用CTXSYS使用者執行)
SQL> conn CTXSYS/mypwd
SQL> @?/ctx/admin/defaults/drdefus.sql
在使用SYS賦權之後,再嘗試建立index:
SQL> CREATE INDEX idx_docs ON docs(text)
2 INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS
3 ('FILTER CTXSYS.NULL_FILTER SECTION GROUP CTXSYS.HTML_SECTION_GROUP');
CREATE INDEX idx_docs ON docs(text)
*
ERROR at line 1:
ORA-00955: name is already used by an existing object
發現,雖然我們前面建立TEXT index出錯,但是實際還是建立出來了一個index,只是他的user_indexes.DOMIDX_OPSTATUS='FAILED'。
SQL> l
1 select INDEX_TYPE,STATUS,DOMIDX_STATUS,DOMIDX_OPSTATUS
2* from user_indexes where INDEX_NAME='IDX_DOCS'
SQL> /
INDEX_TYPE STATUS DOMIDX_STATUS DOMIDX_OPSTATUS
---------- ------- ------------------------------------ ------------------
DOMAIN VALID VALID FAILED
而且這個TEXT index是無法被使用的:
SQL> SELECT SCORE(1), id, text FROM docs WHERE CONTAINS(text, 'France', 1) > 0;
SELECT SCORE(1), id, text FROM docs WHERE CONTAINS(text, 'France', 1) > 0
*
ERROR at line 1:
ORA-20000: Oracle Text error:
DRG-10599: column is not indexed
所以我們只得drop重建。
SQL> drop index IDX_DOCS;
Index dropped.
SQL> CREATE INDEX idx_docs ON docs(text)
2 INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS
3 ('FILTER CTXSYS.NULL_FILTER SECTION GROUP CTXSYS.HTML_SECTION_GROUP');
Index created.
SQL> SELECT SCORE(1), id, text FROM docs WHERE CONTAINS(text, 'France', 1) > 0;
SCORE(1) ID TEXT
---------- ---------- ------------------------------------------------------------
4 2 Paris is a city in France.
4 3 France is in Europe.
最後按照文件,我們需要grant如下許可權給當前測試使用者。
GRANT RESOURCE, CONNECT, CTXAPP TO TEXT_USER;
GRANT EXECUTE ON CTXSYS.CTX_CLS TO TEXT_USER;
GRANT EXECUTE ON CTXSYS.CTX_DDL TO TEXT_USER;
GRANT EXECUTE ON CTXSYS.CTX_DOC TO TEXT_USER;
GRANT EXECUTE ON CTXSYS.CTX_OUTPUT TO TEXT_USER;
GRANT EXECUTE ON CTXSYS.CTX_QUERY TO TEXT_USER;
GRANT EXECUTE ON CTXSYS.CTX_REPORT TO TEXT_USER;
GRANT EXECUTE ON CTXSYS.CTX_THES TO TEXT_USER;
GRANT EXECUTE ON CTXSYS.CTX_ULEXER TO TEXT_USER;
綜上,在11G,手工建立ORACLE TEXT只需要如下三步:
1.
login as SYS:
@?/ctx/admin/catctx.sql mypwd DATA TEMP NOLOCK
2.
login as CATSYS user,run:
conn CTXSYS/mypwd
@?/ctx/admin/defaults/drdefus.sql
3.
create user TEXT_USER identified by TEXT_USER;
GRANT RESOURCE, CONNECT, CTXAPP TO TEXT_USER;
GRANT EXECUTE ON CTXSYS.CTX_CLS TO TEXT_USER;
GRANT EXECUTE ON CTXSYS.CTX_DDL TO TEXT_USER;
GRANT EXECUTE ON CTXSYS.CTX_DOC TO TEXT_USER;
GRANT EXECUTE ON CTXSYS.CTX_OUTPUT TO TEXT_USER;
GRANT EXECUTE ON CTXSYS.CTX_QUERY TO TEXT_USER;
GRANT EXECUTE ON CTXSYS.CTX_REPORT TO TEXT_USER;
GRANT EXECUTE ON CTXSYS.CTX_THES TO TEXT_USER;
GRANT EXECUTE ON CTXSYS.CTX_ULEXER TO TEXT_USER;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15415488/viewspace-622482/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 手工建立oracle text全文檢索元件Oracle元件
- 度量學習筆記(一) | Metric Learning for text categorization筆記Go
- CSS學習筆記:溢位文字省略(text-overflow)CSS筆記
- Flutter元件學習(一)—— Text元件Flutter元件
- Sublime Text 學習資料
- ORACLE TEXT(轉)Oracle
- oracle學習筆記《一》Oracle筆記
- Oracle Text簡介Oracle
- 手工建立ORACLE 11g 資料庫Oracle資料庫
- ORACLE TEXT DATASTORE PREFERENCE(一) 【ORACLE 全文索引】OracleAST索引
- flutter隨筆- Text and StyleFlutter
- oracle 原理學習筆記(一)Oracle筆記
- Text Summarization with Pretrained Encoders 論文筆記AI筆記
- Oracle Text SQL Statements and OperatorsOracleSQL
- 4, 手工建立資料庫(筆記)資料庫筆記
- Jetpack Compose學習(2)——文字(Text)的使用Jetpack
- 探究 Text Kit 和 Core Text 的前世今生 (Text Kit 篇)
- oracle學習筆記Oracle筆記
- Oracle Text演算法模型Oracle演算法模型
- Oracle 安裝Full Text searchOracle
- oracle學習筆記零碎(一)Oracle筆記
- Activiti學習筆記一:建立資料庫表筆記資料庫
- Oracle學習系列—Oracle表空間和使用者的手工建立Oracle
- oracle 學習筆記 (ORACLE NET )Oracle筆記
- Oracle學習筆記(一)---oracle安裝和配置Oracle筆記
- CUUG筆記 ORACLE索引學習筆記筆記Oracle索引
- text/html和text/plain的區別HTMLAI
- 【手工建庫】手工方式建立 ORACLE資料庫全程記錄Oracle資料庫
- Oracle學習筆記2Oracle筆記
- Oracle學習筆記1Oracle筆記
- ORACLE dataguard學習筆記Oracle筆記
- Oracle FlashBack 學習筆記Oracle筆記
- ORACLE學習筆記(zt)Oracle筆記
- Oracle學習筆記-1Oracle筆記
- RMAN學習筆記_ Duplicate建立DataGuard筆記
- jQuery text()jQuery
- jQuery :textjQuery
- Text Representation