IT/DB / / 2023. 4. 17. 10:58

[Oracle 관리실무] Chapter 3. 트랜잭션

반응형

1. 트랜잭션

(1) 데이터베이스 트랜잭션의 구성요소

트랜잭션 : DDL(생성,변경), DCL(권한부여, 제거), DML(저장, 삭제, 갱신)의 하나 이상의 SQL이 수행된 후 마지막에 커밋(COMMIT) 또는 롤백(ROLLBACK)이 수행되는 단위

주의사항 : DDL(CREATE, ALTER, DROP, RENAME, TRUNCATE..), DCL(GRANT, REVOKE)은 자동으로 커밋(AUTO COMMIT)하기 때문에 문장 하나가 트랜잭션이 된다.

오라클에서는 여러 트랜잭션을 수행 중 하나의 DDL, DCL이 있을 시 이전 트랜잭션이 커밋이 된다.

 

2. 커밋과 롤백

(1) 커밋의 개념

커밋의 입력 기준으로 이전의 트랜잭션을 모두 정상적으로 처리하고 저장하였고 새로운 트랜잭션을 시작하겠다는 의미 즉, 트랜잭션의 끝과 새로운 시작.

커밋의 작업 순서

테이블의 데이터를 변경하는 SQL 수행

변경된 데이터를 데이터베이스에 적용하기 위해서 커밋 수행

 

주의사항 : 변경된 데이터에 대해 커밋 후 디스크에 존재하는 테이블로 바로 적용되는 것은 아니며 변경에 관한 로그가 적용되고 있지만 커밋과 동시에 변경된 로그를 디스크에 저장 함으로써 해당 테이블에 변경된 내용을 즉시 디스크로 적용한 것과 같은 작용을 하도록 구현하고 있다.

(2) 커밋 절차

커밋이 수행되는 각 단계에 대한 설명

SQL 수행

자동 커밋 또는 수동 커밋인지 따라 수행 절차가 변경되며 자동 커밋인 경우는 SQL 수행과 동시에 트랜잭션은 종료

수동 커밋의 경우 데이터의 정확성에 이상이 없다면 해당 작업자는 커밋을 수행

수동 커밋이 종료되면 해당 작업은 데이터베이스에 기록되며 작업은 종료

 

(심화)**

1. Memory영역에 트랜잭션 작업 수행

2. 커밋시 Redo Log에 저장

3. check-point 등 이벤트 발생 시 Redo Log와 디스크와의 동기화 실행(디스크 I/O발생)

//1개의 커밋
SQL > UPDATE TEST
SET COL1 = ‘AAA’
WHERE COL2 = ‘BBB’;
2Rows Updated
SQL > COMMIT;


//2개의 커밋
SQL > UPDATE TEST
SET COL1 = ‘AAA’
WHERE COL2 = ‘BBB’;
2Rows Updated
SQL > DELETE FROM TEST;
(문법의오류일 시 해당 문장만 오류, 세션의 오류일 시 커밋 전상태로 롤백)
SQL > COMMIT;

 

(4) 롤백

롤백 절차

1) 테이블의 데이터를 변경하는 SQL 수행

2) 변경된 데이터를 변경전 데이터로 복구하기 위해 롤백 수행

 

 

롤백의 정의

데이터의 정확성에 문제가 발생한 경우에 작업자가 롤백을 수행해야 할때, 작업을 취소하는 작업

커밋은 수행시간이 소요되지 않는 것이 일반적이다. 하지만 롤백은 실제 변경된 데이터를 변경전 데이터로 복구해야 되기 때문에 많은 시간이 소요된다. 따라서 많은 데이터를 변경한 후 롤백을 수행할 경우 시간 소요에 대한 고려를 충분히 해야한다.

 

(심화)**

1) A세션의 트랜잭션 발생

2) 메모리상의 데이터블록 헤더에 트랜잭션 정보 추가(A세션)

3) 롤백 세그먼트에 A세션이 준 변경정보를 저장.

4) 롤백 시 롤백 세그먼트 정보를 읽어 수행

5) 커밋 시 디스크 저장 후 롤백세그먼트, 트랜잭션 정보 삭제

 

(7) SAVEPOINT

커밋 이후 테이블 데이터를 변경하는 3개의 트랜잭션을 실행

SP1과 SP2로 데이터로 복구

SQL > UPDATE TEST1
SET COL1 = ‘AAA’
WHERE COL2 = ‘BBB’;
2Rows Updated


SQL > SAVEPOINT update_test
SQL > INSERT INTO TEST1
SELECT * FROM TEST2;
100Rows Inserted


SQL > ROLLBACK TO update_test
SQL > COMMIT

 TEST1 테이블에 갱신 작업 수행

TEST1 테이블의 갱신 작업에 대해 SAVEPOINT 지정

TEST1 테이블에 삽입 작업 수행

2 단계에서 지정한 SAVEPOINT까지 롤백 및 TEST1 테이블 커밋 수행

 

**savepoint 이름 확인하는법

사이트 참조 :

https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:11509899222180

 

3. 읽기 일관성

오라클 읽기 일관성 정책

▶커밋되지 않은 변경 데이터는 작업을 수행한 세션 외에는 조회 제한

▶커밋되지 않은 변경 데이터에 대해 해당 작업을 수행하지 않은 세션에게는 변경 이전 데이터를 결과로 추출

▶커밋된 데이터에 대해서는 모든 세션에게 결과로 추출

 

락(Lock)

데이터 정합성 보장 : 접근 제어를 통한 정합성 보장, 다른유저는 조회는 가능하지만 변경은 불가능.

사용자 락 실행 불필요 : 사용자에 의한 수동 락이 아니며 자동으로 필요에 의해 락 수행

트랜잭션이 수행되는 동안 락 수행 : 해당 트랜잭션이 종료하면 락은 자동 해제

행 수준의 락 수행 : 테이블 수준의 락이 아닌 행 수준의 락 수행, 테이블의 데이터중 일부만 변경한다면 해당 테이블 전체에 락을 수행하는것이 아니라 변경되는 행에만 락을 수행

 

Select * from EMP for update : 업데이트를 하기 전 조회(테이블 전체 락)

SQL > SELECT * FROM V$LOCK;
락 정보 확인
SQL > SELECT * FROM V$LATCH;
래치 정보 확인
SQL > SELECT * FROM V$LOCKED_OBJECT;
락이 수행되어 있는 테이블 등 확인

 

*LOCK : 데이터 자체에 접근 금지정책

*LATCH : 데이터에 접근하기 위해 사용되는 메모리들의 변화정보

(트랜잭션 리스트, 블럭 접근 대기 리스트..)

반응형

'IT > DB' 카테고리의 다른 글

DB - SQL Query 작성 1  (0) 2023.04.18
DB - SQL Query 작성 2  (0) 2023.04.18
DB - SQL Query 작성 3 & 연습문제  (0) 2023.04.18
[Oracle 관리실무] Chapter 2. SQL의 사용  (0) 2023.04.17
[Oracle 관리실무] Chapter 1. SQL과 데이터  (2) 2023.04.17
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유