일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 오라클 쿼리문
- java프로젝트
- java 백준
- JAVA 예제
- ORACLE JOIN
- 자바 예제
- 제약조건 확인
- oracle constraints
- 자바 알고리즘
- 오라클 쿼리 함수
- 자바 자료구조
- 오라클
- 자바
- 오라클 인라인뷰
- 코딩
- JAVA공부
- 오라클 제약조건
- java
- 백준 2437
- 오라클 기본 쿼리
- 제약조건 설정
- java실습
- 자료구조
- 백준 저울
- 도서관 관리
- 백준 자바
- 백준 문제
- java 도서관관리프로그램
- 오라클 그룹 함수
- 도서관관리프로그램
- Today
- Total
DEVELOPER NOMAD
[오라클 트랜잭션] oracle transaction 본문
//*****************************************
-- 트랜잭션(transaction)
트랜잭션은 하나의 논리적 작업 단위로 수행되는 일련의 작업으로 테이블에 INSERT, UPDATE, DELETE 문으로 지시하고, COMMIT을 실행하면 모든 변경 사항이 영구히 데이터베이스에 저장되며, ROLLBACK은 마지막 COMMIT이나 ROLLBACK 이후의 변경 사항을 취소하고 데이터베이스를 원래의 상태로 되돌려 준다. 즉, 트랜잭션에서 데이터베이스를 변경하라는 명령이 COMMIT이고, COMMIT 전까지 변경된 것을 되돌리는 것이 ROLLBACK이다.
-- COMMIT
-- ROLLBACK
-- SAVEPOINT
-- 트랜잭션 내의 한 시점을 표시한다.
-- ROLLBACK TO SAVEPOINT 명령어로 표시 지점까지 ROLLBACK하는데 쓰인다.
CREATE TABLE insa1 AS SELECT num, name, city FROM insa;
INSERT INTO insa1 VALUES(2000, '테스트', '서울');
SELECT * FROM insa1;
SAVEPOINT a;
UPDATE insa1 SET city='울산' WHERE num=1001;
SELECT * FROM insa1;
ROLLBACK TO a; -- UPDATE 는 취소되고 INSERT는 최소되지 않은 상태
SELECT * FROM insa1;
ROLLBACK ;
SELECT * FROM insa1;
//*****************************************
-- SET TRANSACTION : 다양한 트랜잭션 속성을 지정
-- 커넥션1
SELECT * FROM insa1;
INSERT INTO insa1 VALUES(2000, '테스트', '서울');
-- 커넥션2 : cmd>sqlplus sky/"java$!"
SELECT * FROM insa1;
-- 커넥션1
ROLLBACK;
SET TRANSACTION READ ONLY; -- SELECT만 가능
SELECT * FROM insa1;
DELETE FROM insa1; -- 에러
ROLLBACK;
SET TRANSACTION READ WRITE;
DELETE FROM insa1;
ROLLBACK;
//*****************************************
-- SET AUTOCOMMIT
sql>SHOW AUTOCOMMIT -- 상태확인
AUTOCOMMIT OFF
sql>SET AUTOCOMMIT ON
sql>SHOW AUTOCOMMIT
AUTOCOMMIT IMMEDIATE
sql>SET AUTOCOMMIT 3
sql>SHOW AUTOCOMMIT
모든 3 DML문에 AUTOCOMMIT ON
sql>SET AUTOCOMMIT OFF
//*****************************************
-- LOCK : 현재의 트랜잭션이 사용하고 있는 데이터에 대해 다른 트랜잭션의 검색이나 변경을 막아 여러 트랜잭션이 동시에 같은 데이터를 사용 할 수 있도록 하는 것
-- 커넥션 1
UPDATE insa1 SET city='seoul' WHERE num=1001;
SELECT * FROM insa1;
-- 커넥션 2 : sqlplus
SELECT * FROM insa1;
SELECT * FROM insa1 FOR UPDATE WAIT 5; -- 5초후 에러 발생
-- 커넥션 1
ROLLBACK;
LOCK TABLE insa1 IN EXCLUSIVE MODE;
-- EXCLUSIVE : 잠긴 테이블에 쿼리만 사용 가능
-- NOWAIT : 다른 사용자가 이미 LOCK 했어도 바로 자신에게 제어가 넘어옴
DELETE FROM insa1;
-- 커넥션 2 : sqlplus
SELECT * FROM insa1;
UPDATE insa1 SET city='seoul' WHERE num=1001; -- 케넥션1이 트랜잭션이 완료될때 까지 대기
-- 커넥션 1
ROLLBACK;
DROP TABLE insa1 PURGE; -- 에러
-- 커넥션 2 : sqlplus
ROLLBACK;
-- 커넥션 1
DROP TABLE insa1 PURGE;
//*****************************************
-- COMMIT이 되지 않는 상태 확인
-- 관리자 계정에서 확인
SELECT s.inst_id inst,
s.sid||','||s.serial# sid,
s.username,
s.program,
s.status,
s.machine,
s.service_name,
'_SYSSMU'||t.xidusn||'$' ROLLNAME,
--r.name rollname,
t.used_ublk,
ROUND(t.used_ublk * 8192 / 1024 / 1024, 2) used_bytes,
s.prev_sql_id,
s.sql_id
FROM gv$session s,
--v$rollname r,
gv$transaction t
WHERE s.saddr = t.ses_addr
ORDER BY used_ublk, machine;
'ORACLE(오라클) > ORACLE(오라클) 실습' 카테고리의 다른 글
[오라클 사용자 함수] ORACLE Stored Function 실습 (0) | 2019.01.11 |
---|---|
[오라클 프로시져(Stored Procedure)] (0) | 2019.01.10 |
[ORACLE INLINE VIEW, subquery ] 오라클 인라인뷰, 서브쿼리 (0) | 2019.01.09 |
[ORACLE JOIN]오라클 조인 개념 및 실습. (0) | 2019.01.09 |
[오라클 기본 쿼리 및 함수] (ORACLE QUERY) 기본 쿼리, 기본쿼리 함수 (0) | 2019.01.08 |