티스토리 뷰

SQL 쿼리

sql에 commit 이란

KIMSG 2017. 7. 28. 11:31
오라클을 사용하는 개발을 하다가 insert한 데이터가 나오지 않는 오류가 발생했다.

DB를 직접 붙어서 작업을 마치고 웹페이지를 새로고침 했는데, 아무리 F5를 눌러도 나와야 하는 값이 다 나오지 않았다.

DB를 다시 써보고 다시 작업을 해도 일정 데이터만 나오고 그 뒤의 데이터는 나오지 않는 것이었다.

DB작업툴로 보면 데이터가 나오고 똑같은 쿼리로 작성해도 잘나왔다.

이유를 모르고 하루가 지나고 나서야. 이것이 DB작업툴에서 commit을 하지 않았던 오류인 것을 알았다.


DML언어를 사용할 때는 항상 COMMIT도 함께 해줘야 한다.


예를 들어, 100개의 데이터가 있었을 때 20개를 삭제하고 30개를 다시 입력한다.

그러면 총 110개의 데이터가 나와야 한다.

하지만, commit을 하지 않을 경우에는 기존의 100개만 데이터가 나온다.

이때! 100개중 20개는 새로 입력된 데이터로 나오게 될 것이다.


COMMIT

  • 모든 작업을 정상적으로 처리하겠다고 확정하는 명령어이다.
  • 트랜젝션의 처리 과정을 데이터베이스에 반영하기 위해서, 변경된 내용을 모두 영구 저장한다.
  • COMMIT 수행하면, 하나의 트랜젝션 과정을 종료하게 된다.
  • TRANSACTION(INSERT, UPDATE, DELETE)작업 내용을 실제 DB에 저장한다.
  • 이전 데이터가 완전히 UPDATE된다.
  • 모든 사용자가 변경한 데이터의 결과를 볼 수 있다.


하나의 트랜젝션이 종료가 되지 않으면 새로 추가된 10개의 데이터는 아직 인식을 하지 못하는 것이다.

기존에 할당된 데이터 영역이 20이 남아있었으므로 20만 보여주는 것이다.


DB 기본 설정에서 자동을 commit을 해주는 auto commit 을 설정할 수도 있다.

하지만, commit이 되고 나면 데이터 복구가 어렵기 때문에 주의 해야 한다.

또한 commit 이외에도 데이터 작업을 다시 이전의 상태로 돌리는 것을 rollback이라고 한다.

rollback은 commit 하기 이전의 상태만 복구를 할 수 있다.


실서버에서는 이런한 실수들과 혹시 모를 상황에 대비하여 항상 트랜잭션을 걸고 DB 작업을 사용해야 한다.

(고객 데이터 한줄을 날려 먹고 얼마나 손을 떨어가며 작업 했는지 모른다...)




  • ROLLBACK

    • 작업 중 문제가 발생했을 때, 트랜젝션의 처리 과정에서 발생한 변경 사항을 취소하고, 트랜젝션 과정을 종료시킨다.
    • 트랜젝션으로 인한 하나의 묶음 처리가 시작되기 이전의 상태로 되돌린다.
    • TRANSACTION(INSERT, UPDATE, DELETE)작업 내용을 취소한다.
    • 이전 COMMIT한 곳까지만 복구한다.
  • 트랜젝션 작업 중 하나라도 문제가 발생하면, 모든 작업을 취소해야 하기 때문에 하나의 논리적인 작업 단위로 구성해 놓아야 한다.

    • 문제가 발생하면, 논리적인 작업의 단위를 모두 취소해 버리면 되기 때문이다. 



그런데, 스프링 사용을 할 때 모든 쿼리의 끝 부분에 commit을 적은적이 없다.

우리가 sql문에서 적지 않는이유는 auto commit이 설정이 되어 있기 때문이다.

auto commit은 

JDBC에서 설정 할 수도 있고,
설치된 오라클에서 할 수도 있고,
마이바티스, 아이바티스에서 설정할 수도 있다고 한다.



오라클에서는 show autocommit  하면  알 수 있다.



'SQL 쿼리' 카테고리의 다른 글

join 과 쿼리 속도  (0) 2017.07.28
컬럼의 이름을 바꿔서 출력  (0) 2017.07.28
자동 쿼리정렬 사이트...  (0) 2017.07.28
큐브리드 세팅  (0) 2017.07.22
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함