對於表空間收縮,oracle只提供擴大的功能,而不提供收縮。所以,要實現這樣的要求,就只能先建立乙個中間表空間,然後將待收縮表
應用背景:
某些情況下,由於前期設計上沒有考慮全面,導致表空間預建太大,遠遠超出實際使用大小。於是,就出現了收縮表空間這樣的需求,即將這個表空間的占用空間進行收縮。
處理方案:
對於表空間收縮,oracle只提供擴大的功能,,而不提供收縮。所以,要實現這樣的要求,就只能先建立乙個中間表空間,然後將待收縮表空間中的資料遷移到這個表空間下
處理方法:
1、找出該錶空間下的所有資料物件;
select segment_type, partition_name, segment_name from dba_segments;
2、建立目標空間(不強制建立,但是建議)。
create tablespace dbs_temp datafile 'd:\dbs_temp01.dbf' size 100m;
3、根據物件型別重建或轉移對應資料;
對於table:
alter table xx move tablespace dbs_temp;
對於partition table:
alter table xx move partition xx1 tablespace dbs_temp;
對於index:
alter index ixx rebuild tablespace dbs_temp;
對於lob欄位:
alter table xx move lob(col_name) store as (tablespace dbs_temp);
一般情況下,下面語句基本可以涵蓋所有的資料物件了:
select segment_type, segment_name, partition_name,
case segment_type
when 'table' then 'alter table ' || owner || '.' || segment_name || ' move tablespace dbs_temp;',
when 'index' then 'alter index ' || owner || '.' || segment_name || ' rebuild tablespace dbs_temp;',
when 'index partition' then 'alter index ' || owner || '.' || segment_name || ' rebuild tablespace dbs_temp;',
when 'table partition' then 'alter table ' || owner || '.' || segment_name || ' move partition ' || partition_name || 'tablespace dbs_temp;' sqltext
from dba_segments
where tablespace_name = 'fund_table'
and segment_type not like 'lob%';
下面是遷移lob欄位的
select table_name, column_name, 'alter table ' || owner || '.' || table_name || ' move lob(' || column_name || ') store as(tablespace dbs_temp);' sqltext
from dba_lobs
where tablespace_name = 'fund_table';
4、刪除清空後的表空間;
drop tablespace dbs_old including contents and datafiles;
下面步驟簡單了,就不一一枚舉。
5、如果對錶空間名稱有要求,則使用原來的表空間名再次建立乙個合適大小的表空間。
6、將目標表空間中的資料再遷移回新建的最終的表空間。
Oracle 表空間收縮
業務表頻繁寫入,刪除,清空後,表占用的空間不能夠及時釋放,需要通過如下方式手工釋放空間。更新業務表統計資訊 call dbms stats.gather table stats user name table name 收縮業務表空間占用 alter table enable row movemen...
mysql 表空間收縮 mysql壓縮表空間
repair table table name 修復表 optimize table table name 優化表 optimize local no write to binlog table tbl name tbl name 如果您已經刪除了表的一大部分,或者如果您已經對含有可變長度行的表 含...
mysql如何收縮表空間
引數 innodb file per table mysql5.6.6版本以後,預設設定為on,表示innodb表資料儲存在乙個以.ibd為字尾的檔案中 不建議設定為off,原因是 設定為off後,會將表資料儲存在系統共享表空間中,即使drop掉表,空間也不會被 磁碟空間不會減少,只會無腦增加 資料...