Oracle資料搬遷時建表引數pctfree的修改
最近在進行資料遷移時需要修改部分表的pctfree和initrans引數,因此對修改的方式進行了討論。 pctfree引數增大會使資料塊的空閒空間同步增加,塊的使用率就會下降。但是直接修改已有表的pctfree和initrans引數引數,針對已有塊的空閒空間是不會改變的,例如:當前表的pctfree設定為10,手工調整為20後,表使用的塊的數量是不會改變的。 有兩種方式可供選擇: (1)先在新的資料庫中新建表,建表是將pctfree和initrans引數設定為需要的值,再用資料泵的方式將原始庫匯出,增量的方式匯入新庫; (2)直接在原始庫上對錶結構進行修改,再通過資料泵的方式進行匯出匯入。 針對第一種方法是肯定沒有問題的,但是操作起來不太方便。個人比較傾向於第二種方法,但是由於資料泵是採用塊資料搬遷的方式進行匯出的,所以不清楚匯入以後塊的空閒空間會不會改變,因此進行了測試。 測試步驟: (1)找一張資料量在20M左右的表,其pctfree=10,我測試的表名為A; (2)新建一張表B,其pctfree=20,其餘與A表相同; (3)執行INSERT INTO B SELECT * FROM A; (4)將A的pctfree修改為20,並通過資料泵匯出A表; (5)將A表的名稱修改為C(避免資料泵匯入時重複); (6)資料泵匯入A表。 查詢表情況,結果如下 SEGMENT_NAME BYTES BLOCKS 表名 目前佔用的大小 佔用了多少個block C 22020096(21MB) 2688 B 26214400(25MB) 3200 A 26214400(25MB) 3200 通過上表可以看出兩種方式遷移資料後,其表大小與所佔資料塊是一致的,說明資料泵匯入時其pctfree已經生效,新資料庫的資料儲存沒有完全照搬老的資料塊。
以上純屬個人簡介,不對之處請指教。