sybase의 identity옵션이 불안정하더군요..
가끔씩 큰숫자로 튀어버리는 경우가 생기기도하고
저희 시스템에서 identity를 배제하는 방향으로 가고 있어서
순차증가를 다른 방법으로 구현해야합니다.
순차증가를 위해 해당 필드의 최대값을 select해온 이후에
하나 증가시켜 insert하는 방법으로 구현을 했었는데
이런경우 동일한 프로세스가 여러개 뜬 상태에서
동시다발적인 select가 일어나게되면 모두가 같은 최대값을 가져와
동일한 값으로 insert하게 되는 일이 생깁니다.
이것을 해결하기 위해서 single process 모델이라던지
select전에 전체 테이블 락을 걸고 insert가 끝난후에 락을 푸는 방식이라던지
여러가지를 고려해봤는데 딱 이거다 싶은 방법이 없더군요...
혹시 sql단에서 해결할 수 잇는 방법이 없을까요?
누군가 "select ......... for update" 이렇게 써주면 db가 insert하기 위한
select라고 인식해서 자동으로 락을 건다고 하던데...
그런 기능하는게 맞는건지...
도움 부탁드립니다. 답글주시거나 메일 주시거나 둘중에
편하신 방법으로... 해주시기 바랍니다.
|