許多人剛剛接觸Oracle時(shí),對(duì)于權(quán)限并不是很了解,如果有時(shí)候報(bào)錯(cuò)ORA-1031缺少足夠的權(quán)限,且找不到所需要的授權(quán)的權(quán)限時(shí),就會(huì)嘗試使用SYS來執(zhí)行這個(gè)錯(cuò)誤。由于SYS時(shí)整個(gè)數(shù)據(jù)庫的所有者,因此不會(huì)出現(xiàn)缺少權(quán)限的問題。
下面我們來介紹一個(gè)錯(cuò)誤案例:在測(cè)試一個(gè)全文索引例子的時(shí)候,由于忘記切換用戶,使用了SYS用戶執(zhí)行,結(jié)果出現(xiàn)ORA-1031錯(cuò)誤,數(shù)據(jù)庫測(cè)試版本為9204:
SQL> SHOW USER
USER 為"SYS"
SQL> CREATE TABLE T (ID NUMBER, NAME VARCHAR2(60));
表已創(chuàng)建。
SQL> INSERT INTO T VALUES (1, 'A SIMPLE TEST FOR SYS CREATE CONTEXT INDEX');
已創(chuàng)建 1 行。
SQL> CREATE INDEX IND_T_NAME ON T(NAME) INDEXTYPE IS CTXSYS.CONTEXT;
CREATE INDEX IND_T_NAME ON T(NAME) INDEXTYPE IS CTXSYS.CONTEXT
*
ERROR 位于第 1 行:
ORA-29855: 執(zhí)行 ODCIINDEXCREATE 例行程序時(shí)出錯(cuò)
ORA-20000: Oracle Text 錯(cuò)誤:
DRG-50857: oracle error in drixtab.create_index_tables
ORA-01031: 權(quán)限不足
ORA-06512: 在"CTXSYS.DRUE", line 157
ORA-06512: 在"CTXSYS.TEXTINDEXMETHODS", line 204
注意:這個(gè)例子在普通用戶下并不會(huì)報(bào)錯(cuò):
SQL> CONN YANGTK/YANGTK@TEST1已連接。
SQL> CREATE TABLE T (ID NUMBER, NAME VARCHAR2(60));
表已創(chuàng)建。
SQL> INSERT INTO T VALUES (1, 'A SIMPLE TEST FOR SYS CREATE CONTEXT INDEX');
已創(chuàng)建 1 行。
SQL> CREATE INDEX IND_T_NAME ON T(NAME) INDEXTYPE IS CTXSYS.CONTEXT;
索引已創(chuàng)建。
通過EVENTS 10046進(jìn)行跟蹤,發(fā)現(xiàn)在創(chuàng)建DR$IND_T_NAME$K表的時(shí)候報(bào)錯(cuò),而這個(gè)表是一個(gè)索引組織表。
根據(jù)這些信息查詢了METALINK,發(fā)現(xiàn)Bug No. 1366361對(duì)這個(gè)問題進(jìn)行了比較清晰的闡述。缺少權(quán)限的不是SYS用戶,而是CTXSYS所建立的存儲(chǔ)過程沒有權(quán)限。不過此處并沒有解釋清楚為什么普通表沒有問題,而建立一個(gè)索引組織表報(bào)錯(cuò)。
下面給出了對(duì)應(yīng)的解決方法,將數(shù)據(jù)庫的O7_DICTIONARY_accessIBILITY設(shè)置為TRUE,重起后,就不會(huì)報(bào)錯(cuò)了。
SQL> CONN /@TEST1 AS SYSDBA已連接。
SQL> SHOW PARAMETER O7
NAME TYPE VALUE
------------------------------------ ----------- --------------------------
O7_DICTIONARY_ACCESSIBILITY boolean FALSE
SQL> ALTER SYSTEM SET O7_DICTIONARY_ACCESSIBILITY = TRUE SCOPE = SPFILE;
系統(tǒng)已更改。
SQL> SHUTDOWN IMMEDIATE數(shù)據(jù)庫已經(jīng)關(guān)閉。已經(jīng)卸載數(shù)據(jù)庫。
ORACLE 例程已經(jīng)關(guān)閉。
SQL> STARTUP
ORACLE 例程已經(jīng)啟動(dòng)。
Total System Global Area 110173900 bytes
Fixed Size 454348 bytes
Variable Size 83886080 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes數(shù)據(jù)庫裝載完畢。數(shù)據(jù)庫已經(jīng)打開。
最后刪除剛才建立索引失敗留下的垃圾表,就可以重建索引了:
SQL> DROP INDEX IND_T_NAME;
索引已丟棄。
SQL> CREATE INDEX IND_T_NAME ON T(NAME) INDEXTYPE IS CTXSYS.CONTEXT;
索引已創(chuàng)建。
新聞熱點(diǎn)
疑難解答
圖片精選