DB 초보 질문 드립니다..(트랜잭션 점유 연관) 1 4 1,908

by DB_SQL [SQL Query] 오라클 SQL [2023.05.29 19:10:26]


안녕하세요? DB 초보 질문드립니다.

제가 하고자 하는 것은, 오라클에서 시퀀스 관리인데 오라클 고유기능인 SEQUENCE를 사용하지 않고 하는 것입니다. 

 

Sequence_save라는 테이블을 따로 만들어서 해보고자 합니다 .

 

Sequence_save라는 테이블의 구조는 다음과 같습니다.

max_sequence number,
year   number,
chasu number
 

여기에서 

select max_sequnece
from Sequence_save
where year=2017
and chasu=1
for update

이를 통해 트랜잭션을 잡아놓고, 

이 시퀀스를 사용한 뒤에

update Sequence_save
set max_sequnece = max_sequnece+ 1
where year=:year
and chasu=:chasu
commit

 

이렇게 하면 트랜잭션 점유 문제가 발생하진 않을까요?

 

고수님들 도와주세요.

by DB_SQL [2023.05.29 19:27:09]

위에서 begin end 등은 생략했다고 봐주시면 감사하겠습니다 !

제가 궁금한 것은 동시에 여러 사용자가 Sequence_save 테이블에 접근시 특정 sequence를 조회할 때 첫 번째 사람이 선점하고 sequence를 1 증가시키고 커밋하면 그 다음 사람이 기다렸다가 증가된 sequence 값을 조회하는 것을 하고 싶습니다.


by DB_SQL [2023.05.29 21:09:05]

더불어 commit과 rollback만 잘하면 데드락 걸리는 염려는 안해도 되나요?


by 마농 [2023.05.30 02:49:42]

네 위와 같이 사용자 시퀀스 사용 가능합니다.
이 시퀀스를 "사용"한 뒤에 커밋한다는 표현이 있는데.
"사용"의 의미가 뭔지?
전체 트렌젝션을 모두 마친후에 커밋한다?라는 의미라면?
이렇게 하면 안됩니다. 최대한 락을 짧게 가져가야 하므로
- 비추 : 시퀀스 락 > 시퀀스 사용 업무트렌젝션 완료 > 시퀀스 업데이트 > 커밋 (X)
- 추천 : 시퀀스 락 > 시퀀스 업데이트 > 커밋(락 즉시 해제) > 시퀀스 사용 업무트렌젝션 완료 > 커밋 (O)


by DB_SQL [2023.05.30 09:12:01]

감사합니다

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입