본문 바로가기

순이코딩/데이터베이스

[데이터베이스] SQL - TCL / DCL

728x90
반응형

1. TCL

 

TCL은 트랜잭션을 제어하는 것입니다.

트랜잭션이란 "쪼갤 수 없는 업무 처리의 최소 단위"를 의미하는데 데이터베이스에서는 상태를 변화시키기 위해 수행하는 작업의 단위를 의미합니다.

트랜잭션에 대한 이해 돕기

 

 

■ COMMIT / ROLLBACK

 

COMMIT은 마지막 COMMIT 시점 이후 실행한 트랜잭션 결과를 데이터베이스에 영구 저장하는 것입니다.

ROLLBACK은 실행한 트랜잭션 결과에 대해 실행하기 전 상태로 원상 복구하는 것입니다. 마지막으로 COMMIT 한 시점까지만 ROLLBACK이 가능합니다.

보통 DML(UPDATE, INSERT, DELETE)한 대상은 바로 테이블에 영구 반영되는 것이 아니므로 COMMIT을 명시해야 합니다.

SAVEPOINT는 ROLLBACK명령어에 대해 특정 지점까지만 복구하도록 조절하는 기능이 있습니다.

 

■LOCK

 

LOCK은 둘 이상이 세션이 똑같은 행을 조작하려고 할 때 충돌하는 현상입니다. (이것을 베타 LOCK이라고 합니다.) 서로 다른 행을 조작하면 LOCK이 발생하지 않으니 DML작업 시 미리 협의(범위를 미리 지정)해야 합니다.

만약 LOCK에 걸리게 되면 트랜잭션이 작업을 진행하지 못하고 멈추게 됩니다.(BLOCKING)

이때 LOCK을 해제하려면 원인이 되는 세션(먼저 작업하던 세션)에서 COMMIT 혹은 ROLLBACK을 해야 합니다. 또는 DBA(데이터베이스 관리자)에게 풀어달라고 요청해야 합니다. LOCK 및 세션의 KILL 방법을 조회해 직접 세션을 KILL 하는 방법도 있습니다.

LOCK을 해제하는 방법이 있지만 이러한 경합은 성능에 좋지 않으니 반드시 협의 후 작업해야 합니다.

 


 

 

2. DCL

 

DCL(Data Control Language)은 데이터 제어어로 데이터에 접근하거나 객체에 권한을 부여하는 역할을 합니다.

 

■ GRANT / ROLE / REVOKE

 

GRANT는 특정 작업에 대한 수행  권한을 부여합니다.

GRANT 부여할권한 ON 대상객체 TO 부여받을계정
GRANT CREATE TABLE ON SERVICE TO(새로운 계정)

위의 쿼리는 '새로운 계정'에게 SERVICE 서버에 테이블을 만들 수 있는 권한을 부여한다는 뜻입니다.

ROLE은 여러 권한을 그룹으로 묶어서 사용할 수 있게 합니다. 자주 사용하는 권한끼리 묶어 놓아 새로운 계정에게 편하게 권한을 부여할 수 있습니다.

CREATE ROLE ROLE2 ;
GRANT CREATE TABLE, CREATE SESSION TO ROLE2 ;
GRANT ROLE2 TO SERVICE ;

그룹 ROLE2를 만들고, ROLE2에게 권한을 부여한 후, 계정에 ROLE2를 부여하고 있는 쿼리입니다. 그룹을 만들어놓으면 이후부터는 계정에 권한을 그룹으로 부여하기 때문에 유용합니다.

REVOKE는 특정 작업에 대한 권한을 박탈, 회수합니다.

REVOKE 회수할권한 ON 회수할객체 FROM 회수당할계정

GRANT와 문법이 비슷합니다. GRANT는 계정에게 부여하는 것이기에 TO, REVOKE는 계정으로부터 회수하는 것이기에 FROM을 사용합니다.

728x90
반응형