ORACLE ORA-1693錯誤以及表和索引的表空間的移動
2024-08-29 13:33:35
供稿:網友
本公司開發的軟件,有客戶不能上傳大的附件,頁面不報任何錯誤。查看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 大家來多交流哦!