본문 바로가기

데이터베이스

오라클실습 (190509)

* 서브쿼리

 

 

 

일반적인 서브쿼리는 먼저 동작하고 메인 쿼리로 답을 던져주고 메인쿼리가 실행되지만

MAIN 쿼리와 SUB 쿼리가 지속해서 데이터를 주고 받는 쿼리를 CORRELATED SUBQUERY라고 한다.

SCALAR SUBQUERY도 상관 서브 쿼리이다. 자기 혼자 단독으로 실행할 수 없다.

 

 

FROM 절에 사용하는 뷰를 인라인 뷰라고 부른다.

FROM 절에 테이블 대신 사용하는 서브쿼리를 뷰라고 부른다.

 

 

1번을 보면 서브쿼리가 테이블 역할을 할 수 있음

result set을 테이블처럼 쓸 수 있다. 

Relation의 결과는 Relation이다.

 

테이블의 구조가 정적으로 정의되는 것 -> 이미 만들어진 테이블

새로운 데이터의 구조를 만들 수 있다 -> 동적인 테이블 

 

 

 

인라인뷰는 정적인 테이블이 아니라, 동적으로 테이블으로 정의하고 사용할 수 있다.

 

 

 

 

JOB 의 갯수만큼 SELECT를 하게 된다.

 

입/출력값, Query Execution Cache, hashing 용어 정리 하세요.

 

 

 

 

2번의 경우 where 절이 생략되면 전체 데이터가 삭제된다.

 

 

COMMIT 된 것이 ROLLBACK 될 수 있을까요? 

ROLLBACK 범위는?

 

 

TRANSACTION ? A Logical unit of work ,논리적 연산의 단위

 

ACID -> 일원고지 -> 시험문제

트랜잭션의 4가지 특징 중에 원자성의 의미와 고립성의 의미를 설명하시오.

일 : 일관성 (Consistency)

원 : 원자성 (Atomicity)

고 : 고립성 (Isolation)

지 : 지속성 (Durability)

 

 

 

트랜잭션을 설명하는 가장 간단 명료한 문장 A Logical Unit of Work

은행의 계좌이체의 경우 ?

 

계좌이체라는 업무 하나가 하나의 논리적인 트랜잭션이 된다.

A 가 B한테 500만원을 이체

 

A의 계좌에서 500만원을 빼고, B의 계좌에서 500만원을 더함 그리고 A가 B에게 500만원을 보냈다더라..

이렇게 세 개의 세부 연산으로 이루어져 있음.

 

--> 

1. 업데이트 (A - 500)

2. 업데이트 (B + 500)

3. 삽입 

 

DBMS의 입장에서 트랜잭션은 SQL의 묶음이다.

 

1. 업데이트 (A - 500) - 성공

2. 업데이트 (B + 500) - 실패

3. 삽입 - 성공

이럴 경우 논리적인 일의 단위 연산(ATOMIC UNIT)

중에 하나라도 실패하면 트랜잭션을 성공할 수 없다.

실패할 거면 모두 실패하거나, 성공할거면 모두 성공해야 함. (ALL OR NOTHING)

 

이것을 원자성이라고 함.

 

 

여기서 롤백의 정의는 트랜잭션 시작(DML) 이후의 모든 단위 연산을 취소하는 명시적 종료 명령문

 

트랜잭션은 첫번째 실행(변경) 가능한(Executable) SQL 실행 시 시작될 때

                      INSERT, UPDATE, DELETE

트랜잭션 종료는 명시적 종료와 암시적 종료가 있음

명시적 종료 (1) Commit (2) Rollback

암시적 종료는 ?

 

 

 

여기서 커밋의 정의는 트랜잭션 시작(DML) 이후의 모든 단위 연산을 

데이터베이스에 영구히 반영한다.

 

COMMIT을 하면 COMMIT이 완료되었습니다라는 것을 본다면 

DBMS 전원이 날아가서 죽어도 DBMS에 반영되어 있다는 것을 의미함.

 

11번 

롤백의 범위 ? 11번의 경우 취소할 수 있는 것이 없다. COMMIT 되었으므로

 

* 모르고 COMMIT을 한 경우 ? 망한 것을 안다면 ? ROLLBACK으로 안돼

 

요구사항은 무시하면 돼 !

롤백의 범위 ? 2번은 롤백 X

즉 DDL, TCL은 롤백이 안돼

DDL은 한 문장이 하나의 트랜잭션이다.

 

DDL을 실행하기 전에 암시적인 커밋 (DDL) 이 실행된다.

그리고 실행 이후에 암시적 COMMIT을 한다. 

DDL은 롤백이 안된다 

 

ALTER TABLE EMP DROP COLUMN SEX;

에서 성별을 DROP이 안돼 -> DDL은 바로 COMMIT을 해버리므로 (암시적 COMMIT)

 

 

 

시험에 나옴

SAVEPOINT는 적을 필요 없음

일반적으로 QUERY, DML, TCL 의 권한만 갖는다. -> 개발자

 

 

 

SYS 소유

SYSTEM 운영

을 분리하기 위함

큰 조직 같은 경우에는 개발 계정과 소유 계정을 분리한다

 

개발자와 소유자를 구분함. 

 

CSSDEV : CSSOWN가 SELECT, INSERT .. 등의 권한을 주는 것

CSSOWN : 소유 계정 (CUSTOMER 테이블의 소유자.. , DROP, ALTER 가능함)

 

 

클라이언트    DBMS

TRANSACTION을 일으킴 

DBMS 내부에 TRANSACTION이 진행중....  (=아직 COMMIT이나 ROLLBACK이 X)

 

 

비정상적인 종료일 경우

 

클라가 튀었음 비정상 종료 ? 일 경우? 비정상적인 종료를 할 경우 ROLLBACK 처리

 

클라이언트는 문제가 없는데 네트워크가 끊김 ? 자동으로 ROLLBACK 처리

 

DBMS 서버가 망가져서 죽었다 ? ROLLBACK 처리

- 서버 프로세스가 죽는 경우도 서버가 죽는 경우라고 함

 

 

2번의 경우 SQL 문장 내부에 주석을 넣을 수 있다.

SQL에 주석을 넣는 이유 ? 문제가 생기는 부분을 빠르게 찾기 위함

2번은 트랜잭션과 상관이 없음

3번에서 트랜잭션 START

4번의 경우 에러

5번은 성공

 

4번의 에러의 이유는 7자리수 까지 표현이 가능하기 때문

이렇게 될 경우, 6번의 COMMIT이 되지 않음 (원자성에 위반된다)

 

SQL문장만으로는 TRANSACTION 제어가 힘들다

그러므로 LANGUAGE의 힘을 빌린다. 

 

이것은 PL-SQL임.. -> Procedure Language

PL-SQL은 블록 구조화된 언어라고 함.

BEGIN과 END 사이가 실행부

트랜잭션을 잘 제어할려면 프로그래밍 언어의 에러를 제어하는 힘이 필요. 

 

 

세션을 두 개 띄우고 트랜잭션을 진행할 때

트랜잭션의 진행중일 때 결과는 한 명의 사용자만 볼 수 있다 -> 고립성

 

그리고 변경된 데이터는 일관되어야 한다. 이것이 일관성이라고 함.

 

 

 

 

 

 

 

트랜잭션을 시작할 때 자동으로 lock이 걸린다

 

table level lock, row level lock 두가지 종류가 있음

테이블 전체에 lock을 걸고 하는 경우...

행에만 lock을 걸고 하는 경우 등 있음

 

테이블 level lock은 동시 사용성이 떨어짐. 그래서 잘 사용하지 않음

수정하는 record만 lock 같은 경우 자동으로 걸림. 그리고 트랜잭션이 종료되면 자동으로 unlock이 된다.

 

 

 

 

 

1번째 세션에서 update를 진행할 때 다른 세션에서 접근할 경우 ScriptRunner 작업이라고 뜨는 것을 확인할 수 있다.

이것은 1번째 세션에서 lock을 한 후 Transaction을 시작하기 때문이다.

 

 

1번 세션에서 commit을 한 후 2번째 세션은 자동으로 삭제가 되는 것을 볼 수 있다.

 

 

 

 

SELECT 는 LOCK이랑 관계가 없다.

 

 

 

 

SELECT FOR UPDATE 같은 경우에는 ? 추후에 내가 이 데이터를 고칠거니까 손대지마라는 의미임

 

 

 

'데이터베이스' 카테고리의 다른 글

오라클실습 (190510)  (0) 2019.05.10
오라클 성능 개선 (190510)  (0) 2019.05.09
아스키코드, 유니코드  (0) 2019.05.08
오라클과제 (190508)  (0) 2019.05.08
오라클과제 (190507)  (0) 2019.05.07