Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

DBDBDEEP

언두 데이터 관리 본문

Oracle ADMIN

언두 데이터 관리

Kihwane 2022. 7. 21. 16:33

목차

1. 언두데이터란?

2. 언두데이터 테이블 스페이스

3. 언두관리

언두 테이블스페이스.

 

1. 언두데이터란?

트랜잭션 작업 기록 (데이터가 변경되는 경우 undo값을 저장)

데이터를 변경하는 모든 트랜잭션에 대해 캡처된다.

    ┗━> undo data를 캡처하면 커밋되지 않은 데이터를 롤백할 수 있다.

적어도 트랜잭션이 종료될 때까지는 보존된다.

Extent 공간 부족 시 트랜잭션 종료 된 데이터를 Overwrite한다.

 

 지원하는 작업

롤백 작업

읽기 일관성 query

③ Oracle Flashback Query, Transaction, Table

실패한 트랜잭션 recovery

 

  undo 정보 보존 (트랜잭션 종료 전에 undo data를 삭제하지 않는다)

유저의 트랜잭션 언두 (transaction rollback)

유저의 트랜잭션 종료 (transaction commit)

유저의 DDL문 실행 (create, drop, rename, alter)시 현재 트랜잭션에 DML 문이

   있을 경우 우선 commit한 다음 DDL을 새로운 transaction에 실행한다.

유저 세션의 비정상적 종료 (transaction rollback)

종료 멍령에 의한 유저 세션의 정상적인 종료 (transaction commit)

 

 트랜잭션 및 언두 데이터

- 각 트랜잭션은 하나의 언두 세그먼트에만 할당된다.

┗━> 트랜잭션이 진행되는 동안 데이터가 변경되면 원래 값이 언두 세그먼트에 복사된다.

┗━> v$transaction : 어느 트랜잭션이 어느 언두 세그먼트에 할당되었는지

- 하나의 언두 세그먼트는 한 번에 여러 개의 트랜잭션을 처리할 수 있다.

 

언두 세그먼트 (Undo Segment)

- 트랜잭션을 지원하는 데 필요한 경우 데이터베이스 서버에서 자동으로 생성되는 세그먼트

- 언두 정보만을 저장하고 있다.

- 필요한 경우 자동으로 확장, 축소되며 할당된 트랜잭션에 대해 순환 저장 버퍼처럼 사용

  ┗━> 순환 버퍼이므로 각 세그먼트는 최소 두 개의 Extent를 갖는다.

- 트랜잭션이 완료되거나 모든 공간이 사용될 때까지 트랜잭션은 언두 세그먼트에 Extnet  채우는데, Extent가 가득 차서    더 많은 공간이 필요한 경우 트랜잭션은 세그먼트에 있는 다음 Extnet에서 다시 공간을 얻는다.

- 모든 Extent 사용 후 트랜잭션은 첫 번째 Extent로 다시 래핑하거나 언두 세그먼트에 Extent 할당을 요청한다.

 

언두 세그먼트 종류

① SYSTEM

- 시스템 테이블스페이스에 존재하는 객체에서 사용

 

② Non-SYSTEM

- 시스템 테이블스페이스가 아닌 다른 테이블스페이스에 존재하는 객체에서 사용

 

③ Deferred

- 테이블스페이스를 offline immediateoffline 시켰거나, recovery가 진행 중일 때 사용

 

2. 언두데이터 테이블 스페이스

언두 정보 저장

- 언두 정보는 언두 세그먼트에 저장

- 언두 세그먼트는 하나의 언두 테이블스페이스에 저장된다.

 

언두 테이블스페이스

- 언두 세그먼트에만 사용된다. (테이블 등의 다른 세그먼트 생성 X)

- Recovery 시 특별한 고려 사항이 있다.

- 데이터베이스에 의해 자동으로 관리된다.

- 단일 Instance와만 연관된다.

-  Instance당 하나의 undo tablespace만 사용할 수 있다.

   (여러 개의 undo tablespace를 만들어둔 후 하나의 instance에 하나씩 사용)

 

◆ UNDO TABLESPACE 확인

 select tablespace_name

 from dba_tablespaces

 where contents = ‘UNDO’;        -> 결과 : UNDOTBS1

 

┗━> undo tablespace 생성

create undo tablespace undo2

datafile ‘/home/oracle/labs/undo2.pdf’ size 10m;

 

Undo tablespace 생성 후 변경

- Undo tablespace는 하나의 Instance에서 하나만 사용할 수 있다.

┗━> 현재 undo tablesapce로는 UNDOTBS1을 사용하고 있다.

 undo2 테이블은 생성만 되었고 사용 중이 아님을 알 수 있다.

┗━> Instance에 하나의 undo tablespace만 사용 가능

┗━> ALTER system set undo_tablespace = undo2 명령을 통해 변경이 가능하다.

 

 

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

  Undo data Redo data
기록 내용 변겅 사항을 undo하는 방법 변경 사항을 재생성하는 방법
사용 목적 Rollback, Flashback, 읽기 일관성 데이터베이스 변경사항 롤포워드
저장 위치 언두 세그먼트 리두 로그 파일

- 커밋 프로세스는 트랜잭션의 변경 사항이 메모리가 아닌 디스크에 영구 저장되는 리두 로그 파일에 기록되었는지

  검증한다.

- 테이블의 블록이 실제로 저장되는 데이터 파일에 변경사항이 아직 기록되지 않은 경우에는

  지속 리두 로그에 쓰는 것만으로도 데이터베이스의 일관성이 보장된다.

 

3. 언두 관리

- 오라클 데이터베이스 서버는 자동 언두 관리를 통해 모든 세션에 대한 전용 언두

  테이블스페이스에서 언두 정보 및 언두 영역을 자동화된 방식으로 관리하는데,

  이는 모든 세션에 대해 적용된다.

- 장기 실행 Query를 충족하도록 autoextend 테이블스페이스 자체 튜닝

┗━> 고정 크기 언두 테이블스페이스의 데이터베이스는 Retention을 최적화하도록 튜닝

 

- Flashback 작업을 사용할 경우 DBA가 일부 작업을 직접 수행해야 할 수도 있다.

언두 Retention 구성 : 공간의 여유가 있어야 한다.

언두 테이블스페이스를 고정 크기로 변경 : self-tuning이 정확해지도록

공간 및 ‘Snapshot too old’ 오류 방지

ORA-01555 에러는 쿼리를 수행하는 동안 발생하는 다른 Transaction들에 의해 UNDO 세그먼트(롤백 세그먼트) 덮어씌워져서 발생한다.

 

UNDO Parameter

① undo_tablespace : 언두 테이블 스페이스 지정

② undo_management  : 언두 데이터 및 언두 영역 관리 완전 자동화 (auto)

③ undo_retention : 이미 커밋된 언두 정보를 보존해야 하는 기간을 초 단위로 지정

┗━> 커밋은 했지만 설정된 기간동안 overwrite하지 않는다.

 

Retention을 보장받을 수 있는 경우

1) datafile 레벨에서 AUTOEXTENED 옵션을 활성화한 경우

2) 언두 테이블 사이즈를 크게

3) retention gurantee 키워드 붙이기

 

언두 Retention 보장

- 기본적으로 언두 작업은 언두 영역 부족으로 인해 활성 트랜잭션이 실패하도록 하기 보다는

  아직 만료되지 않은 커밋된 트랜잭션의 언두 정보를 덮어쓴다.

- Rentention을 보장하면 트랜잭션이 실패하더라도 언두 retention 설정을 시행한다.

┗━> alter tablespace ___ retention guarantee; // retention 보장

┗━> alter tablespace ___ retention noguarantee; // retention 보장 X

 

임시 언두 (Temporary Undo)

 

Global Temporary Table

- Data가 트랜잭션 또는 세션 종료시 자동 삭제됨

- 테이블 정의는 남아 있음

 

1) 트랜잭션 종료시 삭제

cleate global temporary table t1(

id number,

pw varchar2(10))

on commit delete rows;

 

2) 세션 종료시 삭제

cleate global temporary table t2(

id number,

pw varchar2(10))

on commit preserve rows;

 

- 임시 테이블은 중간 결과를 위한 스크래치 영역으로 널리 사용된다.

- 일반 테이블을 변경하는 것 보다 훨씬 빠르다.

┗━> 변경 사항에 대해 직접적으로 생성되는 redo 항목이 없기 때문

┗━> 임시 테이블의 작업에 대한 언두는 리두 로그에 계속 로깅된다.

 

12c 이전에는 임시 테이블의 언두 정보를 리두 로그에 로깅하여 로그가 남았지만

12c 부터는 임시 테이블 트랜잭션에서 생성된 언두를 임시 테이블스페이스에서 직접 별도의

언두 스트림에 저장하여 해당 언두가 리두 스트림에 로깅되는 것을 방지할 수 있다.

┗━> 임시 언두 모드

┗━> alter session set temp_undo_enabled = true

┗━> alter system set temp_undo_enabled = true 를 통해 활성화

 

임시 언두의 장점

언두 테이블스페이스에 저장되는 언두의 양을 감소시킴

┗━> 언두의 양이 적을수록 언두 레코드에 대한 retention이 커질 수 있다.

┗━> redo log에 저장되는 것이 아닌 temp log에 저장된다.

리두 로그의 크기를 감소시킨다.

┗━> 데이터가 적기 때문에 성능이 향상된다.

 

V$TEMPUNDOSTAT view

- 10분 간격으로 Instance에서 수집된 여러 통계가 있다.

'Oracle ADMIN' 카테고리의 다른 글

Oracle 데이터베이스 감사(Audit) 구현  (0) 2022.07.24
Oracle 데이터 동시성 관리, Lock  (0) 2022.07.24
Oracle 공간관리 2  (0) 2022.07.21
Oracle 공간 관리  (0) 2022.07.03
Oracle 데이터베이스 저장 영역 구조  (0) 2022.07.03