dataguard之邏輯備庫表空間不足

suifeng2316發表於2011-11-28
早上發現一個邏輯備庫上的表空間不足,接著檢查其主庫和其他備庫,發現並沒有出現該表空間不足的情況。
於是接著在表空間不足的備庫上檢查空間被那些物件佔據:
 select segment_name ,bytes/1024/1024 from dba_segments where tablespace_name='PRODUCTSPACE' order by bytes desc;
結果發現是表COMRFPVDETAIL佔據了將近6G的空間,可在主庫是上查詢該物件時發現該物件只佔據了2G左右的空間。
於是在選擇了一個業務低谷的時間段,在主庫執行以下操作:
1,  alter table COMRFPVDETAIL shrink space ;
在 執行該指令之前必須允許行移動 alter table table_name enable row movement; 
有沒有啟動行移動可查詢:select * from dba_tables where  table_name='COMRFPVDETAIL';
2,主庫執行一次日誌切換
alter system switch logfile;
結果:
再次查詢備庫表空間的狀態,發現主備之間空間佔用率基本一致。
解決以上問題,估計還可以在備庫上使用dbms_logstdby.instantiate_table手工同步該表。不過執行前得先停止日誌應用。
注意:
1.使用shrink space時,索引會自動維護。shrink space cascade會同時收縮索引。也可以單獨使用alter index xxx shrink space收縮索引。
2.shrink space需要在表空間是自動段空間管理的,所以system表空間上的表無法shrinkspace
3.move也可以實現收縮並降低hwm,但是move需要指定storage引數做到真正壓縮分配空間
4.使用move時會改變一些記錄的rowid,所以move後索引會變為無效,需要rebuild

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23073818/viewspace-712196/,如需轉載,請註明出處,否則將追究法律責任。

相關文章