데이터베이스의 작업 단위 트렌잭션 & 테이블 복사

티스토리 메뉴 펼치기 댓글수0

Dev Center/DB + JSP start

데이터베이스의 작업 단위 트렌잭션 & 테이블 복사

seanhigher
댓글수0
데이터 베이스는 데이터가를 안전하게 지키는 것이 가장 중요하기 때문에, 일정 부분에 대해서는 실수도 보장을 해주는데, 이것을 롤백이라고 한다. 그리고 작업을 이루는 단위는 트랜잭션이라고 한다.



트랜잭션단위
데이터베이스에서 이루어지는 작업의 최소단위를 트랜잭션 단위라고 한다. 테이블을 생성하거나, 데이터를 삭제하거나, 제약조건을 추가하거나, 이런 모든 작업들을 하나의 트랜잭션이라고 할 수 있다. 데이터베이스에서 이런 작업을 기록하는 이유는, 사용자, 또는 시스템상의 실수를 보상하기 위해서이다. 만일 은행 계좌에서 돈을 인출하는 과정을 하나의 트랜잭션이라고 할때, 돈을 인출하고, 그것을 확인하는 과정에서 시스템이 정지 되었다고 가정해보자. 그렇다면, 돈을 인출한 것이 사용자에게 확인이 되지 않았기 때문에 인출하기 이전의 상태로 돌아가야 한다. 하지만, 이미 이루어진 작업에 대해서 돌이킬 수 없다면, 어느 누구도 보상해주지 않는것이다. 이런 상황을 되돌려 주는 기능이 롤백 기능이다.


COMMIT, ROLLBACK, 그리고 SAVEPOINT
그렇다고 데이터베이스의 모든 작업이 무한정으로 저장되는 것은 아니다. COMMIT이라는 명령어를 받아들이기 전까지의 행동을 기억하게 된다. COMMIT 이라는 것은 일종의 확인으로, 한번 COMMIT을 하게 되면 더이상은 되돌리지 않겠다는 확인의 의사 표현과 동일하다. 그래서 한번 ROLLBACK을 하게 되면 이전에 COMMIT을 한 이후 최초의순간으로 돌아가게 되는 것이다. 하지만, 이런식으로 작업을 되돌리기에는 허술한 감이 없잖아 있는데, SAVEPOINT를 주어 단계적으로 작업을 되돌리는 것이 가능하다. 물론 그 사이에 COMMIT을 하게 된다면 모든것은 그냥 '인정' 되어버리고 만다.

삭제 1;
SAVEPOINT S1;
삭제 2;
삭제 3;
SAVEPOINT S2;
삭제 4;
삭제 5;
ROLLBACK TO S2;

위와 같은 순서대로 쿼리문을 진행하게 되면, 삭제된 4, 5는 원래대로 돌아오게 된다. 그리고 한번더 ROLLBACK S1을 실행시키면 삭제된 2, 3 도 원래대로 돌아오게 된다. 하지만 ROLLBACK S2 를 하지 않은 상태에서 S1 을 곧바로 실행한다면 S2 의 상태로는 되돌릴 수 없게 된다. 순차적인 회복만 가능한 것이다.


테이블을 복사하는 방법.
테이블을 복사하는 방법에는 두가지가 있다. 테이블의 형식만 복사하는 방법과, 테이블과, 데이터를 통채로 복사하는 방법이다.

CREATE TABLE 새로운테이블명 AS SELECT * FROM 대상테이블명 WHERE 1=0;
DESC 새로운테이블명;
CREATE TABLE 새로운테이블명 AS SELECT * FROM 대상테이블명;

테이블을 복사하기 위해서는 AS 절을 사용할 수 있다. 새로운 테이블명으로 테이블을 생성하고, 그 안에 들어갈 내용을 AS 를 사용해 표시해 주면 된다. 만일 조건으로 1=0 을 할경우엔 테이블의 구조만을 복사하게 되고, 조건이 없을 경우에는 모든 데이터까지 한번에 복사가 된다. DESC 명령은 테이블의 구조를 간편하게 볼 수있도록 해준다. 혹여나 테이블의 구조만 복사한 후에 테이블에서 데이터만을 복사해 넣고 싶다면, 다음과 같이 사용하는 것이 가능하다.

INSERT INTO 새로운테이블명 SELECT * FROM 대상테이블명;

위의 쿼리는 대상테이블의 모든 데이터를 새로운테이블에 복사하게 된다. 물론 새로운테이블과 대상테이블의 테이블 구조는 동일해야 한다.

맨위로