공부했던 자료 정리하는 용도입니다.

재배포, 수정하지 마세요.

 

예제는 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 이라는 테이블을 임시로 만들어 놓아야 한다.

 

 

 

 

SQL developer 로그인화면

 

SQLPlus 로그인 화면

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 테이블을 조회해보고 결과를 확인한다.

 

 

SQL developer 실행결과
SQLPlus 실행결과

아직 아무것도 안 했기 때문에 두 세션에서 테이블을 조회해도 같은 결과가 나온다.

 

 

 

 

-- 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 실행결과
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 을 실행한 후 양쪽 세션에서 테이블을 확인해본다.

 

 

SQL developer 실행결과
SQLPlus 실행결과

 COMMIT 실행 후에는  DELETE 문 수행 결과가 데이터베이스에 반영되어 다른 세션(SQLPlus)에서 확인해도 같은 결과가 나온다.

 

 

+ Recent posts