本公司開發的軟件,有客戶不能上傳大的附件,頁面不報任何錯誤。查看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 大家來多交流哦!