收縮表空間大小

2021-07-30 02:48:51 字數 1569 閱讀 2603

使用者所關聯的表都刪除了,但是表空間不能自己釋放。找到了下面一條sql語句,它的作用是查詢(拼接)出縮小表空間檔案(datafile)的語句,預設是計算所有的表空間檔案,給出可以釋放的大小。根據它給出的結果,執行類似「 alter database datafile 'e:\oracle\nnc_data03.dbf' resize 1208m;」的語句,就可以立竿見影的看到壓縮表空間的效果了。

select

a .file#,

a . name,

a .bytes / 1024 / 1024 currentmb,

ceil (hwm * a .block_size) / 1024 / 1024 resizeto,

(a .bytes - hwm * a .block_size) / 1024 / 1024 releasemb,

'alter database datafile ''' || a . name || ''' resize ' || ceil (hwm * a .block_size / 1024 / 1024) || 'm;' resizecmd

from

v$datafile a,

( select

file_id,

max (block_id + blocks - 1) hwm

from

dba_extents

group by

file_id

) bwhere

a .file# = b.file_id (+)

and (a .bytes - hwm * block_size) > 0

order by

5

在oracle中,經常有這樣的情況,由於誤操作,使某個表空間過大。delete 方法不會清除高水位線,用了truncate之後,雖然高水位線已經清除,但是擴充的表空間並沒有縮小,所以應該用下面的方法進行縮小:

1.查詢表空間對應的資料檔案id,以users表空間為例:

select file_id from dba_data_files where tablespace_name ='users'

2.允許表空間進行收縮(對錶空間進行融合):

alter tablespace users coalesce;

3.查詢表空間中表對應的大小,好確定對哪張表進行操作:

select * from dba_segments where tablespace_name='users' and segment_type='table'

4.允許表進行行移動(某些表不能進行truncate,只能delete)

alter table test row movement;

5.對錶進行高水位線**:

alter table test shrink space;

6.最後,對第一步查出的資料檔案id進行壓縮(resize),大小一定要大於已用大小:

alter database datafile 4 resize 2000m;

經過上述操作,擴大的表空間就可以收縮回正常尺寸了,親測可用!

mysql收縮空間 Oracle表空間收縮方案

對於表空間收縮,oracle只提供擴大的功能,而不提供收縮。所以,要實現這樣的要求,就只能先建立乙個中間表空間,然後將待收縮表 應用背景 某些情況下,由於前期設計上沒有考慮全面,導致表空間預建太大,遠遠超出實際使用大小。於是,就出現了收縮表空間這樣的需求,即將這個表空間的占用空間進行收縮。處理方案 ...

收縮臨時表空間

當排序操作 重建索引等大型操作無法在記憶體中完成時,臨時表空間將為排序提供便利。一般情況下臨時表空間為多個使用者,多個會話所共 享。不能為會話分批空間配額。臨時表空間耗用過度且在不能自動擴充套件的情形下將收到 ora 1652 unable to extend temp segment 錯誤.下面 ...

Oracle 表空間收縮

業務表頻繁寫入,刪除,清空後,表占用的空間不能夠及時釋放,需要通過如下方式手工釋放空間。更新業務表統計資訊 call dbms stats.gather table stats user name table name 收縮業務表空間占用 alter table enable row movemen...