본문 바로가기

DB/Tibero

[Tibero] MVCC 기능 시나리오 따라하다가 생긴 의문점

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