저희 제품에 큐브리드를 사용 할 수 있을지 여부를 테스트 하고 있습니다.
트랜잭션 고립수준 중에 \'READ COMMITTED CLASS WITH READ COMMITTED INSTANCES\'를
테스트 해보았는데요 큐브리드 사용자메뉴얼2에 있는 예제 대로 했지만 메뉴얼의 내용과 다른 결과가 나옵니다.
메뉴얼에 따르면 첫번째의 트랜잭션이 Insert Row를 한 뒤에 Commit을 하지 않은 상태에서,
두번째 트랜잭션이 해당 테이블을 조회 하면 첫번째 트랜잭션에서 Insert한 Row는 조회되지 않는다고 했는데요
제가 테스트한 결과는 Row가 조회가 되었습니다. 첫번째 트랜잭션에서 Rollback을 하고나면 두번째 트랜잭션에서
Row가 조회되지 않았습니다. 무엇이 문제인지 모르겠습니다. 아래에 제가 테스트한 순서와 방법을 참조 하셔서
도움을 주셨으면 합니다.
- 테스트 내용 -
[첫번째 트랜잭션 에서]
sqlx> SET TRANSACTION ISOLATION LEVEL READ COMMITTED CLASS, READ UNCOMMITTED INSTANCES;
sqlx> ;xrun
sqlx> ;autocommit off
보신것 처럼 오토커밋을 오프 시키고, 트랜잭션 격리수준을 변경 했습니다.
sqlx> INSERT INTO SER(COL_1) VALUES (1000);
sqlx> ;xrun
1 rows inserted.
하나의 로우를 Insert하고 commit을 하지 않았습니다.
[두번째 트랜잭션 에서]
sqlx> SET TRANSACTION ISOLATION LEVEL READ COMMITTED CLASS, READ UNCOMMITTED INSTANCES;
sqlx> ;xrun
sqlx> ;autocommit off
첫번째 트랜잭션과 같이 오토커밋을 오프 시키고, 트랜잭션 격리수준을 변경 했습니다.
sqlx> SELECT * FROM SER WHERE COL_1 = 1000;
sqlx> ;xrun
위에서 처럼 조회를 했을 때, 제가 메뉴얼의 내용을 이해한 바로는 해당 로우가 조회 되지
않아야 하는데요 아래와 같이 조회가 되어 나왔습니다.
=== <Result of SELECT Command in Line 1> ===
col_1
======================
1000
1 rows selected.
1 command(s) successfully processed.
위와 같은 결과가 나와서 트랜잭션 격리수준을 변경하는 명령이 제대로 실행 되지 않았나 해서
큐브리드 매니저의 잠금정보->잠금설정/클라이언트 정보 메뉴에서 ISOLATION 레벨 부분을 확인해
보았습니다. 확인결과 두개의 클라이언트의 설정이 제가 했던대로
READ COMMITTED CLASS, READ UNCOMMITTED INSTANCES로 설정되어 있는 것을 확인 할 수 있었습니다.
제가 \'READ COMMITTED CLASS, READ UNCOMMITTED INSTANCES\' 격리 수준에 대해서
잘못 이해 하고 있는것인지, 제가 한 테스트 방법에 문제가 있는지 알고 싶습니다.
다시 한 번 도움 부탁 드립니다.
|