트랜잭션 Transaction
1. 트랜잭션?
- 동시에 다수의 작업을 독립적으로 안전하게 처리하기 위한 상호 작용 단위
- 일 처리 단위
- 분할할 수 없는 최소단위
- 목적 : 안전한 거래 보장
2. TCL 명령어 (Transaction Control Language)
- commit : 거래 내역을 확정함
- rollback : 거래 내역을 취소함
- checkpoint : rollback할 위치를 지정함
3. 트랜잭션 특징
특성 | 내용 | 비고 |
원자성 (Atomicity) | 트랜잭션 안에 정의된 연산은 모두 실행되거나 모두 실행되지 않아야 함. | All or Nothing |
일관성 (Consistency) | 트랜잭션 실행 전과 후 동일하게 오류가 없어야 함. |
무결성 |
고립성 (Isolation) | 트랜잭션 실행 중 다른 트랜잭션에 영향을 받지 않아야 함. | 무결성 |
지속성 (Durability) | 트랜잭션 결과는 항상 보존됨. | 장애 대응성 |
4. 트랜잭션 실습하기
* sqlplus에서 테스트
시작->명령프롬프트 cmd
>sqlpus java0514/1234
1) 테이블 생성
create table dep ( id varchar2(10) primary key , name varchar2(15) not null , location varchar2(50) ); |
2) 테이블 구조 확인
desc dep; |
3) 행 추가
insert into dep values('10','영업부','서울 강남구'); insert into dep values('20','개발부','부산 동래구'); insert into dep values('30','회계부','인천 계양구'); |
4) 행 갯수
select count(*) from dep; |
5) 명령어 한꺼번에 모두 다 취소
-> rollback;
-> dep테이블의 칼럼이 다 지워진것을 볼 수 있다.
-> sqlplus에서 그냥 창닫기(exit)를 할 경우 자동으로 rollback되므로 주의할 것!
6) 명령어 완료 및 확정
-> commit;
7) 롤백시점 지정
-> checkpoint;
-> savepoint 로 저장할 시점을 지정하고 rollback to 로 롤백시킨다.
-> 밑의 예제로 말하자면 savepoint를 지정하고 'rollback to a'를 한다면 a까지의 칼럼만 저장하고 밑의 '50,'60'의 데 이터는 날라간다. 는 뜻
insert into dep values('40','영업부','서울 종로구'); rollback to a; -- 롤백 a 시점 이후 모두 다 취소 |
8) commit한 자료의 복구방법
-1) 예쁘게 출력
SQL>col name for a20;
SQL>col type for a10;
SQL>col value for a10;
SQL>show parameter undo;
-2) undo_retention
-> delete, update후에 커밋을 했을 경우 속성값의 시간(초)까지는 오라클에서 임시로 저장한 데이터로
복구할 수 있음.
-> default 속성값은 900초(15분).
-> 시간을 1500초(25분)으로 늘리려면,
-> alter system set undo_retention=1500;
-3) undo_retention기능을 이용한 데이터 복구 방법
-4) 15분 이내에 dep테이블에서 커밋된 데이터 출력
-> 15분동안 무슨 작업했는지 불러오는 명령문 (일시적이고, 실시간)
select * from dep as of timestamp(systimestamp-interval '15' minute); |
-> 커밋 데이터 확인 : 아직 15분 전이라 나온다.
delete from dep; --행 모두 삭제 commit; --완료 select * from dep |
-5) 삭제하고 커밋한지 15분안의 데이터를 복구
insert into dep select * from dep as of timestamp(systimestamp-interval '15' minute); commit; select count(*) from dep; |
'공부 > SQL 활용' 카테고리의 다른 글
7월 31일 - SQL 활용 10 : CSV 변환 (0) | 2019.07.31 |
---|---|
7월29일 - SQL활용 9 : rownum (0) | 2019.07.30 |
7월29일 - SQL활용 7 : JOIN의 종류 (0) | 2019.07.30 |
7월26일 - SQL활용 6 : 학사관리프로그램 (0) | 2019.07.26 |
7월25일 - SQL 활용 5 : JOIN (0) | 2019.07.25 |