SET TRANSACTION 명령은 고립수준과 일기전용 또는 읽기쓰기와 같은 트랜잭션의 다양한 속성을 설정 가능 하게 한다.
SET TRANSACTION READ ONLY : 현재의 트랜잭션을 ReadOnly로 설정 한다.
SET
TRANSACTION READ WRITE : 현재의 트랜잭션을 Read Write로 설정 한다. 이 값은 default 이다.
--------------------------------------------------------------------
트랜잭션의 독립성 레벨 지정은 아래의 두갖 방법을 이용한다. READ COMMITTED 값이 기본값이다.
1.
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE : 트랜잭션 내의 모든 문장을 수행할 때, 트랜잭션 시작
시점의 데이터베이스 스냅샷을 보여준다.
SQL> set transaction isolation level
serializable;
SQL> select sum(sal) from emp;
SQL> ……
SQL>
select sum(sal) from emp;
SQL> commit;
이 경우는 첫 번째 select 문의 수행 시작
시점의 데이터베이스 스냅샷 값을 기준으로 두 문장 모두 같은 sum() 값을 구하게 된다. 즉 다른 사용자가 emp의 sal을 변동 시켜도 그
값은 반영되지 않는 다는 의미이다.
2. SET TRANSACTION ISOLATION LEVEL READ
COMMITTED : read committed 레벨의 경우 읽기 일관성이 문장 단위로 해당 문장의 수행 시작 시점을 기준으로 제공된다. 예를
들어, 다음과 같이 한 트랜잭션 내에서 똑 같은 SELECT 문을 두 번 수행하게 되면 서로 다른 sum() 값이 나올 수가 있다.
SQL> set transaction isolation read committed;
SQL> select
sum(sal) from emp;
SQL> ……
SQL> select sum(sal) from emp;
SQL> commit;
즉, read commit 레벨은 트랜잭션 개별 문장의 수행 시작 시점의 스냅샷을 보여준다.
=========================================== 예제1
SQL> delete
from emp;
15 행이 삭제되었습니다.
SQL> rollback;
롤백이 완료되었습니다.
SQL> set transaction read only;
트랜잭션이 설정되었습니다.
SQL> delete from emp;
delete from emp
*
1행에 오류:
ORA-01456: READ ONLY 트랜잭션은 삽입/삭제/갱신할 수 없습니다
SQL> commit;
커밋이 완료되었습니다.
SQL> set transaction read write;
트랜잭션이
설정되었습니다.
SQL> delete from emp;
15 행이 삭제되었습니다.
SQL>
rollback;
롤백이 완료되었습니다.
==================================================== 독립성 레벨 예제
SQL> set transaction isolation level read committed;
트랜잭션이
설정되었습니다.
SQL> select sum(sal) from emp;
SUM(SAL)
----------
33025
--> 이때 다른 곳에서 scott 계정으로 접속하여 sal값을
변동한다. 예를들어 다음과 같은 SQL문장을 수행 한다고 가정 하다. update emp set sal = sal + 1000 where
ename='SMITH' 라고 말이다...
SQL> select sum(sal) from emp;
SUM(SAL)
----------
34025
--> 값이 변했음을 알수있다. 즉 읽기 일관성이 문장 단위로
해당 문장의 수행 시작 시점을 기준으로 제공된다는것을 알수 있다. 아래에서 serializable에 대해 살펴보자.
SQL>
set transaction isolation level SERIALIZABLE;
트랜잭션이 설정되었습니다.
SQL> select sum(sal) from emp;
SUM(SAL)
----------
34025
--> 이때 다른 곳에서 scott 계정으로 접속하여 sal값을 변동한다. 예를들어 다음과 같은
SQL문장을 수행 한다고 가정 하다. update emp set sal = sal + 1000 where ename='SMITH' 라고
말이다...
SQL> select sum(sal) from emp;
SUM(SAL)
----------
34025
--> 값이 변하지 않았음을 알수 있다. serializable 레벨의
경우 트랜잭션 내의 모든 문장을 수행할 때, 트랜잭션 시작 시점의 데이터베이스 스냅샷을 보여준다는 것을 알수있다.
2014년 2월 13일 목요일
SET TRANSACTION 명령은 고립수준과 일기전용 또는 읽기쓰기와 같은 트랜잭션의 다양한 속성을 설정 가능 하게 한다. SET TRANSACTION READ ONLY : 현재의 트랜잭션을 ReadOnly로 설정 한다. SET TRANSACTION READ WRITE : 현재의 트랜잭션을 Read Write로 설정 한다. 이 값은 default 이다. -------------------------------------------------------------------- 트랜잭션의 독립성 레벨 지정은 아래의 두갖 방법을 이용한다. READ COMMITTED 값이 기본값이다. 1. SET TRANSACTION ISOLATION LEVEL SERIALIZABLE : 트랜잭션 내의 모든 문장을 수행할 때, 트랜잭션 시작 시점의 데이터베이스 스냅샷을 보여준다. SQL> set transaction isolation level serializable; SQL> select sum(sal) from emp; SQL> …… SQL> select sum(sal) from emp; SQL> commit; 이 경우는 첫 번째 select 문의 수행 시작 시점의 데이터베이스 스냅샷 값을 기준으로 두 문장 모두 같은 sum() 값을 구하게 된다. 즉 다른 사용자가 emp의 sal을 변동 시켜도 그 값은 반영되지 않는 다는 의미이다. 2. SET TRANSACTION ISOLATION LEVEL READ COMMITTED : read committed 레벨의 경우 읽기 일관성이 문장 단위로 해당 문장의 수행 시작 시점을 기준으로 제공된다. 예를 들어, 다음과 같이 한 트랜잭션 내에서 똑 같은 SELECT 문을 두 번 수행하게 되면 서로 다른 sum() 값이 나올 수가 있다. SQL> set transaction isolation read committed; SQL> select sum(sal) from emp; SQL> …… SQL> select sum(sal) from emp; SQL> commit; 즉, read commit 레벨은 트랜잭션 개별 문장의 수행 시작 시점의 스냅샷을 보여준다. =========================================== 예제1 SQL> delete from emp; 15 행이 삭제되었습니다. SQL> rollback; 롤백이 완료되었습니다. SQL> set transaction read only; 트랜잭션이 설정되었습니다. SQL> delete from emp; delete from emp * 1행에 오류: ORA-01456: READ ONLY 트랜잭션은 삽입/삭제/갱신할 수 없습니다 SQL> commit; 커밋이 완료되었습니다. SQL> set transaction read write; 트랜잭션이 설정되었습니다. SQL> delete from emp; 15 행이 삭제되었습니다. SQL> rollback; 롤백이 완료되었습니다. ==================================================== 독립성 레벨 예제 SQL> set transaction isolation level read committed; 트랜잭션이 설정되었습니다. SQL> select sum(sal) from emp; SUM(SAL) ---------- 33025 --> 이때 다른 곳에서 scott 계정으로 접속하여 sal값을 변동한다. 예를들어 다음과 같은 SQL문장을 수행 한다고 가정 하다. update emp set sal = sal + 1000 where ename='SMITH' 라고 말이다... SQL> select sum(sal) from emp; SUM(SAL) ---------- 34025 --> 값이 변했음을 알수있다. 즉 읽기 일관성이 문장 단위로 해당 문장의 수행 시작 시점을 기준으로 제공된다는것을 알수 있다. 아래에서 serializable에 대해 살펴보자. SQL> set transaction isolation level SERIALIZABLE; 트랜잭션이 설정되었습니다. SQL> select sum(sal) from emp; SUM(SAL) ---------- 34025 --> 이때 다른 곳에서 scott 계정으로 접속하여 sal값을 변동한다. 예를들어 다음과 같은 SQL문장을 수행 한다고 가정 하다. update emp set sal = sal + 1000 where ename='SMITH' 라고 말이다... SQL> select sum(sal) from emp; SUM(SAL) ---------- 34025 --> 값이 변하지 않았음을 알수 있다. serializable 레벨의 경우 트랜잭션 내의 모든 문장을 수행할 때, 트랜잭션 시작 시점의 데이터베이스 스냅샷을 보여준다는 것을 알수있다. [출처] 오라클자바커뮤니티 - http://www.oraclejavanew.kr/bbs/board.php?bo_table=LecSQLnPlSql&wr_id=51 자바 오라클/빅데이터 아이폰/안드로이드 닷넷/WPF 표준웹/HTML5 채용/취업무료교육 초보자코스 [기업100%환급]자바기초에서 JDBC, Servlet/JSP까지 총 5일 40시간 02-17 [기업100%환급]Spring ,MyBatis,Hibernate실무과정 총 5일 40시간 02-24 JAVA&WEB프레임워크실무과정 총 33일 99시간 02-25 Spring3.X, MyBatis, Hibernate실무과정 총 12일 36시간 03-03 [주말저녁]자바기초에서JSP,Servlet,Ajax,jQUERY,스프링,마이바티스,하이버네이트 총 18일 72시간 02-22 자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지 총 10일 70시간 03-01 JAVA&WEB프레임워크실무과정 총 14일 98시간 03-08 Spring3.X, MyBatis, Hibernate실무과정 총 5일 35시간 03-09 [기업100%환급]PL/SQL,ORACLE HINT,TUNING 총 5일 40시간 02-17 [기업100%환급]SQL기초에서 Schema Object까지 총 5일 40시간 02-24 SQL초보에서실전전문가까지 총 18일 54시간 02-18 SQL초보에서실전전문가까지 총 8일 56시간 02-22 [주말저녁]SQL기초에서 Schema Object까지 총 10일 40시간 03-01
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기