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
Tags
more
Archives
Today
Total
관리 메뉴

걸음마부터 달리기

DB-SQL 4절 본문

카테고리 없음

DB-SQL 4절

성추 2024. 7. 17. 17:54

트랜잭션

트랜잭션은 데이터베이스의 논리적 연산단위이다. 트랜잭션(TRANSACTION)이란 밀접히 관련되어 분리될 수 없는 한 개 이상의 데이터베이스 조작을 가리킨다. 하나의 트랜잭션에는 하나 이상의 SQL 문장이 포함된다. 트랜잭션은 분할할 수 없는 최소의 단위이다. 그렇기 때문에 전부 적용하거나 전부 취소한다.

 

TCL ( TRANSACTION CONTROL LANG)

결국엔 하나의 트랜잭션을 수행시킨 후 커밋을 치던지 , 롤백을 하던지 , 롤백을 할때는 특정 DB의 저장지점으로 돌려놔야 한다. 이때의 저장점(SAVEPOINT) 가 필요하다. 이들을 수행하는 명령어이다.

 

COMMIT

입력한 자료나 수정한 자료에 대해서 또는 삭제한 자료에 대해서 전혀 문제가 없다고 판단되었을 경우 COMMIT 명령어를 통해서 트랜잭션을 완료할 수 있다. (DB에 업데이트 할 수 있다.)

COMMIT이나 ROLLBACK 치기 전에는 상황이 아래와 같다.

 

- 단지 메모리 BUFFER에만 영향을 받았기 때문에 데이터의 변경 이전 상태로 복구 가능하다. 

- 현재 사용자는 SELECT 문장으로 결과를 확인 가능하다. (내 메모리의 상황이니)

- 다른 사용자는 현재 사용자가 수행한 명령의 결과를 볼 수 없다.

- 변경된 행은 잠금(LOCKING)이 설정되어서 다른 사용자가 변경할 수 없다. (조회는 가능)

Oracle INSERT INTO PLAYER (PLAYER_ID, TEAM_ID, PLAYER_NAME, POSITION, HEIGHT, WEIGHT, BACK_NO) VALUES ('1997035', 'K02', '이운재', 'G K', 182, 82, 1); 1개의 행이 만들어졌다. 
COMMIT; 커밋이 완료되었다.

COMMIT이나 ROLLBACK 친 이후에는 상황이 다음과 같다.

- 데이터에 대한 변경 사항이 데이터베이스에 반영된다. 

- 이전 데이터는 영원히 잃어버리게 된다. 

- 모든 사용자는 결과를 볼 수 있다.

 - 관련된 행에 대한 잠금(LOCKING)이 풀리고, 다른 사용자들이 행을 조작할 수 있게 된다.

 

COMMIT , ROLLBACK 에 대한 3가지 접근

1) AUTO COMMIT 

-SQL 하나를 수행하면 자동으로 DBMS가 COMMIT , 실패하면 ROLLBACK 쳐줌

 

2) 암시적 트랜잭션(오라클)

트랜잭션 시작으로 자동으로 DBMS가 처리하고, 트랜잭션의 끝만 사용자가 명시하는 방법이다.

사용자는 트랜잭션이 정상적으로 끝났다고 생각하면 COMMIT 명령어를 직접 작성하여 DBMS에 반영시키고

아니라면 ROLLBACK 명령어를 직접 작성하여 DBMS를 원래로 되돌린다. 

 

3) 명시적 트랜잭션

트랜잭션의 시작도 사용자가 직접 명시하는 방법이다.

BEGIN TRANSACTION 의 명령어로 트랜잭션 시작을 명시하고, 트랜잭션의 종료도 COMMIT TRANSACTION 또는 ROLLBACK TRANSACTION으로 사용자가 직접 명시한다.

 

ROLLBACK

테이블 내 입력한 데이터나, 수정한 데이터, 삭제한 데이터에 대하여 COMMIT 이전에는 변경 사항을 취소할 수 있는데 데이터베이스에서는 롤백(ROLLBACK) 기능을 사용한다. 롤백(ROLLBACK)은 데이터 변경 사항이 취소되어 데이터의 이전 상태로 복구되며, 관련된 행에 대한 잠금(LOCKING)이 풀리고 다른 사용자 들이 데이터 변경을 할 수 있게 된다.

 

SAVEPOINT

저장점(SAVEPOINT)을 정의하면 롤백(ROLLBACK)할 때 트랜잭션에 포함된 전체 작업을 롤백하는 것이 아니라 현 시점에서 SAVEPOINT까지 트랜잭션의 일부 만 롤백할 수 있다.

 

SAVEPOINT SVPT1;
ROLLBACK TO SVPT1;

ROLLBACK으로 해버리면 특정 시점으로 되돌아가기에 그 ROLLBACK 시점으로부터 미래의 SAVEPOINT 는 알 수 없다. 

 

오라클의 트랜잭션 관련 특성

해당 테이블에 데이터의 변경을 발생시키는 입력(INSERT), 수정(UPDATE), 삭제(DELETE) 수행시 그 변경되는 데이터의 무결성을 보장하는 것이 커밋(COMM IT)과 롤백(ROLLBACK)의 목적이다 커밋은 "영구적으로 반영해라”라는 의미를 갖는 것이고, 롤백(ROLLBACK)은 “변경 전으로 복귀하라”라는 의미이다. 저장점(SAVEPOINT/SAVE T RANSACTION)은 “데이터 변경을 사전에 지정한 저장점까지만 롤백하라”는 의미이다. Oracle의 트랜잭션은 트랜잭션의 대상이 되는 SQL 문장을 실행하면 자 동으로 시작되고, COMMIT 또는 ROLLBACK을 실행한 시점에서 종료된다. 단, 다음의 경우에는 COMMIT과 ROLLBACK을 실행하지 않아도 자동으로 트랜잭션 이 종료된다.

 

- CREATE, ALTER, DROP, RENAME, TRUNCATE TABLE 등 DDL 문장을 실행하면 그 전후 시점에 자동으로 커밋된다. 

- 부연하면, DML 문장 이후에 커밋 없이 DDL 문장이 실행되면 DDL 수행 전에 자동으로 커밋된다.

 - 데이터베이스를 정상적으로 접속을 종료하면 자동으로 트랜잭션이 커밋된다. 

- 애플리케이션의 이상 종료로 데이터베이스와의 접속이 단절되었을 때는 트랜잭션이 자동으로 롤백된다.