サイズが90GBのOracle 12cテーブルスペースがあります。ほぼ40GBは無料です。
TB1 54 % 90880 41383 49497 46 98304 50 % ONLINE PERMANENT
テーブルスペースには3つのデータファイルがあります。
E:\Oracle\ORADATA\xx\TB1.DBF 33554416 True 100
F:\Oracle\ORADATA\xx\TB1_2.DBF 33554416 True 100
G:\Oracle\ORADATA\xx\TB1_3.DBF 25344000 True 100
テーブルスペースを縮小して、空き40GB(ディスク上のデータファイル)を再利用するにはどうすればよいですか?ダウンタイムがありません。
EdStevensのコメントに同意しますが、他にもいくつかのアイデアがあります。
AskTom Webサイト には、既存のデータファイルをどれだけ縮小できるかを正確にリストするスクリプトがあります。
それでも大きな節約が得られない場合は、そのテーブルスペースで最大のインデックスを見つけて再構築できます。これは一時的な解決策であり、インデックスは最終的に再び大きくなりますが、予算が今より多くのディスク領域を許可しない場合は、次のクエリを試してください。
select segment_name, sum(bytes)/1024/1024 as mb
from dba_segments
where tablespace_name='TB1' and segment_type like 'INDEX%'
group by segment_name
order by mb;
次に、ind_big_stuff
という名前のインデックスが巨大である場合、
alter index ind_big_stuff rebuild;
また、アプリケーションが商用アプリケーションの場合、行がゼロのテーブルがいくつかある場合があります。または、パーティション化されたテーブルがある場合、行がゼロのパーティションがいくつかある可能性があります。それらに割り当てられたスペースをドロップすることができます
exec dbms_space_admin.drop_empty_segments(schema_name=>'HR');
パーティションテーブルや、行がないことがわかっているテーブルなどに対して、alter tableステートメントでsegment creation deferred
句を使用できます。
このOracleのメンテナンスの問題に対処する方法は5つあると思います。
私はこれに対する答えを検索し、最終的にそれを見つけました:
PURGE TABLESPACE table_space_name;
ALTER TABLESPACE table_space_name COALESCE;
ALTER DATABASE DATAFILE '/u02/Oracle/rbdb1/file1.dbf' RESIZE 100M;
PS:ダウンタイムについては不明です。誰か確認してください。
PPS:TEMPテーブルスペースの場合:
ALTER TABLESPACE TEMP SHRINK SPACE ;
(オプションでKEEP 512M
または同様のものを追加)ALTER DATABASE TEMPFILE '/u02/Oracle/rbdb1/temp01.dbf' RESIZE 512M;
以下のスクリプトを実行すると、それぞれのテーブルスペースのデータファイルから未使用のスペースが解放されます。
column value new_val blksize
select value from v$parameter where name = 'db_block_size'
/
set pages 0
set lines 300
column cmd format a300 Word_wrapped
select 'alter database datafile '''||file_name||''' resize ' ||
ceil( (nvl(hwm,1)*&&blksize)/1024/1024 ) || 'm;' cmd
from dba_data_files a,
( select file_id, max(block_id+blocks-1) hwm
from dba_extents
group by file_id ) b
where a.file_id = b.file_id(+)
and ceil( blocks*&&blksize/1024/1024) -
ceil( (nvl(hwm,1)*&&blksize)/1024/1024 ) > 0
/
https://orahow.com/reclaiming-unused-space-in-datafiles/ で詳細を確認してください