데이터 베이스 트랜잭션
트랜잭션은 데이터 처리의 한 단위 오라클 서버에서 발생하는 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;
'쌍용교육(JAVA) > SQL' 카테고리의 다른 글
쌍용교육 -SQL 수업 20~21일차 (뷰,시퀀스,인덱스,동의어,권한) (0) | 2024.04.12 |
---|---|
쌍용교육 -SQL 수업 20일차 (테이블 생성,테이블 관리,실습문제) (0) | 2024.04.12 |
쌍용교육 -SQL 수업 20일차 (INSERT문,UPDATE문,DELETE문) (0) | 2024.04.12 |
쌍용교육 -SQL 수업 19일차 SUBQUERY-(1. 단일행 서브쿼리,2.다중행 서브쿼리,3.다중열 서브쿼리,4.인라인뷰,5.스칼라 서브쿼리,6.실습문제) (0) | 2024.04.12 |
쌍용교육 -SQL 수업 19일차 집합연산자-(1. union (합집합 중복값 제거),2.union all,3.intersect,4.minus) (0) | 2024.04.12 |