SQL
ORACLE SQL_12) DCL(Data Control Language) , TCL(Transaction Control Language)
2025. 8. 5. 15:48

   <DCL : 데이터 제어문>
계정에 시스템 권한 또는 객체 접근 권한을 부여하거나 회수하는 구문 
누가 어떤 객체에 무엇을 할 수 있는지를 통제한다.
 > 시스템 권한 : DB객체 생성, 사용자 생성 권한 등 관리자 권한 
 > 객체 접근 권한 : 테이블, 뷰, 시퀀스 등 특정 객체에 접근할 수 있는 권한
  

  1) 사용자 생성 
  CREATE USER 사용자명 IDENTIFIED BY 비밀번호;
 
  2) 권한 부여 방법 
  GRANT 권한(RESOURCE, CONNECT) TO 계정;
  
  3) 권한 회수
  REVOKE 권한 TO 계정;

  >>    관리자 계정 생성 후 사용자 계정으로 접속하기 위해 사용했었다. 

-- 사용자 계정 생성
CREATE USER c##SERVER IDENTIFIED BY SERVER;

-- 접속 권한 및 테이블 생성 권한 부여
GRANT CONNECT, RESOURCE TO c##SERVER;

-- 테이블스페이스 설정
ALTER USER C##SERVER DEFAULT TABLESPACE USERS QUOTA UNLIMITED ON USERS;

 


  > ORACLE은 기본적으로 사용자 생성 후 권한을 부여해야 로그인 및 객체 사용이 가능하다.
  

SELECT * FROM ROLE_SYS_PRIVS;

부여된 권한을 조회하는 명령어



   <TCL : 트랜잭션 제어문>
 트랜잭션은 하나 이상의 DML문(INSERT, UPDATE, DELETE)을 묶어서 하나의 논리적 작업 단위로 처리하는 개념
 
 DML문 한 개를 수행할 때 트랜잭션이 존재하지 않으면 트랜잭션을 만들어서 묶는다.
                      트랜잭션이 존재하면 해당 트랜잭션에 작업을 묶어서 처리한다.
        

 주요 2개 명령어
 COMMIT : 트랜잭션 확정 및 저장
 ROLLBACK : 트랜잭션 취소 및 이전 상태로 복원 
 
 그 외 명령어 
 SAVEPOINT : 롤백용으로 중간지점을 지정
 ROLLBACL TO : 특정 지점까지 복원


 대부분 요즘은 AUTOCOMMIT이 설정되어 있어서 DML을 전달할 때 마다 자동으로 커밋이 된다.

AUTOCOMMIT 여부를 확인할 수 있다.

SHOW AUTOCOMMIT;


AUTOCOMMIT을 수동 설정 할 수 있다. ON -> 자동으로 DML 실행 시 마다 COMMIT이 진행됨.

SET AUTOCOMMIT ON;
SET AUTOCOMMIT OFF;

 

 

DROP TABLE EMP_01;

CREATE TABLE EMP_01
AS (SELECT EMP_ID, EMP_NAME, DEPT_TITLE FROM EMPLOYEE JOIN DEPARTMENT ON(DEPT_CODE = DEPT_ID));

SELECT * FROM EMP_01;

-- 사번이 200, 201번인 사원 제거 
DELETE FROM EMP_01
WHERE EMP_ID IN (200, 201);
ROLLBACK;

 

DELETE FROM EMP_01
WHERE EMP_ID IN (200, 201);
COMMIT;
ROLLBACK;




-- 사번이 217, 216, 214번인 사원 제거 

DELETE FROM EMP_01
WHERE EMP_ID IN(213, 216, 217);

SELECT * FROM EMP_01;

SAVEPOINT SP;

INSERT INTO EMP_01
VALUES(801, '전준우', '기술지원부');
INSERT INTO EMP_01
VALUES(802, '윤동희', '창업지원부');

ROLLBACK TO SP;
COMMIT;

SELECT * FROM EMP_01;

INSERT INTO EMP_01
VALUES(801, '전준우', '기술지원부');
INSERT INTO EMP_01
VALUES(802, '윤동희', '창업지원부');

CREATE TABLE TEST(
    TID NUMBER
);

ROLLBACK;

SELECT * FROM EMP_01;



    ===>>

    DDL문 (CREATE, ALTER, DROP)을 수행하는 순간 기존 트랜잭션은 무조건 COMMIT 된다. (실제 DB반영)
    즉, DDL 문 수행 전 변경사항들이 있다면 정확하게 픽스하고 해야한다.
    
    ACID 속성
    트랜잭션의 일관성과 신뢰성을 보장하기 위해 지켜야하는 4가지 핵심 속성 
    

    A(Automicity) 원자성 : 트랜잭션 내 작업은 모두 완료되거나, 모두 취소되어야 한다.
    C(Consistency) 일관성 : 트랜잭션 수행 전후에 db상태가 항상 유효한 상태(제약조선 충족)여야 한다.
    I(Isolation) 독립성 : 여러 트랜잭션이 동시에 실행되어도 서로 간섭 없이 독립적으로 실행되어야 한다.
    D(Durability) 지속성 : 트랜잭션이 COMMIT 되면, 그 결과는 시스템이 종료되고 영구적으로 보존되어야 한다.

'SQL' 카테고리의 다른 글

ORACLE SQL_14) SEQUENCE  (0) 2025.08.06
ORACLE SQL_13) VIEW  (4) 2025.08.05
ORACLE SQL_11) DML - Data Manipulation Language  (0) 2025.08.05
ORACLE SQL_10) DDE (ALTER, DROP)  (1) 2025.08.04
ORACLE SQL_09) DDL - Data Definition Language  (2) 2025.08.04