您好,登錄后才能下訂單哦!
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、將目標表空間中的數據再遷移回新建的最終的表空間。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。