MVCC 기능
2.2.2 수행
수행 순서 | 시나리오 | |
세션 1 | 세션 2 | |
1 | 테이블(TEST1.MVCCTEST) 생성 | |
2 | 테이블(TEST1.MVCCTEST)에 데이터 입력 | |
3 | 테이블(TEST1.MVCCTEST)의 데이터 변경 | |
4 | 테이블(TEST1.MVCCTEST)의 변경된 데이터 조회 | |
5 | 테이블(TEST1.MVCCTEST)의 데이터 조회 | |
6 | 변경된 데이터 commit | |
7 | 테이블(TEST1.MVCCTEST)의 변경된 데이터 조회 |
2.2.3 결과
수행순서 | 시나리오 | |
세션 1 | 세션 2 | |
1 | 테이블(TEST1.MVCCTEST) 생성 | |
tbsql TEST1/TEST1 tbSQL 6 TmaxData Corporation Copyright (c) 2008- . All rights reserved. Connected to Tibero. CREATE TABLE TEST1.MVCCTEST(ID NUMBER, NAME VARCHAR(20)); TABLE 'TEST1.MVCCTEST' CREATED. |
||
2 | 테이블(TEST1.MVCCTEST)에 데이터 입력 | |
INSERT INTO TEST1.MVCCTEST VALUES(1, 'TEST'); 1 ROW INSERTED. COMMIT; COMMIT COMPLETED. |
||
3 | 테이블(TEST1.MVCCTEST)의 데이터 변경 | |
UPDATE TEST1.MVCCTEST SET NAME = 'TEST123' WHERE ID = 1; 1 ROW UPDATED. |
||
4 | 테이블(TEST1.MVCCTEST)의 변경된 데이터 조회 | |
ALTER SESSION SET NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS'; Session altered. SELECT SYSDATE FROM DUAL; SYSDATE -------------------------------- 2017/06/07 12:20:26 1 row selected. SELECT * FROM TEST1.MVCCTEST WHERE ID = 1 ; ID NAME ---------- -------------------- 1 TEST123 1 ROW SELECTED. |
||
5 | 세션 2 테이블(TEST1.MVCCTEST)의 데이터 조회 | |
ALTER SESSION SET NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS'; Session altered. SELECT SYSDATE FROM DUAL; SYSDATE -------------------------------- 2017/06/07 12:22:26 1 row selected. SELECT * FROM TEST1.MVCCTEST WHERE ID = 1 ; ID NAME ---------- -------------------- 1 TEST 1 ROW SELECTED. |
||
6 | 변경된 데이터 commit | |
SELECT SYSDATE FROM DUAL; SYSDATE -------------------------------- 2017/06/07 12:23:26 1 row selected. COMMIT; COMMIT COMPLETED. |
||
7 | 세션 2 테이블(TEST1.MVCCTEST)의 변경된 데이터 조회 | |
SELECT SYSDATE FROM DUAL; SYSDATE -------------------------------- 2017/06/07 12:25:26 1 row selected. SELECT * FROM TEST1.MVCCTEST WHERE ID = 1 ; ID NAME ---------- -------------------- 1 TEST123 1 ROW SELECTED. |
위 실행계획에 따라 수행하다가 의문점이 생겼다. 세션 1 TEST1 사용자 계정에서 TEST2에게 권한을 주면
GRANT SELECT ON TEST1.MVCCTEST TO TEST2;
아직 세션 1에서 COMMIT을 안했음에도 세션 2 TEST2 사용자 계정에서 해당 테이블을 조회시 이미 변경된 데이터로 조회되는것이다.
# 생긴 의문점.... GRANT 시 COMMIT 한것처럼 트랜잭션이 반영이 되는건지????? #
아래는 테스트 결과이다.
SESSION1 에 TEST1 계정
SESSION1 에 TEST1 계정에서 기존 데이터는 TEST00 이였다. (1번)
TEST123으로 데이터를 업데이트후 TEST2 계정에 TEST1.MVCCTEST 계정 조회 권한을 주었다 (2번)
COMMIT (3번)
SESSION2 에 TEST2 계정
세션 2 TEST2 계정에서 기존에 조회시 TEST00 데이터를 확인할 수 있다. (1번)
그러나 세션 1 TEST1 계정에서 REVOKE로 SELECT 권한 회수후, 데이터를 업데이트하고 커밋전에 TEST2 계정에 GRANK로 SELECT 권한을 주고난뒤 세션2 TEST2 계정에서 데이터를 확인해보면 세션1 TEST1 계정에서 아직 COMMIT를 안했음에도 데이터가 TEST123으로 변경된것을 확인할 수 있다???? (2번)
세션 1에서 COMMIT후 데이터는 TEST123이 맞다 (3번)
결론: GRANT시 내부적으로 COMMIT이 일어나는것으로 판단.....
오라클도 동일한 현상인지는 테스트 해봐야 알꺼같다!
'DB > Tibero' 카테고리의 다른 글
[Tibero교육] Tibero Installation (0) | 2022.12.14 |
---|---|
[Tibero교육] Tibero Database Administration (0) | 2022.12.07 |
[Tibero] Operating GuideFor Beginner (0) | 2022.11.28 |
[Tibero교육] Tibero SQL Developers (1) | 2022.11.24 |
[Tibero교육] Tibero Architecture (0) | 2022.11.23 |