Akashic Records

PLT 4.4 데이터베이스 TRANSACTION 본문

오래된글/DataBase

PLT 4.4 데이터베이스 TRANSACTION

Andrew's Akashic Records 2018. 4. 17. 15:44
728x90

PLT 4.4 데이터베이스 TRANSACTION

ORACLE SERVER는 TRANSACTION을 근거로 하는 데이터의 일관성을 보증한다.

TRANSACTION은 데이터 변경시에 보다 나은 융통성과 제어를 제공하며 그들은 사용자 프로세스 실패나 시스템 실패 같은 이벤트에서 데이터의 일관성을 책임집니다. TRANSACTION은 데이터를 일관되게 변경하는 DML문장으로 구성됩니다. 예를 들면, 하나의 예금에 대한 차변과 똑같은 금액이 있는 다른 예금에 대한 대변을 포함해야 하는 두 개의 예금 사이에 예금을 전달합니다. 액션은 둘 모두 실패하거나 둘 모두 성공해야 합니다. 대변은 차변 없이는 인증될 수 없습니다.

TRANSACTION의 유형

유 형

설    명

DML

작업의 논리적인 단위로 취급하는 임의의 수의 DML문장으로 구성됩니다.

DDL

오직 하나의 DDL문장으로 구성합니다.

DCL

오직 하나의 DCL문장만으로 구성합니다.


TRANSACTION의 시작과 종료

TRANSACTION의 시작

실행 가능한 SQL문장이 제일 처음 실행될 때

TRANSACTION의 종료

1.       COMMIT이나 ROLLBACK

2.       DDL이나 DCL문장의 실행(자동 COMMIT)

3.       기계 장애 또는 시스템 충돌(crash)

4.       deadlock 발생

5.       사용자가 정상 종료

COMMIT과 ROLLBACK의 장점

1.       데이터의 일관성 제공

2.       데이터를 영구적으로 변경하기 전에 데이터 변경을 확인하게 한다.

3.       관련된 작업을 논리적으로 그룹화 할 수 있다.

TRANSACTION 제어

명령어

설    명

COMMIT

모든 미결정 데이터를 영구적으로 변경 함으로서 현재TRANSACTION을 종료합니다.

SAVEPOINT name

현재 TRANSACTION 내에 savepoint를 표시합니다.

ROLLBACK

[TO SAVEPOINT name]

ROLLBACK은 모든 미결정 데이터 변경을 버림으로써 현재의TRANSACTION을 종료합니다.ROLLBACK TO SAVEPOINT name은savepoint와 모든 연이은 변경을 버립니다.


하나의 TRANSACTION이 끝난 후에 다음의 실행 가능한 SQL문장은 자동적으로 다음TRANSACTION을 시작할 것이다. DDL과 DCL은 자동적으로 COMMIT되므로 TRANSACTION을 임시적으로 종료한다. SAVEPOINT는 ANSI 표준 SQL이 아니다.


암시적 TRANSACTION 처리

1.   자동 COMMIT은 다음의 경우 발생

A.   DDL,DCL문장이 완료시

B.   명시적인 COMMIT이나 ROLLBACK없이 SQL*Plus를 정상 종료

2.   자동 ROLLBACK은 다음의 경우 발생

A.   SQL*Plus를 비정상 종료 또는 시스템 실패

COMMIT이나 ROLLBACK 이전의 데이터 상태

1.       데이터 이전의 상태로 북구가 가능하다.

2.       현재 사용자는 SELECT문장으로 DML작업의 결과를 확인할 수 있다.

3.       다른 사용자는 SELECT문장으로 현재 사용자 사용한 DML문장의 결과를 확인할 수 없다.

4.      변경된 행은 LOCK이 설정되어서 다른 사용자가 변경할 수 없다.

COMMIT이후의 데이터 상태

1.       데이터베이스에 데이터를 영구적으로 변경

2.       데이터의 이전 상태는 완전히 상실

3.       모든 사용자가 결과를 볼 수 있다.

4.       변경된 행의 LOCK이 해제되고 다른 사용자가 변경할 수 있다.

5.       모든 SAVEPOINT는 제거된다.

ROLLBACK이후의 데이터 상태

1.       데이터의 변경이 취소

2.       데이터의 이전 상태로 복구

3.       변경된 행들의 LOCK이 해제되어 다른 사용자가 변경할 수 있다.

SAVEPOINT로 변경을 ROLLBACK

1.       SAVEPOINT를 사용하여 현재 TRANSACTION내에 Point를 생성한다

2.       ROLLBACK TO SAVEPOINT명령을 사용하여 Point까지 ROLLBACK

SQL> UPDATE emp

 2 SET deptno = 30

 3 WHERE empno = 7788;

1 row updated.

SQL> SAVEPOINT point_1;

Savepoint created.

SQL> UPDATE emp

 2 SET job = 'MANAGER';

14 rows updated.

SQL> ROLLBACK TO SAVEPOINT point_1;

Rollback complete.


문장 단위 ROLLBACK

1.       실행 동안에 단일 DML문장이 실패하면 단지 그 문장만을 ROLLBACK한다.

2.       ORACLE SERVER은 암시적 SAVEPOINT를 구현 한다.

3.       모든 다른 변경들은 유지된다.

4.       사용자는 COMMIT이나 ROLLBACK을 실행하여 명시적으로 TRANSACTION을 종료한다.

PLT 4.5 읽기 일관성

  • 읽기 일관성은 항상 데이터의 검색이 일관되게 보증한다.

  • 사용자에 의해 행해진 변경은 다른 사용자에 의해 행해진 변경과 충돌하지 않는다.

  • 데이터를 똑같게 보증한다.

Locking

  • 동시 TRANSACTION 사이의 상호 작용이 파괴되지 않도록 막아 줍니다.

  • 사용자 액션을 요구하지 않습니다.

  • 자동적으로 낮은 LEVEL의 제약 조건을 사용합니다.

  • TRANSACTION이 지속되도록 합니다.

  • 두 가지 기본적인 모드를 가집니다.

LOCK MODE

설     명

Exclusive

자원이 공유되는 것을 막아 줍니다. 자원을 배타적으로 lock하는 첫 번째TRANSACTION은 배타적 잠금이 해제되기 전까지는 자원을 변경할 수 있는 유일한 TRANSACTION입니다.

Share

자원이 공유되도록 허용합니다. 데이터를 읽는 다중 사용자는 데이터를 공유하고, writer에 의해 동시 액세스 되는 것을 막기 위해 공유 잠금을 유지 합니다. 똑같은 지원상에서 여러 개의 TRANSACTION은 공유 잠금을 구할 수 있습니다.


728x90

'오래된글 > DataBase' 카테고리의 다른 글

PLT 5.5 단일 행 함수(Single Row Function)  (0) 2018.04.17
PLT 5.2 특정 행의 검색  (0) 2018.04.17
PLT 3.3 Role  (0) 2018.04.17
PLT 2.5 SYNONYM  (0) 2018.04.17
PLT 2.4 SEQUENCE  (0) 2018.04.17
Comments