- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
!!!概要
*表領域を縮小したい。
*通常はエクスポート・インポートする。
*パーティション表の場合は...
**インポート前にパーティション表を作成する??
*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'
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
*縮小できた