Informix DB:
create table 時 informix 會先allocate 一個空間給這個TABLE 使用. 如果空間不夠時. informix 會再allocate 一個空間來使用.如果這二個空間剛好都是連在一起,在Informix 中我們叫他為一個 extent,資料庫長時間使用下有可能使得TABLE的EXTENT 值變大.大過一定值(200以上?) 會出現錯誤.這時我們就要重新規劃了.
先用以下命令去找.所有資料庫table extent與他的SIZE
select
dbsname,
tabname,partnum,
count(*) num_of_extents,
sum(pe_size) total_size
from
systabnames, sysptnext
where
partnum = pe_partnum
and partnum > 99
and dbsname <> "sysmaster"
and dbsname <> "sysutils"
and tabname <> "TBLSpace"
group by 1,2,3
order by 1,5 desc ;
我查出我的MYTABLE001 他空用有201個EXTENT 共 771400 KB ,
這時我要先建一個TABLE 內容與原TABLE 名稱多加個_TEMP 並同時給他初始大小與增大大小(KB)
CREATE TABLE tiptop.mytable001_temp (
imk01 CHAR(20),
imk02 CHAR(10),
imk03 CHAR(10),
imk09 DECIMAL(15,3)
)
EXTENT SIZE 921600 NEXT SIZE 61440
LOCK MODE PAGE
之後再把資料insert 到Temp table
insert into mytable001_temp select * from mytable001
再把原TABLE DROP, 再把temp table rename 到原table
drop table mytable001
RENAME TABLE mytable001_temp TO mytable001
經過這次的轉換後.沒問題了.
注意.要先把原來的 trigger, index 相關語法備份下來喔
沒有留言:
張貼留言