トップ 一覧 検索 ヘルプ RSS ログイン

Oracle 表領域の縮小の変更点

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