liguofeng29’s blog

個人勉強用ブログだっす。

Oracle - UNDO切り替え(縮小目的)

 ■作業の流れ

1. UNDOアドバイザを使用して、推薦UNDO表領域サイズを求める
2. 既存UNDO表領域作成DDLから、UNDOTBS2を推薦サイズで作成する
3. UNDO表領域を切り替える
4. 既存UNDO表領域を使用するトランザクションが終了するまで待機
5. 既存UNDO表領域を削除する

■ UNDO表領域を作成
・既存のUNDO表領域作成DDL確認
select DBMS_METADATA.GET_DDL('TABLESPACE','UNDOTBS1') from dual;
・既存DDLを基に、UNDOTBS2作成

■UNDO表領域を切替え
ALTER TABLESPACE UNDOTBS2 ONLINE;
ALTER SYSTEM SET UNDO_TABLESPACE=UNDOTBS2 SCOPE=BOTH;
・既存UNDO表領域を監視します
トランザクションが存在する場合にはPENDING ONLINEになります。
これがOFFLINEになるまで、すなわち以下のSQL文でセグメントが
表示されなくなるまで、時間をかけて監視します。
select dr.tablespace_name, dr.segment_name, vr.status, dr.status
from dba_rollback_segs dr, v$rollstat vr
where dr.segment_id=vr.usn;
・データファイルを削除します
drop tablespace UNDOTBS1 including contents and datafiles;

■UNDOTBS1再作成&切り替え
CREATE UNDO TABLESPACE "UNDOTBS1" DATAFILE
'/path/undotbs01.dbf' SIZE 6000M
AUTOEXTEND ON NEXT 5242880 MAXSIZE 32767M
BLOCKSIZE 8192
EXTENT MANAGEMENT LOCAL AUTOALLOCATE;
ALTER TABLESPACE UNDOTBS1 ONLINE;
ALTER SYSTEM SET UNDO_TABLESPACE=UNDOTBS1 SCOPE=BOTH;
・UNDOTBS2表領域監視 & 削除
トランザクションが存在する場合にはPENDING OFFLINEになります。
これがOFFLINEになるまで、すなわち以下のSQL文でセグメントが
表示されなくなるまで、時間をかけて監視します。
select dr.tablespace_name, dr.segment_name, vr.status, dr.status
from dba_rollback_segs dr, v$rollstat vr
where dr.segment_id=vr.usn;
・データファイルを削除します
drop tablespace UNDOTBS2 including contents and datafiles;
select tablespace_name,file_name from dba_data_files;