4.6. Commit과 Rollback 예제
COMMIT 과 ROLLBACK
이전의 커밋(COMMIT)이 일어난 뒤부터 다음의 커밋(COMMIT) 전까지의 작업이 하나의 트랜잭션 이며, 커밋과 롤백(ROLLBACK)은 이러한 트랜잭션 단위로 데이터 베이스에서 발생한 작업을 저장, 삭제하는 일이다.
- - 자동 COMMIT : DDL(Create, Alter, Drop), DCL(Grant, Revoke)
- - 자동 ROLLBACK : 비정상적인 종료, system failure
SQL> DELETE FROM emp WHERE empno = 7521 ; 한 개의 행이 삭제 되었습니다. SQL> COMMIT; 커밋이 완료 되었습니다 -- 한 개의 행을 삭제하고, COMMIT 문으로 데이터를 영구히 저장했다. -- 이 것은 하나의 트랜잭션이 여기서 종료되고, 새로운 트랜잭션이 발생하는 것을 말한다. SQL> SELECT empno FROM emp WHERE empno = 7521; 선택된 레코드가 없습니다. SQL> INSERT INTO emp(empno, ename, hiredate) VALUES (9000, 'test', sysdate ); 한 개의 행이 작성되었습니다. SQL> COMMIT; 커밋이 완료 되었습니다. SQL> DELETE FROM emp WHERE empno = 9000; 한 개의 행이 삭제 되었습니다. SQL> SELECT empno FROM emp WHERE empno = 9000 ; 선택된 레코드가 없습니다. -- 위의 예제 처럼 empno가 9000번인 데이터를 등록 한 후 COMMIT으로 데이터를 저장한 다음에 데이터를 다시 삭제한 후 SELECT를 하면 데이터가 검색되지 않는 것을 알 수 있다. -- 하지만 다른 유저에서는 커밋이나 롤백을 하기 전까지 이전에 등록한 empno가 9000번인 데이터를 조회하면 데이터가 검색 된다. -- 데이터베이스에서의 이런 기능을 읽기 일관성이라고 합니다. SQL> ROLLBACK ; 롤백이 완료되었습니다. -- 이전에 트랜잭션(커밋)이 발생하고나서 지금 발생한 ROLLBACK문 전까지의 작업의 취소를 말한다. -- 검색을 해보면 커밋이 완료된 시점의 레코드 하나가 검색 된다. SQL> SELECT empno FROM emp WHERE empno = 9000; EMPNO ---------- 9000 한 개의 행이 선택되었습니다.
SAVEPOINT 와 ROLLBACK TO
SAVEPOINT는사용자가 트랜잭션의 작업을 여러개의 세그먼트로 분할할 수 있도록 하는 특별한 작업이다.
SAVEPOINT는 부분적인 롤백을 가능하게 하기 위해 트랜잭션에 대한 중간점을 정의 한다.
SQL> INSERT INTO emp(empno, ename, hiredate) VALUES (10000, 'test2', sysdate ); 한 개의 행이 작성되었습니다. -- SAVEPOINT를 생성 한다. SQL> SAVEPOINT A; 저장점이 생성되었습니다. SQL> INSERT INTO emp(empno, ename, hiredate) VALUES (10001, 'test3', sysdate ); 한 개의 행이 작성되었습니다. SQL> INSERT INTO emp(empno, ename, hiredate) VALUES (10002, 'test4', sysdate ); 한 개의 행이 작성되었습니다. SQL> DELETE FROM emp WHERE empno IN (10000, 10001, 10002); 세 개의 행이 삭제 되었습니다. SQL> SELECT empno, ename FROM emp WHERE empno IN (10000, 10001, 10002); 선택된 행이 없습니다. -- SAVEPOINT까지만 롤백이 시행 된다. SQL> ROLLBACK TO A; 롤백이 완료되었습니다. SQL> SELECT empno, ename FROM emp WHERE empno IN (10000, 10001, 10002); 한 개의 행이 선택되었습니다. EMPNO ENAME --------- --------------- 10000 test2 -- SAVEPOINT까지만 롤백이 실행되었다. -- 그 결과 첫 번재 데이터는 그대로 남고, SAVEPOINT 후에 실행된 데이터 입력은 삭제되었다.
'Database > Oracle SQL' 카테고리의 다른 글
5.4. Conversion Functions (변환 함수) (0) | 2019.04.17 |
---|---|
5.3. Datetime Functions (날짜 함수) (0) | 2019.04.17 |
5.2. Character Functions (문자형 함수) (0) | 2019.04.17 |
5.1. Numeric Functions (숫자형 함수) (0) | 2019.04.17 |
4.5. 트랜잭션(commit과 rollback) (0) | 2019.04.17 |
4.4.3. CROSS JOIN, INNER JOIN, NATURAL JOIN, USING, ON (0) | 2019.04.17 |
4.4.2. Outer Join (LEFT, RIGHT, FULL OUTER JOIN) (0) | 2019.04.17 |
4.4.1. Equi Join, Non_Equi Join, Self Join (0) | 2019.04.17 |