DB2 reorg表,因表空間不夠出現錯誤
http://blog.csdn.net/zheyimiao/article/details/6244873
當對一個表的結構進行改變後,需要reorg表,重新組織其目錄統計資訊,為資料庫的訪問計劃提供資訊,以便高效執行對其的操作。
在一次維護資料庫中,因添加了表的一列後,對其作reorg操作,發生錯誤,通過db2 "? sql0xxx"查的錯誤原因為物理空間已滿,然後在$DB2_INSTALL_DIR/sqllib/db2dump/檢視db2diag.log可以發現是表空間大小不夠。因為reorg table如果沒有指定用哪個表空間來做reorg操作的話,會預設使用該表所在的表空間,而reorg table and index xxx即表和其上的索引一起reorg的話,會預設使用系統臨時表空間。
我的這個表資料量特別大,所以我在一個空間很大的盤建立了新的臨時表空間MYTEMPSPACE1,然後用這個表空間來做reorg操作reorg table $tablename index $indexname use MYTEMPSPACE1
這裡建立這個表空間有將就,他的pagesize要和表的pagesize匹配,然後維護人員可以用原來db2 中建立表空間的語句來參照著建立自己新的表空間。用db2look -d $dbname -l -e -x -o $db.layout
這樣檢視db.layout就可以把原來建立表空間的一些引數複製來使用。
最後執行的時候因為我的表實在太大,還是出現問題,在我的臨時表空間減小了40G左右的時候,就不用這個空間了(我的空間還有50多G的,不知道是不是建立表空間的時候制約了這點,還沒有去查),又使用了預設的系統臨時表空間(30G)把這個表空間用完後,又報錯誤空間不夠。
當時快崩潰了,就嘗試著只執行reorg table $tablename use MYTEMPSPACE1,執行快一個小時後,執行成功!!!