한국어

파워빌더 MYSQL  InnoDB 사용하기 - TRANSACTION ISOLATION LEVEL

 

나에게도 이런일이 발생하다니 !!

 

http://database.sarang.net/?inc=read&aid=22429&criteria=mysql&subcrit=&id=&limit=20&keyword=lock&page=9

 

MYSQL InnoDB 와 파워빌더 10.5 를 이용하여 업무용 프로그램을 개발하고 있습니다.

 

MYSQL 5.x    InnoDB 버젼부터는 저장 프로시져 및 트리거 등이 잘 작동하는 것을 확인하고

 

한미 FTA에 대비하여 업무에 MYSQL 을 배치하려 하고 있습니다.

 

 

개발도 원활하고 문제도 없고... 이젠 실전 배치해야지 하고 2명이 모여 테스트를 진행하는데

 

파워빌더로 프로그램을 열어 갑(甲)이 저장을 하고 데이타를 을(乙)이 확인하는데

 

왠걸... 갑은 분명히 저장하고 조회해 보면 값이 나오는데

 을(乙)은 조회 해 보면 값이 안나오는거죠..

 

물론  을(乙)이 프로그램을 닫았다가 다시 열면 갑(甲)이 저장한 값이 보입니다.

 

 

찾아 보니 대략 무시 하고 살던 트랜젝션 격리수준 ( TRANSACTION ISOLATION LEVEL) 이 문제더군요.

 

이참에 정리 한번 해보면 

 

DBMS               DEFAULT TRANSACTION ISOLATION LEVEL

MS-SQL            READ COMMITTED

ORACEL            READ COMMITTED

MY-SQL            REPEATABLE READ

 

으로 되어 있습니다.

 

 

파워빌더에서 MYSQL InnoDB  을 이용하는 경우

 

갑(甲)이 트랜잭션을 열며 프로그램을 실행하고

 

을(乙)이 트랜잭션을 열며 프로그램을 실행하는 경우

 

 REPEATABLE READ 라는  트랜젝션 격리수준 ( TRANSACTION ISOLATION LEVEL) 때문에

 

갑이 변경한 값을 을이 볼수가 없는 것입니다.

( 물론 수시로 을이 프로그램을 껐다가 다시 열면 되긴 합니다만 )

 

 

이럴경우 MYSQL이 공짜라 허접한거  아니냐고 우기면 웃겨지는 거죠...

 

 

해결 방법은

 

http://dev.mysql.com/doc/refman/5.1/en/set-transaction.html#isolevel_read-uncommitted 

 

http://www.mysqlkorea.co.kr/sub.html?mcode=manual&scode=01&m_no=21881&cat1=14&cat2=422&cat3=444&lang=k

 

에 나와 있습니다.

 

-- 먼저 지금 사용하고 있는 mysql TRANSACTION ISOLATION LEVEL을 확인합니다.

SELECT @@GLOBAL.tx_isolation, @@tx_isolation;

 

아마도 REPEATABLE READ이라고 나올겁니다. 기본값이니까요.

 

그러면 트랜젝션 격리수준 변경은 아래와 같습니다.

 

SET GLOBAL tx_isolation='READ-COMMITTED' ;
SET SESSION tx_isolation='READ-COMMITTED' ; 

 

하지만 MYSQL 이 시작할 때 Default TRANSACTION ISOLATION LEVEL을 변경 하고 싶다면

( 매번 설정을 바꿔주는 건 너무 힘드니 거의 모두 그렇게 해야 겠죠 )

 

MYSQL 의 설치 폴더의 my.ini 에

 

 [mysqld]영역에 추가

transaction-isolation = REPEATABLE-READ

 

을 추가하면 됩니다.  ( 윈도우 서버에 설치한 경우 )

Copyright ⓒ Fallen Leaves™ 2000~2018 All rights reserved.
XE Login