!!!概要 *表領域を縮小したい。 *通常はエクスポート・インポートする。 *パーティション表の場合は... **インポート前にパーティション表を作成する?? *Oracle Enterprise Manager では測定値のテーブル MGMT_METRICS_* がパーティション表 *OEM がデータが肥大してしまう。パッチを当てた。データファイルは増えなくなった。 *パーティション数が異常に多い。 *SYSMAN.MGMT_METRICS_RAW: 11839 *今回はエキスポート・インポートできない。 !手順 *最終に近いエクステントに含まれるデータを別領域に移動 *表領域を縮小 *別領域に移動したデータを元の表領域に戻す !!!作業 !移動するオブジェクトを把握 *最終エクステントに近いテーブル・インデックス・パーティションを把握 *今回は最終1000ブロック select e.owner, e.segment_name, e.partition_name, e.segment_type, e.block_id, e.blocks from dba_extents e inner join dba_data_files f on e.file_id = f.file_id where file_name = '/opt/oracle/oradata/emrep/emrep.dbf' and e.block_id > ( select max( e.block_id) -1000 from dba_extents e, dba_data_files f where e.file_id = f.file_id and file_name = '/opt/oracle/oradata/emrep/emrep.dbf' ) order by e.block_id desc ; !データの移動 *テーブルの場合 alter table sysman.mgmt_task_qtable move tablespace MGMT_TABLESPACE2; *インデックスの場合 alter index sysman.MGMT_ECM_GEN_SNAP_IDX3 rebuild tablespace mgmt_tablespace2; *パーティション化されたテーブルの場合 alter table sysman.mgmt_metrics_raw move partition "2009-09-06 07:00" tablespace mgmt_tablespace2; !サイズの把握 select max( e.block_id) from dba_extents e, dba_data_files f where e.file_id = f.file_id and file_name = '/opt/oracle/oradata/emrep/emrep.dbf' *543809 *543809*8192/1024/1024=4248.507 *切り上げて 4249M !データファイルの縮小 alter database datafile '/opt/oracle/oradata/emrep/emrep.dbf' resize 4249M *縮小できた