티베로 db에 채번을 insert 할때 채번tb에 100번까지 번호가 있다고 가정할때
A라는 사람이 입력을 할때 101번을 따면서 아직 commit을 안한상태인데
B라는 사람이 동시에 입력을 할때 같은 101번을 따버리네요.
A라는 사람이 처리가 끝날때까지 B를 대기시키고 싶은데
혹시 티베로 자체의 테이블에 트랜잭션을 설정하는 옵션이 있는지 궁금합니다.
안녕하세요 티베로 담당자입니다.
말씀하신 내용으로 유추해보면
채번할때 "번호" 컬럼의 MAX 값을 SELECT해서 +1하는 형태로 사용하시는것 같은데요
이럴경우에는 말씀하신것처럼 유일한 채번값을 보장하지 않습니다.
이것은 티베로에서만 발생하는 현상은 아니며
대부분의 DBMS에서는 효율적인 LOCK 관리를 위해서는 SELECT할때 LOCK을 잡지 않습니다.
원하는 처리방식이 중복되지 않는 채번값을 얻어오는 것이라면 SEQUENCE 객체를 사용하시면 됩니다.
사용방법은 다른 DBMS의 SEQUENCE 객체나 자동증가 필드와 유사하고
SEQUENCE에 대한 자세한 설명은 티베로 Admin메뉴얼과 SQL 레퍼런스 메뉴얼을 참고하시기 바랍니다.
예제)
### 테이블 생성 ### CREATE TABLE 테이블 (번호 NUMBER(3), 날짜 DATE, 아이디 VARCHAR(10)); INSERT INTO 테이블 (번호, 날짜, 아이디) VALUES (100, SYSDATE, 'AAA'); ### 시퀀스 생성 ### CREATE SEQUENCE test_seq INCREMENT BY 1 START WITH 101 MINVALUE 1 MAXVALUE 100000 NOCYCLE;
### SEQUENCE 객체를 이용한 INSERT ### INSERT INTO 테이블 (번호, 날짜, 아이디) VALUES (TEST_SEQ.NEXTVAL, SYSDATE, 'AAA');