'Rollback Segment'에 해당하는 글 2건


롤백 세그 먼트란?

우리가 데이터를 처리 하는데 데이타에 대한 변경 이전 롤백 이미지를 저장하는 것이다.

쉽게 이야기 하자면 트랜잭션동안 업데이트 인서트 딜리트 처리가 무지 많은 경우 하나의 처리가 잘 못되었을 경우

다시 원상태로 돌려야 하는데 그정보를 기억 하고 있는 뭐.. 간단히 말하자면 그렇다.

* 롤백 이미지 : 변경되기 전의 file, block의 ID 정보와 데이터.

 

* 트랜잭션 롤백

- 트랜젹션이 롤백되면 롤백 세그먼트의 이전 이미지를 이용하여 변경 전의 원래 데이타 값으로 복원

*인스턴스 롤백

- 트랜잭션 수행 시 정전 등 시스템 장애로 인해 인스턴스가 비정상적으로 종료되면 인스턴스가 재시작시 SMON에 의해 인스턴스 자동복구함.

 아래의 쿼리는 롤백 세그먼트의 사용상황을 보여주는 것이다.

/* ROLLBACK SEGMENT

의 사용상황 보기                          */
/* EXTENTS = 현재 할당된 EXTENT의 수                   */
/* EXTENDS = 마지막 트랜잭션에 의해 할당된 EXTENT의 수          */
SELECT SUBSTRB(A.SEGMENT_NAME, 1, 14) as "SEGMENT NAME",
       SUBSTRB(A.TABLESPACE_NAME, 1, 10) as "TABLESPACE NAME",
       TO_CHAR(A.SEGMENT_ID, '99999') AS "SEG ID",
       TO_CHAR(A.MAX_EXTENTS, '2010123199') AS "  MAX EXT",
       TO_CHAR(B.EXTENTS, '999999') as "EXTENTS",
       TO_CHAR(B.EXTENDS, '999999') as "EXTENDS",
       TO_CHAR((A.INITIAL_EXTENT + (B.EXTENTS-1)*A.NEXT_EXTENT)
            /1000000, '9,999.999') as "ALLOC(MB)",
       TO_CHAR(XACTS,'9,999') as "XACTS"
FROM DBA_ROLLBACK_SEGS A, V$ROLLSTAT B
WHERE A.SEGMENT_ID = B.USN(+)

ORDER BY 1;

 


WRITTEN BY
한량이

,


오라클을 사용하다 보면 ROLLBACK SEGMENT의 사용상황이 궁금 할 때가 많다.
 
많은 파일을 삭제 했다던가.. 기타 등등..

SELECT SUBSTRB(A.SEGMENT_NAME, 1, 14) as "SEGMENT NAME",
       SUBSTRB(A.TABLESPACE_NAME, 1, 10) as "TABLESPACE NAME",
       TO_CHAR(A.SEGMENT_ID, '99999') AS "SEG ID",
       TO_CHAR(A.MAX_EXTENTS, '2010123199') AS "  MAX EXT",
       TO_CHAR(B.EXTENTS, '999999') as "EXTENTS",
       TO_CHAR(B.EXTENDS, '999999') as "EXTENDS",
       TO_CHAR((A.INITIAL_EXTENT + (B.EXTENTS-1)*A.NEXT_EXTENT)
            /1000000, '9,999.999') as "ALLOC(MB)",
       TO_CHAR(XACTS,'9,999') as "XACTS"
FROM DBA_ROLLBACK_SEGS A, V$ROLLSTAT B
WHERE A.SEGMENT_ID = B.USN(+)
ORDER BY 1; 
 
-- EXTENTS = 현재 할당된 EXTENT의 수  
-- EXTENDS = 마지막 트랜잭션에 의해 할당된 EXTENT의 수  

아래는 일반 롤백 세그먼트 보기 쿼리 이다.
 
SELECT * FROM DBA_ROLLBACK_SEGS ; 
 

 


WRITTEN BY
한량이

,