일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- group by
- github
- rownum
- Oracle DB
- 제약조건
- SQL
- 답변형 게시판
- CRUD
- JSP
- 과정평가형
- 부트스트랩
- HTTP Status 404
- oracle
- alias
- ||
- jQuery
- HTTP Status 500
- sql developer
- 한글 인코딩
- distinct
- 이클립스
- Oracle SQL
- 성적프로그램
- HTML
- JavaScript
- tomcat
- Bootstrap
- git
- Java
- 모조칼럼
초급의 끄적거림
[SQL] 트랜잭션 (Transaction) 본문
[트랜잭션 (Transacion)]
⊙ 동시에 다수의 작업을 독립적으로 안전하게 처리하기 위한 상호 작용 단위
⊙ 일처리 단위
⊙ 분할할 수 없는 최소단위
⊙ 목적 : 안전한 거래 보장
[트랜잭션의 특성]
⊙ 원자성 : 트랜잭션은 한꺼번에 완료되거나 한꺼번에 취소 되어야 함
⊙ 일관성 : 트랜잭션 실행 전과 후 동일하게 오류가 없어야 함
⊙ 고립성 : 트랜잭션 실행 중 다른 트랜잭션에 영향을 받지 않아야 함
⊙ 지속성 : 트랜잭션 결과는 항상 보존됨
[TCL 명령어]
⊙ commit : 거래 내역을 확정함
⊙ rollback : 거래 내역을 취소함 (commit 하고 나오면 rollback 불가)
⊙ checkpoint : rollback 할 위치를 지정함
[실습] : sqlplus에서 테스트
- 시작 → 명령프롬프트 → sqlplus java0514
⊙ dep 테이블 만들기 |
create table dep( id varchar2(10) primary key ,name varchar2(15) not null ,location varchar2(50)); |
⊙ 테이블 구조 확인 |
> desc dep; |
⊙ 행 추가 |
> insert into dep values ('10', '영업부', '서울 강남구'); |
⊙ 행 개수 |
> select count(*) from dep; |
⊙ rollback : 명령어를 한꺼번에 모두 취소 (일부분만 선택하려고 할 때 checkpoint 활용) |
> rollback; > select count(*) from dep; |
⊙ rollback 후에 행 추가하고 count(*) |
: 이 상태에서 commit 처리를 안하고 command 창을 닫아버리면 rollback 상태와 마찬가지로 다 삭제됨 : commit을 활용하여 거래가 확정되지 않았기 때문 |
⊙ commit 을 통해 확정 짓기 (Commit complete)
⊙ 새로 행을 추가하면서 중간에 savepoint a; 를 설정 : savepoint a 이후로 rollback
[커밋한 자료 복구방법]
⊙ 예쁘게 출력 |
col name for a20; col type for a10; col value for a10; show parameter undo; |
[udo_retention]
- delete, update 후에 커밋을 했을 경우 속성값의 시간(초)까지는 오라클에서 임시로 저장한 데이터로 복구할 수 있음
- default 속성값은 900초 (15분)
- 시간을 1500초 (25초)으로 늘리려면 alter system set undo_retention=1500;
⊙ undo_retention 기능을 이용한 데이터 복구방법
⊙ 15분 이내에 dep 테이블에서 커밋된 데이터 출력 |
select * from dep as of timestamp(systimestamp-interval '15' minute); |
⊙ 삭제하고 커밋한지 15분안의 데이터 다시 입력 |
delete from dep; -- 삭제 commit; -- 커밋 insert into dep select * from dep as of timestamp(systimestamp-interval '15' minute); -- 15분안에 데이터 다시 입력 |
'DB > Oracle' 카테고리의 다른 글
[SQL] Oracle XE 11g 설치, cmd에서 사용자 계정 생성/권한부여 (0) | 2019.08.01 |
---|---|
[SQL] CSV 변환 (외부 데이터를 이용하여 테이블 생성) (0) | 2019.07.31 |
[SQL] rownum (0) | 2019.07.29 |
[SQL] join의 종류 (inner join / left join / right join) (0) | 2019.07.29 |
[SQL] 학사프로그램 inner join 활용 (0) | 2019.07.29 |