Toggle navigation
꿈꾸는 개발자, DBA 커뮤니티 구루비
로그인
:
회원가입
:
공지
:
버그
:
RSS
:
저작권
구루비 커뮤니티는
Tibero Database
로 운영되고 있습니다.
지식창고
Database Q&A
Oracle Database
Study RoadMap
권순용의 DB 이야기
권순용의 데이터모델링
엑시엄이 보는 DB 세상
Basic SQL 강좌
Advanced SQL 강좌
QUIZ로 배우는 SQL
PL/SQL 강좌
Admin 강좌
Oracle10g 강좌
Tuning 강좌
백업&복구 강좌
기타 강좌
Oracle 노하우/팁
Oracle 퀴즈
Oracle 자료실
Community
전체글
공지사항
IT 행사 및 소식
Toad for Oracle
Toad Data Point 강좌
Toad 기본강좌
Toad 소개
Toad 노하우/팁/자료
Toad 커뮤니티
Tibero DB
우리 회사 데이터베이스를 티베로로 변경하기
Tibero5 기본강좌
Tibero4 기본강좌
Tibero 노하우/팁/자료
Tibero TechNet
Tibero6 온라인메뉴얼
Database 북카페
SQL 전문가 가이드
대용량 데이터베이스솔루션 I
대용량 데이터베이스솔루션 II
새로쓴 대용량 데이터베이스솔루션 1
오라클 성능 고도화 원리와 해법 I
오라클 성능 고도화 원리와 해법 II
SQL 튜닝의 시작
Optimizing Oracle Optimizer
비용기반의 오라클 원리
전문가를 위한 오라클 데이터베이스 아키텍처
트러블슈팅 오라클 퍼포먼스(제2판)
오라클 성능 트러블슈팅의 기초
클라우드 데이터베이스 Oracle 12c 가이드
이펙티브 오라클
데이터베이스 설계와 구축(개정판)
관계형 데이터 모델링 프리미엄 가이드 DB구축
Real MariaDB
Database 기타
PostgreSQL 기본강좌
PostgreSQL 노하우/팁/자료
ALTIBASE 기초강좌
ALTIBASE 노하우/팁/자료
ALTIBASE Technical Center
CUBRID 기초강좌
CUBRID 노하우/팁/자료
CUBRID 홈페이지
MySQL 노하우/팁/자료
MySQL 홈페이지
Tag
세미나
세미나 목록
세미나 신청
세미나 Q&A
세미나 후기
세미나 자료실
My 신청세미나
My 취소세미나
My Home
My 정보
My 내공
My 정보수정
내가 즐겨찾는 게시글
내가 즐겨찾는 강좌
내가 작성한 게시글
내가 작성한 댓글
About
커뮤니티 발자취
구루비 소개
내공점수 소개
HOME
[종료]구루비 DB 스터디
2013년 하반기 - 오라클 트러블슈팅 스터디
4.TCL(TRANSACTION CONTROL LANGUAGE)
4.TCL(TRANSACTION CONTROL LANGUAGE)
(by tlswofl)
[2013.10.04]
트랜잭션 개요
COMMIT
SQL Server의 COMMIT
ROLLBACK
SQL Server의 ROLLBACK
SAVEPOINT
트랜잭션 개요
데이터베이스의 논리적 연산 단위
밀접히 관련되어 분리될 수 없는 한 개 이상의 데이터베이스 조작(UPDATE, INSERT, DELETE, SELECT FOR UPDATE)
분할할 수 없는 최소의 단위로 ALL OR NOTHING
예제(은행의 계좌이체)
아래 두 작업이 모두 완료되어야 계좌 이체가 성공한다.
둘 중 하나라도 실패할 경우 모든 수정을 취소하여 원 상태로 되돌려야 한다.
COMMIT: 올바르게 반영된 데이터를 데이터베이스에 반영
ROLLBACK: 트랜잭션 시작 이전의 상태로 되돌리는 것
LOCK: 트랜잭션이 수행되는 동안 특정 데이터에 대해서 다른 트랜잭션이 동시에 접근하지 못하도록 제한하는 기법
트랜잭션의 특성
COMMIT
COMMIT/ROLLBACK 이전의 데이터 상태
단지 메모리 버퍼에만 영향을 받았기 때문에 데이터의 변경 이전 상태로 복구 가능하다.
현재 사용자는 SELECT 문으로 변경된 결과를 확인 가능하다.
다른 사용자는 현재 사용자가 수행한 명령의 결과를 볼 수 없다.
변경된 행은 잠금(LOCKING)이설정되어 다른 사용자가 변경할 수 없다.
DML문 이후 DDL이 실행되면 DDL 수행전에 자동으로 커밋된다.
데이터베이스를 정상적으로 접속을 종료하면 자동으로 트랜잭션이 커밋된다.
COMMIT 이후의 데이터 상태
데이터에 대한 변경 사항이 데이터베이스에 반영된다.
이전 데이터는 영원히 잃어버리게 된다.
모든 사용자는 변경된 결과를 볼 수 있다.
관련된 행에 대한 잠금이 풀리고 다른 사용자들도 행을 조작할 수 있게 된다.
SQL Server의 COMMIT
SQL Server는 기본적으로 AUTO COMMIT 모드이기 때문에 DML 수행후 사용자가 COMMIT/ROLLBACK을 처리할 필요가 없다.
DML 구문이 성공이면 자동 COMMIT, 오류가 발생하면 자동 ROLLBACK된다.
SQL Server에서의 트랜잭션 방식
AUTO COMMIT
기본 방식
DML, DDL을 수행할 때마다 DBMS가 트랜잭션을 컨트롤
암시적 트랜잭션
오라클과 같은 방식으로 처리(트랜잭션 시작은 DBMS가 처리하고 끝은 사용자가 COMMIT/ROLLBACK을 통해 처리)
인스턴스 단위 혹은 세션 단위로 설정 가능
명시적 트랜잭션
트랜잭션의 시작과 끝을 모두 사용자가 명시적으로 지정하는 방식
BEGIN TRAN(SACTION)으로 트랜잭션을 시작하고 COMMIT (TRANSACTION)/ROLLBACK (TRANSACTION)으로 트랜잭션을 종료
ROLLBACK
테이블내 조작한 데이터에 대하여 COMMIT이전에 변경 사항을 취소하는 명령
데이터 변경사항이 취소되고 관련된 행에 대한 잠금이 풀리고 다른 사용자들이 데이터를 변경할 수 있게 된다.
애플리케이션의 이상 종료료 데이터베이스와의 접속이 단절되면 트랜잭션이 자동 롤백된다.(두 벤더 모두)
SQL Server의 ROLLBACK
기본적으로 AUTO COMMIT이기 때문에 ROLLBACK을 수행하기 위해서는 명시적으로 트랜잭션을 선언해야 한다.
SAVEPOINT
롤백시 전체 트랜잭션을 롤백하는 것이 아니라 현 시점에서 SAVEPOINT까지 트랜잭션의 일부만 롤백 가능
일부 툴에서는 지원이 안될 수 있다.
여러개의 저장점을 정의할 수 있으며 동일이름으로 정의했을때 나중에 정의한 저장점이 유효하다.
구문
ROLLBACK 원리
특정 저장점까지 롤백하면 그 이후 설정한 저장점은 무효가 된다.
저장점 지정 없이 ROLLBACK을 수행하면 모든 트랜잭션의 변경사항이 취소된다.
예제
새로운 트랜잭션을 시작하기 전에 PLAYER 테이블의 데 이터 건수와 몸무게가 100 인 선수의 데이터 건수를 확인한다.
새로운 트랜잭션을 시작하고 SAVEPOINT A와 SAVEPOINT B를 지정한다. (툴에 AUTO COMMIT 옵션 이 적용되어 있는 경우 해제함)
SAVEPOINT B 저장점까지 롤백 (ROLLBACK)을 수행하고 롤백 전후 데이터를 확인해본다,
SAVEPOINT A 저장점까지 롤백 (ROLLBACK)을 수행하고 롤백 전후 데이터를 확인해본다.
트랜잭션 최초 시점까지 롤백 (ROLLBACK)을 수행하고 롤백 전후 데이터를 확인해본다.
HOME
[종료]구루비 DB 스터디
2013년 하반기 - 오라클 트러블슈팅 스터디
4.TCL(TRANSACTION CONTROL LANGUAGE)