收縮表空間 ORA 03297錯誤解決

2021-09-02 09:01:28 字數 1643 閱讀 3846

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 錯誤.下面 ...