ただし、ASMはOPEN状態でできます。
縮小できるのは連続領域のみで、最後のBLOCK_ID以降が縮小可能領域です。
まずはデータファイル名を調べます。
データファイルの最終ブロックを検索します。$ sqlplus sys as sysdba SQL> set pages 10000 set lines 120 col tablespace_name for a20 col file_name for a50 col bytes for 999,999,999,999 select tablespace_name,file_name,bytes,status from DBA_DATA_FILES where tablespace_name='SSS01_I_DATA' order by tablespace_name,file_name; TABLESPACE_NAME FILE_NAME BYTES STATUS ---------------- ------------------------------------ -------------- --------- SSS01_I_DATA /DATA/DATABASE/SSS01_I_DATA_01.DBF 2,147,483,648 AVAILABLE SSS01_I_DATA /DATA/DATABASE/SSS01_I_DATA_02.DBF 2,147,483,648 AVAILABLE SSS01_I_DATA /DATA/DATABASE/SSS01_I_DATA_03.DBF 2,147,483,648 AVAILABLE SSS01_I_DATA /DATA/DATABASE/SSS01_I_DATA_04.DBF 2,147,483,648 AVAILABLE
これは、BLOCK_IDから始まる空き連続領域を意味します。col TABLESPACE_NAME for a20 select * from dba_free_space where tablespace_name = 'SSS01_I_DATA' order by file_id,block_id; TABLESPACE_NAME FILE_ID BLOCK_ID BYTES BLOCKS RELATIVE_FNO -------------------- ---------- ---------- ---------- ---------- ------------ SSS01_I_DATA 4 9 8388608 1024 4 SSS01_I_DATA 4 24201 1048576 128 4 SSS01_I_DATA 4 25353 1938817024 236672 4 SSS01_I_DATA 5 3465 2118123520 258560 5 SSS01_I_DATA 6 1929 65011712 7936 6 SSS01_I_DATA 6 33801 1869611008 228224 6 SSS01_I_DATA 7 137 1048576 128 7 SSS01_I_DATA 7 1417 2134900736 260608 7
FILE_ID = 4のデータファイルを例にとると、25353 - 1 = 25352ブロックまでは最低限必要なデータファイルのサイズです。
この例では1ブロック = 4KBの環境なので、25353 x 4KB = 約100MBまで縮小ができます。
縮小手順は次の通り。
alter database datafile '/DATA/DATABASE/SSS01_I_DATA_01.DBF' resize 100M
追記:2011/04/28
ASMでなくても、nomountではなくOPEN状態で実行できました。
10gとかからそうなったんでしょうか・・・。
0 件のコメント:
コメントを投稿