萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> oracle教程 >> ORACLE的ORA-1693錯誤以及表和索引的表空間的移動

ORACLE的ORA-1693錯誤以及表和索引的表空間的移動

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

copyright © 萬盛學電腦網 all rights reserved