auto commit 질문이요. 0 4 7,730

by kj2hw [Oracle 기초] [2013.01.19 12:14:08]



오라클 11g r2 버전(테스트용으로 사용)입니다. sqlplus에서 auto commit을 off로 설정한 후 DML문장을 사용하여 데이터를 편집하고 commit 없이 정상종료(exit)를 했습니다. 이럴경우 rollback이 되어야 맞는 것 아닌가요?
테스트해본 결과 commit이 되어 수정된 데이터가 저장이 되었기에 질문 드립니다. 
by kj2hw [2013.01.19 13:28:48]
http://blog.naver.com/phuchi?Redirect=Log&logNo=140165611358

위에 링크된 블로그에 가보면 exitcommit 이라는 설정을 off로 해주어야 정상종료시에도 rollback이 된다고 하는데 제가 지금 11g를 테스트해 볼 수 없는 상황이라 확인을 못했네요. 혹시 확인되시는분들은 답변부탁드려요! 아니면 제가 월욜날 테스트하고 결과 올리겠습니다. 감사합니다.

by Oracler [2013.01.19 16:23:45]
SQL*Plus의 AUTOCOMMIT 옵션은 INSERT, UPDATE, DELETE 또는 PL/SQL 블록이 성공적으로 실행될 때 자동으로 커밋이 이루어지게 할 것인가를 결정하는 것입니다. 이것은 SQL*Plus를 종료하는 것과는 아무런 상관이 없습니다. 다시 말해 AUTOCOMMIT 옵션을 OFF로 설정해도 EXIT 명령시 자동으로 커밋되는 기능이 정지되는 것은 아닙니다. 참고로 SQL*Plus의 AUTOCOMMIT 옵션의 기본 설정값은 OFF입니다. 

SQL*Plus 매뉴얼에 보면 AUTOCOMMIT 옵션이 EXIT 시 일어나는 커밋에 아무런 영향을 미치지 않는다고 나와 있네요.

SQL*Plus를 EXIT 명령으로 종료하게 되면 (이를 '정상종료'라고 합니다) 현재 실행중인 트랜잭션이 자동으로 커밋됩니다. SQL*Plus를 EXIT 명령이 아닌 ALT+F4 또는 우측 상단의 엑스 버튼을 클릭하여 종료하거나 클라이언트 컴퓨터가 리셋, 리부트 등이 되면 (이를 '비정상종료'라고 합니다.) 현재의 트랜잭션이 자동으로 롤백됩니다.


by kj2hw [2013.01.19 16:55:50]

orcler님 답변 감사합니다. sqlplus매뉴얼을 올려주셔서 찾아본 결과, exitcommit이라는 세팅값이 존재하는데 이 값의 기본값은 on입니다. exitcommit값이 on일 경우에는 commit의 여부와 상관없이 exit(정상종료)를 하면 commit이 됩니다. 반대로 off로 세팅해 놓은 상태에서 DML을 입력 후 commit없이 exit을 했다면 rollback이 됩니다. 설명 감사합니다. 링크보고 궁금한점을 찾아볼 수 있게 되었습니다.


by Oracler [2013.01.20 16:53:31]
추가 설명 고맙습니다. 저도 공부가 되었네요.^^
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입