쌍용교육(JAVA)/SQL

(수정필요?)쌍용교육 -SQL 수업 20일차 (데이터 베이스 트랜잭션,데이터 베이스 객체)

구 승 2024. 4. 12. 10:12

데이터 베이스 트랜잭션

트랜잭션은 데이터 처리의 한 단위 오라클 서버에서 발생하는 SLQ문들을 하나의 논리적인 작업 단위로써 성공하거나 실패하는 일련의 SLQ문을 트랜잭션이라고 할 수 있음 트랜잭션은 데이터를 일관되게 변명하는 DML 문장으로 구성됨

 

1) 트랜잭션의 시작

실행 가능한 SQL문장이 제일 처음 실행될 때

 

2) 트랜잭션의 종료

COMMIT 이나 ROLLBACK

DDL이나 DCL문장의 실행(자동 COMMIT)

기계 장애 또는 시스템 충돌(crash)

deadlock 발생

사용자가 정상 종료

 

3) 자동 COMMIT은 다음의 경우 발생

DDL, DCL 문장이 완료 될 때

명시적인 COMMIT이나 ROLLBACK 없이 SQL*Plus를 정상 종료 했을 경우

 

4) 자동 ROLLBACK은 다음의 경우 발생

SQL*Plus를 비정상 종료 했을 경우

비정상적인 종료

system failure

 

5) COMMIT(변경사항 저장) & ROLLBACK(변경사항 취소)

 

- COMMIT과 ROLLBACK의 장점

 

6) 트랜잭션의 4가지 성질

원자성(Atomicity) 트랜잭션에 포함된 작업은 전부 수행되거나 아니면 전부 수행되지 않아야 all or noting 한다.
일관성(Consistency) 트랜잭션을 수행하기 전이나 수행한 후나 데이터베이스는 항상 일관된 상태를 유지해야 한다.
고립성(Isolation) 수행 중인 트랜잭션에 다른른트랜잭션이 끼어들어 변경 중인 데이터 값을 훼손하는 일이 없어야 한다.
지속성(Durabitity) 수행을 성공적으로 완료한 틀내잭션은 변경한 데이터를를영구히 저장해야 한다. 저장된 데이터베이스는 저장 직후 혹은 어느 때나 발생할 수 있는 정전, 장애 오류에 영향을 받지 않아야 한다.
  • 데이터의 일관성을 제공
  • 데이터를 영구적으로 변경하기 전에 데이터 변경을 확인하게 함
  • 관련된 작업을 논리적으로 그룹화 함
  • COMMIT, ROLLBACK 문장으로 트랜잭션의 논리를 제어

 

- COMMIT이나 ROLLBACK 이전의 데이터 상태

  • 데이터 이전의 상태로 복구 가능
  • 현재 사용자는 SELECT문장으로 DML작업의 결과를 확인
  • 다른 사용자는 SELECT문장으로 현재 사용자가 사용한 DML문장의 결과를 확인할 수 없음
  • 변경된 행은 LOCK이 설정되어서 다른 사용자가 변경할 수 없음

 

- COMMIT이후의 데이터 상태

  • 데이터베이스에 데이터를 영구적으로 변경
  • 데이터의 이전 상태는 완전히 상실
  • 모든 사용자가 결과를 볼 수 있음
  • 변경된 행의 LOCK이 해제되고 다른 사용자가 변경할 수 있음
트랜잭션 제어
시간     commit  ←----------------------------------------------------------------
            트랜잭션                                                                                |
           SAVEPOINT A ←----------------------                                        |
             INSERT                                       |                                       |
                                                                  |                                       |
             UPDATE                                      |                                       |
           SAVEPOINT B ←------                   |                                       |
              INSERT                    |                  |                                       |
                              SAVEPOINT B로    SAVEPOINT A로             ROLLBACK  
                                   ROLLBACK         ROLLBACK



명령문 설명
commit 보류 중인 모든 데이터 변경 내용을 영구히 저장하고 현재 트랜잭션을 종료
savepoint name 현재 트랜잭션 내에 저장점을 표시
rollback rollback은 보류 중인 모든 데이터 변경 내용을 버리고 현재 트랜잭션을 종료 
rollback to 
savepoint name
Rollback to savepoint는 현재 트랜잭션을 지정된 저장점으로 롤백하여 롤백하는 저장점 이후에 생성된 모든 변경 내용 및 저장점을 버림. to savepoint 절을 생략할 경우 rollback 문은 전체 트랜잭션을 롤백. 저장점은 논리적인 것이므로 작성한 저장점을 나열할 수 없음. 
*savepoint는 ANSI표준 SQL이 아님.
ex)
update …..
savepoint update_done;
Savepoint created.
insert ….
rollback to update_done;
Rollback complete.

데이터 베이스 객체

객체 설명
테이블 기본 저장 단위로 행과 열로 구성
논리적으로 하나 이상의 테이블에 있는 데이터의 부분 집합을 나타냄
시퀀스 숫자 값 생성기
인덱스 질의의 성능을 향상
동의어 객체에 다른 이름을 제공
데이터 베이스 객체

테이블 : 기본 저장 단위로 행과 열로 구성
테이블은 기본적인 데이터 저장 단위
레코드와 컬럼으로 구성
레코드(record,row): 테이블의 데이터는 행에 저장
컬럼(column) :테이블의 각 컬럼은 데이터를 구별할 수 있는 속성을 표현

이름 지정 규칙
-문자로 시작해야 함
-1자부터 30자까지 가능
-A-Z, a-z,0-9,_,$,#만 포함해야 함.
-동일한 사용자가 소유한 다른 객체의 이름과 중복되지 않아야 함.
-ORACLE SERVER 의 예약어가 아니어야 함.

-사용자가 소유한 테이블의 이름
SELECT table_name FROM user_tables;

-사용자가 소유한 개별 객체 유형
SELECT DISTINCT object_type FROM user_objects;

-사용자가 소유한 테이블,뷰,동의어 및 시퀀스
SELECT * FROM user_catalog;