MSSQL 2000 을 쓸때는 이런 문제가 없었는데...
이번에 MSSQL 2008로 바꾸고 데이터를 확인중에 데이터의 이상을 바결하게 됩니다..
재고가 1000 개 인데..
출고를 500 개 하고
재고현황을 실행해서 재고를 확인하면 1000개로 나옵니다..
한 5분정도 있다가 다시 들어가서 확인하면 500개로 바뀌고 출고가 되었다고 나오는데...
SQL 2000 일때는 출고후 바로 재고현황 확인하면 바뀌어 있었는데..
SQL 2008로 바뀌고 나서부터 이런 문제가 생기네요..
혼자 쓰는 거면 상관없는데...
두사람이 재고를 확인하고 출고하려고 할때..
A 라는 사람이 먼저 500개 출고를 해서 재고가 500개 밖에 없는데...
B라는 사람이 재고를 확인하니 1000개가 나와서
그중에 700개를 출고하면
재고현황에서 - 200개로 나와버려요..
두 사람 모두 자기가 볼때는 재고가 1000개로 나왔다고 하고요...
프로그램에서는 재고 보다 많이 출고가 않되게 막혀 있는데.. 출고가 되는 거 보면...
그 사람들 말이 맞는건데... 이런 경우가 자꾸 생깁니다.. 어디를 확인해 봐야 할까요?
무슨 설정이 잘못된건지 혹시 아시는분 방법좀 알려 주세요
Comment 4
-
minsouk
2014.03.07 22:29
-
랜덤의세계
2014.03.11 08:50
답변 감사합니다.
방어 로직 한번 고려해 봐야 겠네요.. ^^
-
맨즈밤
2014.03.10 10:46
사람 A,B를 예로든건 같은 화면을 여러명이 사용할경우 나울수있죠. 같은 화면 ,같은 데이터를 화면에 띄워놓고 A가 먼저 수정하더라도 B가 보는 화면은 갱신이 안되니 생기는 문제입니다. 또는 순차적으로 띄웠더라도 A의 처리가 끝나지 않은시점에서 B가 READ UNCOMMITTED 모드로 자료조회했어도 생길수있죠.. 음수여부를 떠나 사용자가 의도치않은 데이터가 만들어지기 때문에, 저장 직전해당자료의 변경여부를 체크하는 로직이 필요합니다.
근데 이해가 안되는건
"재고가 1000 개 인데..출고를 500 개 하고 재고현황을 실행해서 재고를 확인하면 1000개로 나옵니다..
한 5분정도 있다가 다시 들어가서 확인하면 500개로 바뀌고 출고가 ~~~" 이부분인데요. 단일세션에서 한제품으로 테스트한거가
이런 결과가 나왔다는 말씀이시죠? 한제품 출고처리가 오래걸리진않을텐데요. 그럼 해당 처리가 트랜잭션 진행중이면
읽히지 않던가(READ COMMITTED) , 읽히더라도(READ UNCOMMITTED) 500이 조회되야 할듯한데...1000이 읽혔다는게,,,
설마 격리수준을 스냅샵모드로 바꾸신건 아니신지요? 또는 로직자체에 결함이 없는지 살펴보셔야 할듯합니다.
-
랜덤의세계
2014.03.11 08:51
저도 실제로 본게 아니고 거래처 갔더니.. 직원들이 설명을 하더군요..
영업부 직원들이 사용을 하는데 재고가 자꾸 이상해 진다고 하며 설명을 토대로 제가 적어 놓은건데.. 좀 부족한 면이 있나 봅니다..
고민해 봐야 겠습니다.
.