Oracle

게시글 보기
작성자 유건데이타 등록일 2015-05-14
제목 ROLLBACK SEGMENT 크기를 증가하여 재생성하는 방법
ROLLBACK SEGMENT 크기를 증가하여 재생성하는 방법
===============================================

ROLLBACK SEGMENT 는 LONG TRANSACTION 을 수행하면 크게 되는 경우가 있다.
확장된 ROLLBACK SEGMENT 는 줄어들지 않게 되므로(OPTIMAL을 지정하지 않는 경우)
주기적으로 재생성하여 TABLESPACE의 FREE SPACE 영역을 확보한다.


1. ROLLBACK SEGMENT 를 OFFLINE 시킨다.

ROLLBACK SEGMENT 를 OFFLINE
시키기 위해서는 그 ROLLBACK SEGMENT 가 INACTIVE 상태이여야 하므로 모든
TRANSACTION 을 종료하고 ROLLBACK SEGMENT r01-r04를 OFFLINE 시켜야 한다.

SELECT usn, xacts FROM V$ROLLSTAT;
SELECT * FROM v$rollname;

을 하여 OFFLINE하고자 하는 ROLLBACK SEGMENT의 XACTS 컬럼을 확인하여
이 값이 0일때만 OFFLINE 하도록 한다.

XACTS는 그 ROLLBACK SEGMENT를 현재 사용하고 있는 ACTIVE TRANSACTION의
수이다.


SQL> alter rollback segment r01 offline;
SQL> alter rollback segment r02 offline;
** r03 ~ r04 도 같은 방법으로 OFFLINE 함.

2. ROLLBACK SEGMENT를 DROP한다.

SQL> drop rollback segment r01;
SQL> drop rollback segment r02;
** r03 ~ r04 도 같은 방법으로 DROP 함.

3. ROLLBACK SEGMENT 를 생성한다. SYSTEM ROLLBACK 이외에 모든 ROLLBACK
SEGMENT 를 DROP 한 경우는 SYSTEM TABLESPACE 에 ROLLBACK SEGMENT 를 한 개
이상 생성 후에 NON-SYSTEM TABLESPACE에 ROLLBACK SEGMENT를 생성해야 한다.

SQL> create rollback segment r0;
SQL> alter rollback segment r0 online;

SQL> create rollback segment r01 tablespace rbs
storage(initial 512k next 512k minextents 2);

SQL> create rollback segment r02 tablespace rbs
storage(initial 512k next 512k minextents 2);
** r03 ~ r04 도 같은 방법으로 생성함.


RBS TABLESPACE도 재생성하여 datafile 크기도 증가시켜 다시 만들고자 한다면
다음과 같이 한다.

----------------------------------------------------------------
1. RBS TABLESPACE를 DROP 하기 위해서는 1-2 과 같이 ROLLBACK SEGMENT를
전부 OFFLINE한다.
ROLLBACK SEGMENT 를 OFFLINE할 수 있는 다른 방법은
ORACLE_HOME/dbs/init.ora 화일의 rollback_segments=r01..
부분을 #으로 COMMENT 처리하고 DB를 다시 startup 시키면 된다.

SQL> drop rollback segment r01;
SQL> drop rollback segment r02;
** r03 ~ r04 도 같은 방법으로 DROP 함.

2. RBS TABLESPACE를 DROP 한다.

SQL> drop tablespace RBS including contents;
SQL> ! rm /oracle/dbs/rbs.dbf

3. RBS TABLESPACE 를 다시 생성한다.

SQL> create tablespace RBS datafile '/../oracle/dbs/rbsORA7.dbf'
size 50M default storage(initial 512k next 512k);

4. ROLLBACK SEGMENT r0, r01-r04 를 생성한다.

SQL> create rollback segment r0;
SQL> alter rollback segment r0 online;

SQL> create rollback segment r01 tablespace RBS;
** r02 - r04 도 같은 방법으로 생성한다.

5. 위에서 rollback_segments = parameter를 comment(#) 처리하였다면,
다음과 같이 풀고 DB 를 다시 startup한다.
만약 # 처리하지 않고 모두 offline 명령을 수행한 것이라면 이 작업은 필요없다.

initSID.ora file 내에서
rollback_segments=(r01,r02,r03,r04)

svrmgrl
SVRMGR> shutdown
SVRMGR> startup



출처 : Technical Bulletin (Korean)
Comment
등록된 코멘트가 없습니다.