by 무야호옹 [Oracle 기초] [2021.11.02 13:07:37]
하나의 트랜잭션으로 insert 후 procedure(){ insert } 작업이 있습니다.
procedure 작업 도중에 db에 락이 발생했을때, 롤백 작업을 확인하고자 합니다.
DB 사용중에 DB를 못쓰게 할 수 있는 방법이 있을까요?
JAVA, ORACLE db, MYBATIS 사용중입니다.
질문하신 내용이 정확히 이해가 잘 안되네요.
프로시저에서 특정 테이블 insert하는 작업중에 다른 세션이 변경을 못하도록 하는걸 말씀하시는 거라면
프로시저에서 insert 작업전에 exclusive lock을 설정하시면 됩니다.
lock table tablename in exclusive mode;
insert into tablename ...
commit;
답변 감사드립니다.
제가 글을 워낙 못써서 죄송합니다...ㅜㅜ
프로시저 작업 도중에 DB를 사용못하게 만들어서 강제로 에러를 발생시키고자 합니다.
프로시저 작업을 수행중인 세션만 강제 종료하면 해당 세션에서 수행한 작업 롤백됩니다~
http://www.gurubee.net/lecture/1156
테이블 락이 아닌 DB 전체 락이라니요? 왜 이런 위험한 발상을 하나요? DB 락은 말이 안되는 듯 하구요. 테이블 락을 걸어도 되지만. SELECT FOR UPDATE 를 통해 작업 대상 행만 락을 거는 걸 추천합니다.
공부중에 해당 내용부분이 궁금해져 질문드렸습니다.
프로시저내에서 반복적으로 insert를 사용중이므로 해당 테이블에 다른 락은 안걸리기에 db 전체에 락을 생각했었습니다.
답변 주신 내용을 토대로 많은 공부가 되었습니다. 감사합니다.