本公司開發的軟體,有客戶不能上傳大的附件,頁面不報任何錯誤。查看JBOSS日誌,同樣看不到任何錯誤,排除了軟體本身故障。
在查看oracle資料庫日誌,發現當上傳大的附件時出現錯誤資訊
OEA_1693: MAX # EXTENTS 4096 reached in lobsegment
nes.sys_LOB0000024832C00008$$
解決過程
上網找了下資料
ORA-1693 max # extents (string) reached in lob segment string.string
Cause: A LOB segment tried to extend past MAXEXTENTS.
Action: If MAXEXTENTS is less than the system max, raise it. Otherwise, you must re-create with larger initial, next or PCTINCREASE parameters.
將資料表空間的maxextents改為無限制,問題還是存在將該表的maxextents改為無限制
alter table T_ID_CHECK_ACCESSORIES storage (maxextents unlimited)
問題同樣不能解決
後來在查看該表結構時意外發現該表用的資料表空間為USERS 而沒有用到我為其建立的資料表空間test,由於資料庫是用IMP匯入資料的,可能是當初EXP匯出時該使用者是用的oracle預設資料表空間。
由於有以上發現我決定將該表的資料表空間修改為test
Alter table T_ID_CHECK_ACCESSORIES move tablespace test;
修改該表後測試系統 一切正常能正常傳大附件
解決問題後還是一頭霧水,為什麼該表用USERS資料表空間會出現ORA-01693問題,改為TEST資料表空間後正常,USERS和TEST的maxextents都為無限制。
突然想到該使用者下面的所有表同樣都在USERS資料表空間中,決定把所有表都移至TEST中由於表較多所以用一個查詢產生所需要的命令
Select ‘alter table ‘ || table_name || ‘ move tablespace test; ‘ from user_tables;
然後執行該查詢所產生的結果
將該使用者下的索引移至資料表空間TEST
Select ‘alter index ‘|| index_name || ‘ rebuild tablespace test;’
執行該查詢產生的命令後,發現有4個表報錯
ORA-02327: cannot create index on expression with datatype LOB
檢查4個表的結構後,都有個LOB欄位那說明有LOB欄位的索引不能用正常的
alter index index_name rebuild talespace tablespace_name
網上查詢得知我們要移動LOB的索引就必須使用特定的文法來移動LOB的對象,具體的文法如下:
ALTER TABLE table_name MOVE
TABLESPACE new_tbsp
STORAGE(new_storage)
LOB (lobcol) --後面括弧裡面內容為 LOB 欄位名
STORE AS lobsegment
(TABLESPACE new_tbsp
STORAGE (new_storage));
檢查是否有索引狀態為'UNUSABLE'select index_name from user_indexes t where t.status ='UNUSABLE';如果有則對該索引重建alter index index_name rebuild
使用以上文法在修改這4條索引時,正常!!!
所有問題全部解決了,但很多地方還是一頭霧水(只怪自己太菜了)只有以後多加強學習,慢慢瞭解了。我的部落格地址是:tianchi.csai.cn 大家來多交流哦!