"세이브포인트"의 두 판 사이의 차이
1번째 줄: | 1번째 줄: | ||
'''세이브포인트'''(save point)는 특정한 지점까지 진행된 작업을 저장하고 그 이후 지점에 해당하는 작업은 취소하는 것을 말한다. 세이브포인트는 '임시저장' 또는 '부분저장'과 같은 맥락으로 이해할 수 있다. 보통 [[롤백]](rollback)을 하면 삽입, 삭제, 업데이트 등의 작업 전체가 취소되는데, 세이브포인트는 전체가 아닌 특정 부분에서 [[트랜잭션]]을 취소하기 위해 사용한다. 세이브포인트를 쓰면 현재의 트랜잭션을 작게 분할하는 것이 가능하다. 세이브포인트는 여러 개의 [[에스큐엘]](SQL)문의 실행을 수행하는 트랜잭션의 경우에 사용자가 트랜잭션 중간 단계에서 세이브포인트를 지정할 수 있다. 세이브포인트를 쓰려면 취소하려는 지점을 명시한 뒤, 그 지점까지 작업을 취소하는 식으로 사용하는데 이 지점을 세이브포인트라고 한다. 세이브포인트를 지정한 뒤, "롤백 투 세이브포인트 이름;"(rollback to save point name;)을 실행하면 해당 세이브포인트 지점까지 처리한 직업이 [[롤백]]된다. | '''세이브포인트'''(save point)는 특정한 지점까지 진행된 작업을 저장하고 그 이후 지점에 해당하는 작업은 취소하는 것을 말한다. 세이브포인트는 '임시저장' 또는 '부분저장'과 같은 맥락으로 이해할 수 있다. 보통 [[롤백]](rollback)을 하면 삽입, 삭제, 업데이트 등의 작업 전체가 취소되는데, 세이브포인트는 전체가 아닌 특정 부분에서 [[트랜잭션]]을 취소하기 위해 사용한다. 세이브포인트를 쓰면 현재의 트랜잭션을 작게 분할하는 것이 가능하다. 세이브포인트는 여러 개의 [[에스큐엘]](SQL)문의 실행을 수행하는 트랜잭션의 경우에 사용자가 트랜잭션 중간 단계에서 세이브포인트를 지정할 수 있다. 세이브포인트를 쓰려면 취소하려는 지점을 명시한 뒤, 그 지점까지 작업을 취소하는 식으로 사용하는데 이 지점을 세이브포인트라고 한다. 세이브포인트를 지정한 뒤, "롤백 투 세이브포인트 이름;"(rollback to save point name;)을 실행하면 해당 세이브포인트 지점까지 처리한 직업이 [[롤백]]된다. | ||
− | |||
== 특징 == | == 특징 == | ||
− | + | 저장된 세이브포인트(savepoint)는 ROLLBACK TO SAVEPOINT문을 사용하여 표시한 곳까지 롤백(rollback)할 수 있다. 여러 개의 SQL문 실행을 수반하는 트랜잭션의 경우, 사용자가 트랜잭션 중간 단계에서 세이브포인트(savepoint)를 지정할 수 있다. 이 세이브포인트(savepoint)는 차후 롤백(rollback)과 함께 사용하여 현재 트랜잭션 내의 특정 세이브포인트(savepoint)까지 롤백(rollback)할 수 있게 된다.<ref>냉유, 〈[https://keep-cool.tistory.com/46 (SQL 19) 트랜잭션 & TCL(COMMIT, ROLLBACK, SAVEPOINT)]〉, 《티스토리》, 2017-12-10</ref> | |
+ | 또한, 논리적인 명령어이지만 트랜잭션이 진행되는 동안 어떤 위치에 어떤 이름을 몇 개의 세이브포인트(savepoint)를 구현했는지 확인할 수 없으며 확인 가능한 명령어가 존재하지 않기 때문에 당사자가 기억을 해야만 쓸 수 있다.<ref>김뽀삐., 〈[https://ckim0531.tistory.com/entry/SQL-%ED%99%9C%EC%9A%A9-7-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%A1%B0%EC%9E%91%EC%96%B4-DML-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98-%EC%A0%9C%EC%96%B4-%EB%AA%85%EB%A0%B9%EC%96%B4-COMMIT-ROLLBACK-SAVEPOINT (SQL 활용)7. 데이터조작어(DML)-트랜잭션 제어 명령어(COMMIT, ROLLBACK, SAVEPOINT)]〉, 《티스토리》, 2018-07-27</ref> | ||
+ | == 활용 == | ||
+ | [[파일:세이브포인트.png|500픽셀|섬네일|세이브포인트]] | ||
+ | 롤백(rollback)을 실행하면 트랜잭션 시작 전인 원래의 상태로 되돌아 간다. 그러나 트랜잭션 내에 세이브포인트(savepoint)를 이용하여 저장점을 만들어 놓으면 ROLLBACK TO savepoint_name 명령으로 세이브포인트(savepoint)를 지정해 놓은 지점으로 되돌아 갈 수 있다. 여기서 주의할 것은 롤백(rollback)으로 돌아간다고 해서 저장이 된다고 착각하면 안된다. 저장은 오직 커밋(commit) 명령을 실행해야만 실제 디스크에 저장된다. | ||
+ | <ref>〈[https://wikidocs.net/4098 3) SAVEPOINT]〉, 《위키독스》, 2016-01-20</ref> | ||
− | |||
[구문1] | [구문1] | ||
SAVEPOINT mark; | SAVEPOINT mark; | ||
12번째 줄: | 15번째 줄: | ||
_ a SQL identifier | _ a SQL identifier | ||
_ a host variable (starting with :) | _ a host variable (starting with :) | ||
− | 같은 트랜잭션 내에 여러 개의 세이브포인트(savepoint)를 지정할 때 mark를 같은 값으로 하면 마지막 세이브포인트(savepoint)만 부분 롤백(rollback)에 나타난다. 또한, 이전의 세이브포인트(savepoint)는 제일 마지막 세이브포인트(savepoint)로 부분 롤백(rollback)할 때까지 감춰졌다가 마지막 세이브포인트(savepoint)가 사용된 후 없어지면 나타난다.<ref name="세이브포인트 활용">〈[http://m.1day1.org/cubrid/manual/syntax/syntax_tran_tran_savepoint.htm 세이브포인트와 부분 롤백]〉, 《m.1day1》</ref> | + | 같은 트랜잭션 내에 여러 개의 세이브포인트(savepoint)를 지정할 때 mark를 같은 값으로 하면 마지막 세이브포인트(savepoint)만 부분 롤백(rollback)에 나타난다. 또한, 이전의 세이브포인트(savepoint)는 제일 마지막 세이브포인트(savepoint)로 부분 롤백(rollback)할 때까지 감춰졌다가 마지막 세이브포인트(savepoint)가 사용된 후 없어지면 나타난다. <ref name="세이브포인트 활용">〈[http://m.1day1.org/cubrid/manual/syntax/syntax_tran_tran_savepoint.htm 세이브포인트와 부분 롤백]〉, 《m.1day1》</ref> |
[구문2] | [구문2] | ||
39번째 줄: | 42번째 줄: | ||
== 참고자료 == | == 참고자료 == | ||
+ | * 냉유, 〈[https://keep-cool.tistory.com/46 (SQL 19) 트랜잭션 & TCL(COMMIT, ROLLBACK, SAVEPOINT)]〉, 《티스토리》, 2017-12-10 | ||
+ | * 김뽀삐., 〈[https://ckim0531.tistory.com/entry/SQL-%ED%99%9C%EC%9A%A9-7-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%A1%B0%EC%9E%91%EC%96%B4-DML-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98-%EC%A0%9C%EC%96%B4-%EB%AA%85%EB%A0%B9%EC%96%B4-COMMIT-ROLLBACK-SAVEPOINT (SQL 활용)7. 데이터조작어(DML)-트랜잭션 제어 명령어(COMMIT, ROLLBACK, SAVEPOINT)]〉, 《티스토리》, 2018-07-27 | ||
+ | * 〈[https://wikidocs.net/4098 3) SAVEPOINT]〉, 《위키독스》, 2016-01-20 | ||
+ | * 〈[http://m.1day1.org/cubrid/manual/syntax/syntax_tran_tran_savepoint.htm 세이브포인트와 부분 롤백]〉, 《m.1day1》 | ||
== 같이 보기 == | == 같이 보기 == |
2020년 9월 7일 (월) 14:10 판
세이브포인트(save point)는 특정한 지점까지 진행된 작업을 저장하고 그 이후 지점에 해당하는 작업은 취소하는 것을 말한다. 세이브포인트는 '임시저장' 또는 '부분저장'과 같은 맥락으로 이해할 수 있다. 보통 롤백(rollback)을 하면 삽입, 삭제, 업데이트 등의 작업 전체가 취소되는데, 세이브포인트는 전체가 아닌 특정 부분에서 트랜잭션을 취소하기 위해 사용한다. 세이브포인트를 쓰면 현재의 트랜잭션을 작게 분할하는 것이 가능하다. 세이브포인트는 여러 개의 에스큐엘(SQL)문의 실행을 수행하는 트랜잭션의 경우에 사용자가 트랜잭션 중간 단계에서 세이브포인트를 지정할 수 있다. 세이브포인트를 쓰려면 취소하려는 지점을 명시한 뒤, 그 지점까지 작업을 취소하는 식으로 사용하는데 이 지점을 세이브포인트라고 한다. 세이브포인트를 지정한 뒤, "롤백 투 세이브포인트 이름;"(rollback to save point name;)을 실행하면 해당 세이브포인트 지점까지 처리한 직업이 롤백된다.
특징
저장된 세이브포인트(savepoint)는 ROLLBACK TO SAVEPOINT문을 사용하여 표시한 곳까지 롤백(rollback)할 수 있다. 여러 개의 SQL문 실행을 수반하는 트랜잭션의 경우, 사용자가 트랜잭션 중간 단계에서 세이브포인트(savepoint)를 지정할 수 있다. 이 세이브포인트(savepoint)는 차후 롤백(rollback)과 함께 사용하여 현재 트랜잭션 내의 특정 세이브포인트(savepoint)까지 롤백(rollback)할 수 있게 된다.[1] 또한, 논리적인 명령어이지만 트랜잭션이 진행되는 동안 어떤 위치에 어떤 이름을 몇 개의 세이브포인트(savepoint)를 구현했는지 확인할 수 없으며 확인 가능한 명령어가 존재하지 않기 때문에 당사자가 기억을 해야만 쓸 수 있다.[2]
활용
롤백(rollback)을 실행하면 트랜잭션 시작 전인 원래의 상태로 되돌아 간다. 그러나 트랜잭션 내에 세이브포인트(savepoint)를 이용하여 저장점을 만들어 놓으면 ROLLBACK TO savepoint_name 명령으로 세이브포인트(savepoint)를 지정해 놓은 지점으로 되돌아 갈 수 있다. 여기서 주의할 것은 롤백(rollback)으로 돌아간다고 해서 저장이 된다고 착각하면 안된다. 저장은 오직 커밋(commit) 명령을 실행해야만 실제 디스크에 저장된다. [3]
[구문1]
SAVEPOINT mark; mark: _ a SQL identifier _ a host variable (starting with :)
같은 트랜잭션 내에 여러 개의 세이브포인트(savepoint)를 지정할 때 mark를 같은 값으로 하면 마지막 세이브포인트(savepoint)만 부분 롤백(rollback)에 나타난다. 또한, 이전의 세이브포인트(savepoint)는 제일 마지막 세이브포인트(savepoint)로 부분 롤백(rollback)할 때까지 감춰졌다가 마지막 세이브포인트(savepoint)가 사용된 후 없어지면 나타난다. [4]
[구문2]
ROLLBACK [ WORK ] [ TO [ SAVEPOINT ] mark ] [ ; ] mark: _ a SQL identifier _ a host variable (starting with :)
앞에서는 ROLLBACK WORK 문이 마지막 트랜잭션 이후로 입력된 모든 데이터베이스의 갱신을 제거하였다. ROLLBACK WORK 문은 특정 세이브포인트(savepoint) 이후로 트랜잭션의 갱신을 되돌리는 부분 롤백(rollback)에도 사용된다. mark의 값이 주어지지 않으면 트랜잭션은 모든 갱신을 취소하면서 종료한다. 여기에는 트랜잭션에 만들어진 모든 세이브포인트(savepoint)도 포함한다. mark가 주어지면 지정한 세이브포인트(savepoint) 이후의 것은 취소되고, 세이브포인트(savepoint)를 포함한 이전의 것은 갱신 사항이 남는다.[4]
오라클(Oracle)
SAVEPOINT 포인트명1; SAVEPOINT 포인트명2; ROLLBACK TO 포인트명1;
골디락스(GOLDILOCKS)
SAVEPOINT 포인트명1; SAVEPOINT 포인트명2; ROLLBACK TO SAVEPOINT 포인트명1;
MS-SQL
SAVEPOINT TRANSACTION 포인트명1; SAVEPOINT TRANSACTION 포인트명2; ROLLBACK TRANSACTION 포인트명1;
각주
- ↑ 냉유, 〈(SQL 19) 트랜잭션 & TCL(COMMIT, ROLLBACK, SAVEPOINT)〉, 《티스토리》, 2017-12-10
- ↑ 김뽀삐., 〈(SQL 활용)7. 데이터조작어(DML)-트랜잭션 제어 명령어(COMMIT, ROLLBACK, SAVEPOINT)〉, 《티스토리》, 2018-07-27
- ↑ 〈3) SAVEPOINT〉, 《위키독스》, 2016-01-20
- ↑ 4.0 4.1 〈세이브포인트와 부분 롤백〉, 《m.1day1》
참고자료
- 냉유, 〈(SQL 19) 트랜잭션 & TCL(COMMIT, ROLLBACK, SAVEPOINT)〉, 《티스토리》, 2017-12-10
- 김뽀삐., 〈(SQL 활용)7. 데이터조작어(DML)-트랜잭션 제어 명령어(COMMIT, ROLLBACK, SAVEPOINT)〉, 《티스토리》, 2018-07-27
- 〈3) SAVEPOINT〉, 《위키독스》, 2016-01-20
- 〈세이브포인트와 부분 롤백〉, 《m.1day1》
같이 보기