오라클/Admin1

언두 데이터 관리

빵순이^^ 2010. 7. 22. 16:03

언두 데이터 특징

  • 수정되기 전 원래 데이터의 복사본
  • 데이터를 변경하는 모든 트랜잭션에 대해 캡쳐된다.
  • 적어도 트랜잭션이 종료될 때까지는 보존된다.
  • 지원 작업
    • 롤백
      - 언두에는 수정 전의 데이터가 저장되기 때문에 커밋되지 않은 데이터를 롤백할 수 있다.
    • 읽기 일관성
      - query가 시작된 시점의 데이터와 일치하는 결과를 제공한다.
    • Flashback Query
      - 어떤 목적을 가지고 과거 특정 시점의 데이터 버전을 요청하는 query
    • 실패한 트랜잭션 recovery
      - 유저가 트랜잭션 도중 세션이 비정상적으로 종료되는 경우, 혹은 instance crash가 발생하는 경우 recovery


트랜잭션 및 언두 데이터

  • 각 트랜잭션은 하나의 언두 세그먼트에만 할당된다.
  • 하나의 언두 세그먼트는 한번에 여러개의 트랜잭션을 처리할 수 있다.



언두 세그먼트 특징

  • SYS가 소유
  • 순환버퍼처럼 사용되므로 각 세그먼트는 최소 두개의 Extent를 같는다.
  • 최대 Extent 수의 기본값은 데이터 베이스 블록 크기에 따라 다르지만 매우 크다.(블록 크기가 8KB인 경우 32,765개)



언두 테이블스페이스의 특징

  • 언두 세그먼트에만 사용
  • instance가 mount 상태일 때만 recovery 가능
  • 단일 instance와만 연된된다.
  • 여러 언두 테이블스페이스 중 하나만 주어진 시간에 주어진 instance에 대해 쓰기가 가능해야 한다.



언두 데이터와 리두 데이터 비교

   언두  리두
 기록 내용  변경 사항을 언두하는 방법  변경사항을 재생성하는 방법
 사용 목적  롤백, 읽기 일관성  데이터베이스 변경 사항 롤포워드
 저장 위치  언두 세그먼트  리두 로그 파일
 보호 대상  다중 유저시스템에서 일관성 없는 읽기가 발생하지 않도록 보호  데이터 손실이 발생하지 않도록 보호



언두 관련 에러 및 해결방안

  • ORA-01555 : snapshot too old
    • 원인
      - 읽기 일관성에 필요한 언두 데이터가 사라져서 발생.
      - 공간의 부족으로 다른 transaction에 의해 덮어써져 undo data가 사라짐.

    • 해결방안
      - tablespace 공간의 확대
      - SQL query 튜닝
      - Undo Retention 보장을 고려 : 낮출수록 ORA-01555 에러가 커짐

  • ORA-01650 : unable to extend rollback segment
    • 원인
      - 유저가 변경사항을 롤백 할 때 언두 데이터에 필요한 공간이 언두 테이블스페이스에 부족한 경우

    • 해결방안
      - tablespace 공간의 확대
      - commit, rollback



언두 Retention 구성


UNDO_RETENTION은 이미 커밋된 언두 정보의 보관 기간을 초 단위로 지정한다.
AUTOEXTEND 언두 테이블스페이스의 경우 언두 retention 기간을 자동으로 튜닝한다.

  • 설정하는 경우

    • 언두 테이블스페이스에서 AUTOEXTEND 옵션이 활성화된 경우
    • LOB에 대해 언두 retention을 설정할 경우
    • retention을 보장하려는 경우

  • 언두 정보의 분류

    • 커밋되지 않은 언두 정보
      - 현재 실행 중인 트랜잭션을 지원하며 유저가 롤백하려는 경우나 트랜잭션이 실패한 경우 필요. 커밋되지 않은 언두 정보는 겹쳐쓰이지 않는다.
    • 커밋된 언두 정보
      - 실행 중인 트랜잭션을 지원하는 데는 더이상 필요하지 않지만 언두 retention 간격을 만족시키는 데에는 필요하다. 커밋된 언두 정보는 활성 트랜잭션이 공간 부족으로 인해 실패하는 일이 없도록 하는 한도 내에서 보존된다.
    • 만료된 언두 정보
      - 실행 중인 트랜잭션을 지원하는 데 더이상 필요하지 않다. 만료된 트랜잭션은 활성 트랜잭션에서 공간이 필요하면 겹쳐 쓰인다.



언두 Retention 보장


기본적으로 언두 작업은 undo space 부족으로 인해 활성 트랜잭션이 실패하지 않도록 아직 만료되지 않은 커밋된 트랜잭션을 겹쳐쓴다.
하지만 retention을 보장하면 언두 retention 설정으로인해 트랜잭션이 실패하더라도 언두 retention 설정으로 인해 트랜잭션이 실패하더라도 언두 retention 설정을 시행한다.

다음의 명령으로 retention을 보장하도록 언두 테이블스페이스 변경할 수 있다.

SQL> ALTER TABLESPACE undotbs1 RETENTION GUARANTEE;


retention이 보장된 테이블스페이스를 다음 명령으로 다시 일반설정으로 변경이 가능하다.

SQL> ALTER TABLESPACE undotbs1 RETENTION NOGUARANTEE;