1.檢視資料檔案的大小
select tablespace_name ,sum(bytes) / 1024 / 1024 as mb,file_name
from dba_data_files
group by tablespace_name,file_name;
2.減少檔案的大小
alter database datafile 'd:\ora_tablespace\gcomm2.dbf' resize 5000m;
原因1:壓縮表空間大小,最小必須是該錶空間目前最大塊段的大小
原因2:表的初始大小分配的太大
一、原因1,可以採用移動表空間的方法來減小block_id
--a)查詢file_id
select tablespace_name ,sum(bytes) / 1024 / 1024 as mb,file_name,file_id
from dba_data_files
group by tablespace_name,file_name,file_id;
max(block_id)
--c)計算目前最大塊的段所占用的空間(該資料庫的block大小是8092)
show parameter db_block_size;
結果為8192,就是8k。
然後計算所有資料塊占用的物理空間
select 1310577*8/1024 from dual;
10238.8828125
結果為10238.8828125m,就是10g多
4. 然後我們知道目前用了10g多,我們就可以把資料檔案大小resize到10g多一點
alter database datafile 'd:\oradata\ecss20' resize 10240m;
二、徵對原因2可通過減小表或索引的初始化大小來收縮表空間
--徵對塊大的表 減小其初始分配大小
select distinct 'alter table ' || segment_name ||
' move storage(initial 1m) ;'
from dba_extents
where tablespace_name = 'gcomm2'
and segment_type = 'table'
and file_id = 11
and block_id > 30336;
--徵對塊大的索引減小其初始分配大小
select distinct 'alter index ' || segment_name ||
' rebuild tablespace gcomm2 storage(initial 64k next 1m pctincrease 0);'
from dba_extents
where tablespace_name = 'gcomm2'
and segment_type = 'index'
and file_id = 11
and block_id > 30336;
然後再收縮表空間
alter database datafile 'd:\ora_tablespace\gcomm2.dbf' resize 1000m;
執行成功,原先為7g多。
mysql收縮空間 Oracle表空間收縮方案
對於表空間收縮,oracle只提供擴大的功能,而不提供收縮。所以,要實現這樣的要求,就只能先建立乙個中間表空間,然後將待收縮表 應用背景 某些情況下,由於前期設計上沒有考慮全面,導致表空間預建太大,遠遠超出實際使用大小。於是,就出現了收縮表空間這樣的需求,即將這個表空間的占用空間進行收縮。處理方案 ...
收縮表空間大小
使用者所關聯的表都刪除了,但是表空間不能自己釋放。找到了下面一條sql語句,它的作用是查詢 拼接 出縮小表空間檔案 datafile 的語句,預設是計算所有的表空間檔案,給出可以釋放的大小。根據它給出的結果,執行類似 alter database datafile e oracle nnc data...
收縮臨時表空間
當排序操作 重建索引等大型操作無法在記憶體中完成時,臨時表空間將為排序提供便利。一般情況下臨時表空間為多個使用者,多個會話所共 享。不能為會話分批空間配額。臨時表空間耗用過度且在不能自動擴充套件的情形下將收到 ora 1652 unable to extend temp segment 錯誤.下面 ...