oracle數據佔用空間過大的分析

經過exp/imp進行數據庫備份或搭建測試環境。sql

在imp中導入一個用戶模式時,即便是空表(ROWS=N),表空間佔用很大(20多GB), 後續導入會報"Unable to INITIAL EXTENT ....tablespace"  錯誤。數據庫

 

查找緣由發現是表空間已滿了。(可經過數據庫自帶的em管理頁面查看)測試

看一個簡單的實驗:url

查看某個表空間大小:spa

[sql]  view plain copy
  1. select /*+ ordered use_merge(a,b) */  
  2.    a.tablespace_name             表空間名,  
  3.    total/(1024*1024)             表空間大小,  
  4.    (total-free)/(1024*1024)        表空間使用大小,  
  5.    free/(1024*1024)             表空間剩餘大小,  
  6.    round((total-free)/total,4)*100 "使用率%"  
  7. from (select   tablespace_name,sum(bytes) free from dba_free_space  
  8.        group by tablespace_name) a,  
  9.    (select   tablespace_name,sum(bytes) total from dba_data_files  
  10.        group by tablespace_name) b  
  11. where   a.tablespace_name = b.tablespace_name  
  12. and a.tablespace_name = 'TEST_GENERAL_DAT_TS';  

導入前:(單位MB).net

表空間名                             表空間大小              表空間使用大小  剩餘大小       使用率blog

IA_GENERAL_DAT_TS        37067.984375        .171875        37067.8125        0%ip


查看某個用戶段大小:get

[sql]  view plain copy
  1. select sum(t.bytes) from dba_segments t where t.owner='TEST';  

導入前  0.it

 

導入一個用戶後,導出文件.dmp時的選項(compress = Y)

表空間大小

 1        IA_GENERAL_DAT_TS        37067.984375        26485.671875        10582.3125        71.45%

 

select sum(t.bytes) from dba_segments t where t.owner='TEST';

 sum  = 37725732864 bytes

 

把該用戶刪掉,從新導入。導出.dmp文件時的選項(compress = N)

表空間大小

1        IA_GENERAL_DAT_TS        37067.984375        5.421875        37062.5625        .01%

          

select sum(t.bytes) from dba_segments t where t.owner='TEST';

 sum  = 8847360 bytes

 

經過上述加上compress=n 選項便可解決導入空表時表空間過大的問題。

compress 選項並不是壓縮的意思,而是與表的initial storage 設置相關的, 若是爲Y, 即導入的表大小跟原始數據庫表大小一致(即便是空表!!)

相關文章
相關標籤/搜索