All of My Records

[Oracle] 잠깐! Commit에 대해 알아보자 :: SQL Developer와 DBeaver의 commit 설정 특징

by 캐떠린

우리는 앞서 2개의 SQL Client Tool을 설치해봤다. (SQL Developer, DBeaver)

근데 이 두가지의 클라이언트 툴은 commit에 대한 기본 설정이 상이한데, 그 전에 과연 커밋이란 무엇인지 알아보자.

(Oracle DB 기준 내용)

 

Commit 이란?

우리는 DB Client Tool(SQL Developer, DBeaver)을 사용하여 DBMS(Oracle)를 조작한다.

DB Client Tool은 데이터의 일부분을 로컬에 복사해놓고, Tool에서 사용자(개발자)가 어떤 행동을 하면 로컬에만 반영하고 DBMS엔 반영하지 않는다.

먼저 SELECT문을 봐보자. SELECT문은 읽기만 하기 때문에 데이터 원본의 변화가 없다.

하지만 INSERT, UPDATE, DELETE문은 데이터 원본에 변화가 있다. 이 3가지는 앞서 말한 것처럼 로컬에 변경사항이 선 적용되고, 일이 다 끝나고 `COMMIT` 시 마지막에 한꺼번에 데이터베이스 원본에 반영하는 식으로 클라이언트 툴은 동작한다.

이때, ‘내 로컬에 반영된 내용을 실제 데이터베이스에 반영하겠습니다.’ 라는 의미를 가진 것이 바로 COMMIT 명령어다.

어떤 클라이언트 툴을 쓰던간에 INSERT, UPDATE, DELETE 3가지 작업에 한해서는 무조건 로컬에 선 적용되며, 오라클 서버에 올리기 위해서는 commit을 해줘야 한다.
하지만, DBeaver에서 INSERT한 후에 commit을 하지 않았는데 SQL Developer에서 데이터를 SELECT 시 조회되는 현상을 확인할 수 있다.

방금 위에서 commit을 해줘야만 DB에 반영된다고 했는데 왜 WHY? SQL Developer에서 DB내용을 불러와서 조회하는데 볼 수 있는걸까?
⇒ 바로 DBeaver 툴은 Auto-commit 기능이 기본적으로 켜져있기 때문이다.

SQL Client Tool 특징 Auto-commit(기본 설정)
SQL Developer Oracle 전용(최근에는 MySQL도 지원) false
DBeaver 모든 데이터베이스 범용 true( → But 지난 포스트에서 DBeaver 환경 설정 시 다 끄는 설정 해둠!)

 

Auto-commit이란?
클라이언트 툴에 있는 기능중 하나로 개발자가 commit 명령어를 실행하지 않더라도, INSERT/UPDATE/DELETE문을 실행할 때마다 자동으로 commit을 호출하는 기능이다.
클라이언트 툴마다 기본 설정이 다른데, SQL Developer는 기본적으로 Auto-commit(false)이나, DBeaver는 Auto-commit(true)이다. 우리는 Auto-commit을 일단 꺼주자!(위의 설정에서 끄긴 했으나 왕왕 자동 설정되는 경우가 있으니 주의해서 상단의 Auto-commit 탭 부분을 확인하도록 하자.

 

*글 작성에 참고한 내용: 학원 쌤의 열정적인 수업

블로그의 정보

All of My Records

캐떠린

활동하기