데이터베이스

[DB]9.TCL&DCL

CodeJaram 2023. 6. 8. 23:56

[TCL]

1. TCL: 트랜잭션 제어어(COMMIT, ROLLBACK)(291p.)

 

2. 트랜잭션: 데이터베이스의 상태를 변화시키기 위해 수행하는 최소 수행단위

   ● 업무를 처리하기 위한 일련의 과정.

   ● 과정 중 하나가 처리되지 않으면 데이터 유실되므로 트랜잭션 단위로 실행.

      중간에 오류가 나면 모든 작업을 취소하고 처음부터 다시 처리한다.

 

예)직원에게 100만원 송금

 

● 트랜잭션의 특성

-원자성: 모두 실행/실행되지 않음

-일관성: 언제나 일관성 있는 상태로 유지

-고립성: 하나의 트랜잭션 실행 중 다른 트랜잭션 실행x

-지속성: 성공적으로 수행되는 트랜잭션은 영원히 반영

 

● COMMIT: 수행한 트랜잭션을 데이터베이스에 영구적으로 반영할 때 사용.

      마지막 COMMIT 시점 이후 실행한 트랜잭션 결과를 저장

   *DML(INSERT,DELETE, UPDATE)는 자동으로 COMMIT되지 않음

   *COMMIT하면 ROLLBACK해도 정보가 남아있다.

 

● ROLLBACK: 실행한 트랜잭션 결과에 대해 취소하고 싶을 때 사용

*마지막 COMMIT 시점까지만 복구가능

 

● DELETE(DML), TRUNCATE, DROP의 차이점

  -DELETE: 테이블의 데이터 삭제 ->COMMIT 전까지 복구가능(ROLLBACK)

  -TRUNCATE: 테이블의 데이터 영구삭제 ->복구 불가능

  -DROP: 데이터, 테이블 영구삭제 ->복구 불가능

 

3. SESSION: 데이터베이스에 접속해 있는 연결상태

*SQL DEVELOPER 2개 사용하면 세션 2개가 연결된 상태

 

4. 읽기 일관성: 트랜잭션이 완료되기 전까지 데이터를 직접 조작하는 SESSION 외에 

           다른 SESSION에서는 데이터 조작 전 상태의 내용이 일괄적으로 조회/출력/검색되는 특성

 

-하나의 세션을 사용하고 있을 때 다른 세션에서는 읽기만 가능

-하나의 세션에서 데이터를 수정하더라도 COMMIT 전까지 다른 세션에 데이터 반영되지

않음

 

5. LOCK: 특정 세션에서 조작중인 데이터는 트랜잭션이(COMMIT, ROLLBACK)되기 전까지

                 다른 세션에서 해당 데이터를 조작할 수 없는 상태

 

   -서로 다른 세션에서 같은 행을 조작하게 되면 먼저 조작한 세션에서 COMMIT해야 다른

    세션에서 데이터 변형한 것이 반영이 가능하다.

 

1번 창에서 아래 데이터를 UPDATE 하고 COMMIT하지 않으면

2번 창에서 아래 데이터를 UPDATE하고 반영하려고 해도 무한대기상태가 된다.

 

2번 창에서 데이터를 변형했어도 COMMIT하지 않으면

1번 창에서 테이블을 조회해도 2번 창에서 했던 데이터가 반영되지 않는다.

 

[DCL]

1. DCL: 데이터 제어어(GRANT, REVOKE, ROLE)(396p.)

2. GRANT: 권한 부여

사용자 생성

 

3. REVOKE: 권한 회수

4. ROLE: 권한 묶음

 

5. 스키마: 데이터베이스에 저장되는 데이터구조와 제약조건 등을 정의한 구조

예)테이블, 뷰, 인덱스, 시퀀스 등의 HR계정의 모든 객체는 HR 계정의 스키마

 

-스키마는 각 계정마다 존재하며 이름이 계정과 같음

-다른 계정의 스키마에 접근하려면 ‘스키마.테이블.컬럼’ 형태로 입력해야 함

참)접근권한이 없는 상태에서 다른 계정의 테이블을 조회하면 테이블이 실제로

존재하더라도 보안상의 문제로 테이블이 있다는 것을 알리지 않고 테이블이 존재하지

않는다고 오류를 출력한다.

 

-DCLTEST계정에서 HR계정의 EMPLOYEES 테이블을 변경한 후 COMMIT하지 않으면

HR계정에서 EMPLOYEES를 조회했을 때 변경사항이 반영되지 않는다(COMMIT 필수!).

 

6. 객체권한: 특정 사용자의 객체(테이블, 시퀀스…)에 권한을 주는 것(다른 계정의 테이블에

접근할 수 있는 권한)

 

 

'데이터베이스' 카테고리의 다른 글

[DB]10. 객체  (0) 2023.06.09
[DB]8.DML&서브쿼리  (1) 2023.06.07
[DB]7. DDL  (1) 2023.06.06
[DB]6. JOIN  (0) 2023.06.05
[DB]5. GROP BY&HAVING절  (0) 2023.06.01