最近在使用onspaces -d刪除chunk時遇到點小問題。數據庫
在一臺主機執行onstat -d後顯示的數據庫存儲空間以下ide
Dbspacesspa
address number flags fchunk nchunks pgsize flags owner name.net
700000030211028 1 0x60001 1 1 4096 N B informix rootdbsorm
70000006016a330 2 0x60001 2 1 4096 N B informix logdbsblog
70000006016ad80 3 0x60001 3 1 4096 N B informix phydbsget
70000006016b850 4 0x42001 4 1 4096 N TB informix tmpdbs博客
70000006016c3f0 5 0x60001 5 13 4096 N B informix datadbsit
70000006016ce00 6 0x60001 6 1 4096 N B informix idxdbsform
6 active, 2047 maximum
Chunks
address chunk/dbs offset size free bpages flags pathname
7000000302111c0 1 1 1 64000 43073 PO-B- /informix/dbs/rootdbs
70000006016a4c8 2 2 1 512000 511947 PO-B- /informix/dbs/logdbs
70000006016b028 3 3 1 256000 255947 PO-B- /informix/dbs/phydbs
70000006016b9e8 4 4 1 256000 255797 PO-B- /informix/dbs/tmpdbs
70000006016c588 5 5 1 1024000 844994 PO-B- /informix/dbs/datadbs
700000060164028 6 6 1 128000 125727 PO-B- /informix/dbs/idxdbs
700000060164850 7 5 1 128000 127997 PO-B- /informix/dbs/datadbs1601
700000060164a40 8 5 1 128000 127997 PO-B- /informix/dbs/datadbs1602
如今我想要刪除datadbs空間上掛載的"datadbs1601 "和"datadbs1602 "兩個chunk,執行命令
#:/informix/dbs >onspaces -d datadbs -p /informix/dbs/datadbs1601 -o 1
WARNING: Dropping a chunk.
Do you really want to continue? (y/n)y
Chunk not dropped.
ISAM error: No such chunk
很疑惑,明明chunk是有的,爲何報chunk不存在,經過參考http://blog.csdn.net/sunxp/article/details/5823972 這篇博客中的最後一段發現,應該是-o 參數後面帶的偏移量寫錯了(但文章中並無寫明如何計算這個偏移量),onstat -d以後顯示的這個chunk的offset是1,爲何使用1做爲偏移量卻不行呢。想了想,"-o"這個參數的單位是K,而onstat -d中顯示的chunk的size和free的單位則是頁,那會不會offset顯示的也是以頁爲單位呢。若是是這樣,那實際的offset應該是1*4K(datadbs的pgsize)=4K,那onspaces命令中應該是"-o 4"
因而嘗試了一下,果真成功了
#:/informix/dbs >onspaces -d datadbs -p /informix/dbs/datadbs1601 -o 4
WARNING: Dropping a chunk.
Do you really want to continue? (y/n)y
Chunk successfully dropped.
** WARNING ** A level 0 archive for DBspace datadbs will need to be done
before '/informix/dbs/datadbs1601' can be reused (see Dynamic Server Administrator's manual).
說明:以上的案例中每一個chunk都是一個獨立的裸設備,當初掛載時都是從0偏移開始的,但後來由於一些數據庫空間掛了,從新初始化數據庫後,不知道當時的同事怎麼處理的,datadbs1601和datadbs1602在onstat -d命令中顯示的offset變成1了。對於其餘實際狀況,本文提供的參考方法不肯定有效。