공부했던 자료 정리하는 용도입니다.
재배포, 수정하지 마세요.
예제는 Oracle Database에서 기본으로 제공되는 SCOTT계정 데이터로 진행됩니다.
읽기 일관성(read consistency)
어떤 데이터 조작이 포함된 트랜잭션이 완료( COMMIT , ROLLBACK )되기 전까지 데이터를 직접 조작하는 세션 외 다른 세션에서는 데이터 조작 전 상태의 내용이 일관적으로 조회 · 출력 · 검색되는 특성을 의미한다.
→ 어떤 특정 세션에서 테이블의 데이터를 변경 중일 때 그 외 다른 세션에서는 데이터의 변경이 확정되기 전까지 변경사항을 알 필요가 없으므로, 데이터를 변경 중인 세션을 제외한 나머지 세션에서는 현재 진행 중인 변경과 무관한 본래의 데이터를 보여주는 것
데이터베이스 입장에서는 데이터를 변경하는 DML (데이터 조작 명령어)을 실행한 후 COMMIT 으로 데이터베이스에 반영할지 ROLLBACK 으로 실행을 취소할지 알 수 없다. 그래서 ROLLBACK 으로 명령어 수행이 취소될 경우를 대비해 변경 전 데이터를 undo segment에 따로 저장해둔다.
CREATE TABLE DEPT_TCL
AS SELECT *
FROM DEPT;
0. 과정을 진행하기 전에 먼저 DEPT 테이블을 복사한 DEPT_TCL 이라는 테이블을 임시로 만들어 놓아야 한다.
1. SQL developer와 CMD(SQLPlus로 scott 계정 접속)로 오라클 데이터베이스의 scott 계정에 접속해 2개의 세션을 만든다.
-- 1) SQL developer에서 DEPT_TCL 테이블을 조회
SELECT * FROM DEPT_TCL;
-- 2) SQLPlus에서 DEPT_TCL 테이블을 조회
SELECT * FROM DEPT_TCL;
2. SQL developer와 SQLPlus에서 DEPT_TCL 테이블을 조회해보고 결과를 확인한다.
아직 아무것도 안 했기 때문에 두 세션에서 테이블을 조회해도 같은 결과가 나온다.
-- 1) SQL developer에서 DELETE문 실행
DELETE FROM DEPT_TCL
WHERE DEPTNO = 50;
-- 2) 결과확인
SELECT * FROM DEPT_TCL;
-- 3) SQLPlus에서 해당 테이블 확인
SELECT * FROM DEPT_TCL;
3. 이번에는 SQL developer에서 DELETE 문을 사용하여 DEPTNO (부서번호)가 50 인 데이터를 삭제한 후에 SQLPlus에서 같은 테이블을 조회해본다.
SQL developer에서는 DEPTNO 50 인 데이터가 삭제된 상태로 DEPT_TCL 테이블이 조회되지만 SQLPlus에서는 아직 삭제되지 않은 상태(변경이 일어나기 전 상태)로 출력되는 것을 확인할 수 있다. 이는 SQL developer에서 실행한 DELETE 문의 수행결과가 아직 COMMIT (데이터베이스에 반영)되지 않았기 때문이다.
-- 1) SQL developer에서 COMMIT실행
COMMIT;
-- 2) SQL developer에서 확인
SELECT * FROM DEPT_TCL;
-- 3) SQLPlus에서 확인
SELECT * FROM DEPT_TCL;
4. SQL developer에서 COMMIT 을 실행한 후 양쪽 세션에서 테이블을 확인해본다.
COMMIT 실행 후에는 DELETE 문 수행 결과가 데이터베이스에 반영되어 다른 세션(SQLPlus)에서 확인해도 같은 결과가 나온다.
'Back end > Database 문제 & 실습' 카테고리의 다른 글
[Oracle] Oracle PATH관련 오류 (0) | 2019.10.02 |
---|---|
[Oracle] 데이터의 LOCK 확인해보기 (0) | 2019.09.26 |
[Oracle] DML 관련 문제 정리 (0) | 2019.09.23 |