5. 手動重整Table

手動重整(Reorganization)表格。語法範例如下:
ALTER TABLE TEST.TEST_TABLE MOVE TABLESPACE TEST2;
  • 重整(Reorganization)的目的是重建Table或是重整Table,那是為什麼我要作重整(Reorganization)呢?是因為頻繁新增(Insert),修改(Update)和刪除(Delete)而造成某些Table上的資料區塊(Data Block)的資料降的很低,也就是說原則上這個Table上的資料區塊(Data Block)大小應該都是一樣的,但是如果有PCTFREE,和常做新增(Insert),修改(Update)和刪除(Delete),會造成有些空間很空有些空間很滿,此時Table的大小雖然只有100M但資料區塊(Data Block)數量卻很多,所以重整(Reorganization)就是希望把存取Table的效能提高,而資料都能存到PCTFREE為止。
  • 重整(Reorganization)表格指令後面可以加上儲存參數,會將Table搬到指定的Tablespace上,或者不加Tablespace就會在原來的Tablespace上重整而同時也會繼承原來Table的權限,例如:index、constrain等都會繼承。
  • 重整完之後每個資料區塊(Data Block)都會塞到PCTFREE,空間的使用狀況就會很好,查詢就會比較快。
  • 要注意當重整Table從Tablespace A搬到Tablespace B上對Oracle來說的資料所在的Data File改變了也就是說ROWID上的File ID變了,但Object ID沒變,因此Object ID所根據的Relative File Number變了,Relative File Number更動了,Block Number也就變了,Block Number整個Row Number也就變了,但之前的索引(Index)紀錄的是舊的ROWID,此時如果在去查詢此Table,Oracle就會顯示索引(Index)有問題,所以當重整(Reorganization)完之後一定要重建索引(Rebuild Index)。
  • 分割表格(Partition Table)不能以此方式作重整(Reorganization)表格,如果分割表格(Partition Table)需要作重整(Reorganization)只能以EXPORT與IMPORT的方式進行。
  • 當Table裡面有大型物件(Large Object)的欄位時也不能以此方式作表格的重整(Reorganization),需有特的指令,而大型物件(Large Object)的重整(Reorganization)執行語法如下。

ALTER TABLE TEST.TABLE_NAME MOVE LOB(COLUMN_NAME) STORE AS (TABLESPACE TABLESPACE_NAME);

沒有留言:

張貼留言