파워빌더와 MYSQL 사용하기
페이지 정보
작성자 정성규 댓글 0건 조회 15,426회 작성일 14-06-25 11:31본문
파워빌더와 MYSQL InnoDB 사용하기 - TRANSACTION ISOLATION LEVEL
나에게도 이런일이 발생하다니 !!
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
에 나와 있습니다.
-- 먼저 지금 사용하고 있는 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
을 추가하면 됩니다. ( 윈도우 서버에 설치한 경우 )
댓글목록
등록된 댓글이 없습니다.