오라클 DB 강제 lock 발생 방법 질문드립니다. 0 5 1,488

by 무야호옹 [Oracle 기초] [2021.11.02 13:07:37]


하나의 트랜잭션으로 insert 후 procedure(){ insert } 작업이 있습니다.

procedure 작업 도중에 db에 락이 발생했을때, 롤백 작업을 확인하고자 합니다.

 

DB 사용중에 DB를 못쓰게 할 수 있는 방법이 있을까요?

JAVA, ORACLE db, MYBATIS 사용중입니다.

by pajama [2021.11.02 15:16:21]

질문하신 내용이 정확히 이해가 잘 안되네요.

프로시저에서 특정 테이블 insert하는 작업중에 다른 세션이 변경을 못하도록 하는걸 말씀하시는 거라면

프로시저에서 insert 작업전에 exclusive lock을 설정하시면 됩니다.

lock table tablename in exclusive mode;

insert into tablename ...

commit;


by 무야호옹 [2021.11.02 15:32:41]

답변 감사드립니다.

제가 글을 워낙 못써서 죄송합니다...ㅜㅜ

프로시저 작업 도중에 DB를 사용못하게 만들어서 강제로 에러를 발생시키고자 합니다.


by pajama [2021.11.02 16:19:50]

프로시저 작업을 수행중인 세션만 강제 종료하면 해당 세션에서 수행한 작업 롤백됩니다~

http://www.gurubee.net/lecture/1156


by 마농 [2021.11.02 15:32:44]

테이블 락이 아닌 DB 전체 락이라니요?
왜 이런 위험한 발상을 하나요?
DB 락은 말이 안되는 듯 하구요.
테이블 락을 걸어도 되지만.
SELECT FOR UPDATE 를 통해 작업 대상 행만 락을 거는 걸 추천합니다.


by 무야호옹 [2021.11.03 11:11:00]

답변 감사드립니다.

공부중에 해당 내용부분이 궁금해져 질문드렸습니다.

프로시저내에서 반복적으로 insert를 사용중이므로 해당 테이블에 다른 락은 안걸리기에 db 전체에 락을 생각했었습니다.

답변 주신 내용을 토대로 많은 공부가 되었습니다. 감사합니다.

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