IT/Oracle2011. 4. 21. 19:36


CHAP 9장 언두 데이터 관리

이장의 내용

 - DML및 언두 데이터 생성 설명
 - 언두 데이터 모니터 및 관리
 - 언두 데이터와 리두 데이터이 차이점 설명
 - 언두 retention 구성
 - 언두 retention 보장
 - Undo Advisor사용

데이터 조작

데이터 조작어(DML)은 다음으로 구성된다.
  - INSERT, UPDATE, DELETE, MERGE

언두 데이터(이전 데이터)

 특징
 - 수정되기 전 원래 데이터의 복사본
 - 데이터를 변경하는 모든 트랜잭션에 대해 캡쳐됩니다.
 - 적어도 트랜잭션이 종료될 때까지는 보존됩니다.
 - 지원하는 작업
     롤백 작업, 읽기 일관성 및 Flashback Query, 실패한 트랜잭션 recovery

 다음에 의해 트랜잭션이 종료될 때까지 언두 정보를 보존합니다.

  - 유저의 트랜잭션 언두(롤백)
  - 유저의 트랜잭션 종료(커밋)
  - 유저 세션의 비정상적인 종료(롤백)
  - 종료 명령에 의한 유저 세션의 정상적인 종료(커밋)

트랜잭션 및 언두 데이터

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

언두 정보 저장

언두 정보는 Undo Segment에 저장되며 Undo Segment는 하나의 Undo Tablespace에 저장됩니다. 언두 테이블 스페이스의 특징은 다음과 같습니다.
  - 언두 세그먼트에만 사용됩니다.
  - recovery시 특별한 고려 사항이 있습니다.
  - 단일 instance와만 연관됩니다.
  - 여러 언두 테이블 스페이스 중 하나만 주어진 시간에 주어진 instance에 대해 현재 쓰기가 가능해야 합니다.
  - Undo segment는 SYS가 소유합니다. 세그먼트는 순환 버퍼처럼 사용되므로 각 세그먼트는 최소 두 개의 Extent를 갖습니다.

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

언두 모니터

  - 언두 테이블 스페이스의 사용 가능한 공간
  - "Snapshot too old"오류

보통 대부분의 경우 언두는 instance에 의해 자동으로 관리되므로 데이터 베이스 관리자(DBA)의 개입이 거의 필요하지 않습니다. 다음과 같은 경우 관리자의 개입이 필요할 수 있습니다.

  - undo space가 부족한 경우
  - 유저가 ORA-01555 snapshot too old오류 메세지를 수신하는 경우

언두 관리

언두 관리를 통해 다음 오류를 방지해야 합니다.
  언두 테이블 스페이스의 공간 오류 :
    - 언두 테이블 스페이스의 크기를 적절히 조정합니다.
    - 대형 트랜잭션을 주기적으로 커밋합니다.

 "Snapshot too old" 오류 :

    - 적절한 언두 retention 간격을 구성합니다.
    - 언두 테이블 스페이스의 크기를 적절히 조정합니다.
    - 언두 retention 보장을 고려합니다.

    자동 언두 관리 사용 :

     UNDO_MANAGEMENT = AUTO
     UNDO_TABLESPACE=UNDOTBS1

언두 Retention 구성

  UNDO_RETENTION은 이미 커밋된 언두 정보의 보관 기관을 초단위로 지정합니다.


 

Posted by 예영교육 연구소
IT/Oracle2011. 4. 21. 18:57


CHAP 8장 데이터 및 동시성 관리
 - SQL사용법을 통해 데이터 관리
 - PL/SQL 객체 식별 및 관리
 - 트리거 및 트리거 이벤트 설명
 - lock 충돌 모니터 및 해결

INSERT명령

 한번에 하나의 행을 생성
 다른 데이블의 여러 행을 삽입한다.


insert into dept_80 (select * from employees where department_id  = 80);

하나 이상의 테이블에서 다른 테이블로 데이터를 대량으로 로드

insert into just_names (first, last)
 (select first_name, last_name from employees);

UPDATE 명령

 테이블의 0개 이상의 행을 변경이 가능하다.

DELETE 명령

 테이블의 0개 이상의 행을 제거한다.

MERGE명령

 단일 명령으로 INSERT및 UPDATE를 수행이 가능하다.

COMMIT및 ROLLBACK명령

다음 명령은 트랜잭션을 완료하는 데 사용됩니다.
  COMMIT : 변경 사항을 영구적으로 적용
  ROLLBACK : 변경 사항을 되돌린다.

PL/SQL

  Oracle의 PL/SQL은 4세대 프로그래밍 언어로 다음과 같은 기능 제공
  - SQL의 절차적 확장
  - 플랫폼과 제품 간의 이식성
  - 높은 수준의 보안 및 데이터 무결성 보호
  - 객체 지향 프로그래밍 지원

PL/SQL 객체 관리

  DBA는 다음을 수행이 가능함.
  - 문제가 되는 PL/SQL 객체 식별
  - 적절한 PL/SQL 사용법 제안
  - DB로 PL/SQL 객체 로드
  - PL/SQL 개발자의 문제 해결 지원

PL/SQL객체

다양한 유형의 PL/SQL 데이터 베이스 객체가 있습니다.
  - 패키지
  - Package Body
  - Type Body
  - 프로시저
  - 함수
  - 트리거

Lock

 - 다중 세션에서 동일한 데이터를 동시에 변경하는 것을 방지합니다.
 - 주어진 명령문에 대해 가능한 가장 낮은 레벨에서 자동으로 획득됩니다.
 - escalate하지 않습니다.

SQL> LOCK TABLE employees IN EXCLUSIVE MODE;

이 명령을 통해 lock된 테이블에서 행을 갱신하려는 다른 트랜잭션은 lock요청을 실행한 트랜잭션이 완료될 때가지 대기해야 합니다.

 몇가지 Lock모드

  - ROW SHARE : lock된 테이블에 대한 동시 엑세스를 허용하지만 세션이 배타적 엑세스를 위해 전체 테이블을 lock하는 것은 금지합니다.
  - ROW EXCLUSIVE : ROW SHARE와 동일하지만 SHARD모드에서 lock를 금지합니다.
  - SHARE : 동시 query는 허용하지만 lock된 테이블에 대한 갱신은 금지합니다.

Enqueue 메커니즘
 - lock을 대기하는 세션
 - 요청된 lock모드
 - 세션에서 lock을 요청하는 순서
- lock요청은 자동으로 큐에 저장됩니다. lock을 보유하는 트랜잭션이 완료되면 대기 중인 다음 세션이 lock을 보유하게 됩니다.
- Enqueue 메커니즘은 lock이 요청된 순서와 요청된 lock모드를 추적합니다.
- lock을 이미 보유한 세션은 큐의 끝으로 이동하지 않고 해당 lock의 변환을 요청할 수 있습니다.

Lock 충돌 유발 원인

- 커밋되지 않은 변경 사항
- 장기 실행 트랜잭션
- 필요 이상으로 높은 lock레벨

Lock충돌 감지

Enterprise Manager의 Blocking Sessions페이지를 사용하여 lock충돌을 찾습니다.
Session ID링크를 눌러 실제 SQL문을 포함하여 lock세션에 대한 정보를 확인합니다.

Lock충돌 해결

  - lock을 보유하는 세션을 커밋 또는 롤백합니다.
  - 최후의 수단으로 lock을 보유하는 세션을 종료합니다.

세션이 종료된 유저를 다시 실행하려고 할때 다음과 같은 오류 발생

ORA-03135 : connection lost contact

SQL을 사용하여 Lock충돌 해결

STEP1
SQL> select sid, serial#, username
from v$session where sid in
(select blocking_session from v$session)

STEP2

SQL> alter system kill session '144,8982' immediate;

 

 

Posted by 예영교육 연구소