본문 바로가기

자격증/정보처리기사 4과목

4-4강 SQL 활용-기본 SQL 작성(4)

과목4. 데이터베이스 구축, 4강. SQL 활용-기본 SQL작성(4)

 

[ 목차 ]

1. 트랜잭션

2. 트랜잭션의 특징

3. 트랜잭션의 Commit, Roleback 연산

4. 트랜잭션의 상태

5. 트랜잭션 제어

6. 체크포인트 = 회복 기법 = 검사점 기법

7. 체크포인트를 이용한 트랜잭션 제어

8. 체크포인트 명령어 예시

9. 병행 제어(동시성 제어)

10. 병행제어를 하지 않으면 발생하는 문제

11. 병행제어 - 2단계 잠금 기법 (2 phase locking) = 2단계 로킹 프로토콜

12. 병행 제어 - 타임 스탬프 순서 기법

13., 병행 제어 - 검증 기법

14. 회복 기법

15. 로그를 이용한 회복 기법의 특징(중요도 下)

16. 지연 갱신 기법

17. 즉시 갱신 기법

18. 그림자 페이지 기법

19. 검사점 기법

20. 미디어 회복 기법

 

1. 트랜잭션

1) DB의 상태를 변화시키기 위해서 수행하는 작업의 단위

2) 사용자가 시스템에 대한 서비스 요구 시 시스템이 응답하기 위한 상태 변화 과정의 작업단위

3) 하나의 트랜잭션은 Commit 또는 Rollback을 수행

 

2. 트랜잭션의 특징

1) 데이터 무결성을 보장하기 위해 가져야 할 특성

2) 원자성 Atomicty 

  1] 분해할 수 없는 최소 단위

  2] 연산 전체가 성공 또는 실패 - all or nothing

  3] 한 가지라도 실패할 경우 전체가 취소되어 무결성을 보장

3) 일관성 Consistency

  1] 트랜잭션이 실행 성공 후 항상 모순 없이 일관성 있는 db 상태 보존

4) 고립성 Isolation

  1] 트랜잭션 실행 숭 생성하는 연산의 중간 결과를 다른 트랜잭션이 접근 불가

  2] 엄격하게 실행 시 임시 갱신을 해결하며 연쇄 복귀가 불필요

  3] 둘 이상의 트랜잭션이 동시에 병행 실행되고 있을 때 또 다른 트랜잭션의 연산이 끼어들 수 없음

5) 영속성 Durability

  1] 성공이 완료된 트랜잭션의 결과는 영구적으로 DB에 저장

 

3. 트랜잭션의 Commit, Roleback 연산

1) Commit : 하나의 트랜잭션이 성공적으로 끝나고 db가 일관서 있을 생테에 있을 대 하나의 트랜잭션이 끝났다는 것을 알려주기 위해 사용하는 연산

2) Rollback : 하나의 트랜잭션이 비정상적으로 종료되어 트랜잭션의 원자성이 깨진 경우 트랜잭션을 처음부터 다시 시작하거나 부분으로만 연산된 결과를 취소

 

4. 트랜잭션의 상태

1) 활동 상태 Active : 트랜잭션이 시작되어 연산들이 정상적으로 실행 중인 상태

2) 부분 완료 상태 Parially Committed : 트랜잭션의 정의된 모든 연산의 실행이 끝난 상태로 트랜잭션의 마지막 명령문을 성공적으로 실행한 직후의 상태

3) 완료 상태 Committed : 트랜잭션의 성공적 종료 상태로 commit연산을 수행한 상태

4) 실패 상태 Failed : 트랜잭션이 완료되지 못하고 더 이상 실행되지 못하는 상태

5) 철회 상태 Aborted : 트랜잭션 실패 후 실행되기 이전으로 복귀된 상태로 rollback 연산을 수행한 상태

 

5. 트랜잭션 제어

1) 흐름의 구조를 바구는 것이 아닌 트랜잭션의 결과를 수용하거나 취소하는 것

2) 트랜잭션 제어 언어는 TCL

3) COMMIT : 연산이 완료된 것을 트랜잭션 관리자에게 알려주는 연산

4) ROLLBACK : 연산을 취소시키는 연산

5) CHECKPOINT : ROLLBAKC 할 위치 지정 =SAVE POINT

 

6. 체크포인트 = 회복 기법 = 검사점 기법

1) DBMS는 회복 시 재수행할 트랜잭션의 수를 줄이기 위해 주기적으로 체크포인트를 수행

2) 체크포인트 시점에 주기억 장치의 버퍼 내용이 디스크에 강제로 기록

3) 체크포인트 시점에 디스크 상에서 로그와 데이터베이스의 내용일 일치

4) 체크포인트 작업이 끝나면 로그에 로그 레코드가 기록외며 일반적으로 체크포인트는 10-20분마다 한 번씩 수행

 

7. 체크포인트를 이용한 트랜잭션 제어

1) SAVEPOINT 문 : 현재의 트랜잭션 내에 저장점을 표시하여 트랜잭션을 더 작은 부분으로 나눔

2) ROLLBACK TO SAVEPOINT 문 : 현재의 트랜잭션에서 지정된 SAVEPOINT 이후에 갱신된 내용만 되돌림

 

8. 체크포인트 명령어 예시

1) 저장점 A로 되돌리고 나서 다시 B로 되돌릴 수 없음

2) 특정 지점까지 롤백하면 그 저장점 이후에 설정한 저장점이 무효

3) ROLLBACK TO A를 실행한 시점에서 저장점 A 이후 정의한 저장점 B는 존재하지 않음

4) 저장점 지정 없이 ROLLBACK 실행 시 반영 안 된 모든 변경 사항을 취소하고 트랜재션 시작 위치로 돌아감

 

9. 병행 제어(동시성 제어)

1) 병행 제어는 다중 사용자 환경을 지원하는 데이터베이스 시스템에서 여러 트랜잭션이 성공적으로 동시에 실행될 수 있도록 지원하는 기능

2) 다중 사용자 환경을 지원하는 DB 시스템의 경우 필수적으로 지원해야 하는 기술

3) 트랜잭션의 직렬성을 보장하고 동시 수행 트랜잭션 처리량 최대화, DB 시스템의 공유도 최대화, 응답 시간 최소화, 데이터 무결성과 일관성을 보장하기 위해 수행

트랜잭션 스케줄
1) 여러 개의 트랜잭션이 동시에 병행 실행되는 경우 트랜잭션의 연산 순서를 정하는 것
2) 트랜잭션 연산들이 인터리빙(병행성 확보를 위해 여러 트랜잭션들이 매우 짧은시간 동안 번갈아 가며 수행)하게 실행되는 것이 허용될 때 트랜잭션들의 개개 연산들이 실행되는 순서를 의미
3) 직렬 스케줄 : 하나의 트랜잭션 연산을 모두 실행하고 다음 트랜잭션을 수행하는 방법 - 인터리빙X
4) 비직렬 스케줄 : 트랜잭션들을 병행수행하는 기법으로 각 트랜잭션 연산들을 번갈아가면서 수행 - 인터리빙O
5) 직렬성 스케줄 : 직렬 스케줄 결과와 비직렬 스케줄 결과가 같은 것으로 병행 수행을 최대한 허용하면서 직렬 스케줄과 동일한 결과를 갖도록 실행 순서를 제어

10. 병행제어를 하지 않으면 발생하는 문제

1) 갱신내용 손실(lost update) - dirty write

  1] 트랜잭션들이 동일 데이터를 동시에 갱신할 경우 발생하는 문제

  2] 한 트랜잭션이 데이터 갱신 후 트랜잭션을 종료하기 전에 다른 트랜잭션이 갱신 값을 또 다시 갱신하는 경우 발생

2) 오손 데이터 읽기 dirty read

  1] 트랜잭션의 중간 수행 결과를 다른 트랜잭션이 참조함으로써 발생하는 오류

  2] 트랜잭션 T2는 T1가 연산을 수행하는 중간값을 읽어 합을 계산함으로써 잘못된 결과를 얻음

3) 모순성 inconsistency

  1] 두 트랜잭션이 동시에 실행할 때 DB가 일관성이 없는 모순된 상태로 남는 문제 

  2] 복수의 사용자가 동시에 DB에 접근하여 갱신함으로써 데이터들의 값이 상호 일치하지 않거나 출력된 정보에 모순이 나타나는 경우 발생

4) 연쇄 복귀 cascading rollback 또는 회복 불능 unrecoverability

  1] 복수의 트랜잭션이 데이터 공유 시 특정 트랜잭션이 실패하여 롤백하고자 해도 다른 트랜잭션이 이미 처리한 부분에 대해서는 취소 불가능한 상태가 발생

  2] 또는 트랜잭션이 연쇄적으로 취소하는 경우가 발생

  3] 중간에 들어온 T2가 이미 트랜잭션을 완료하고 시스템을 떠난 상태이기 때무에 초기 상태로 복귀 불가

 

11. 병행제어 - 2단계 잠금 기법 (2 phase locking) = 2단계 로킹 프로토콜

1) 잠금

  1] 데이터베이스 관리에서 하나의 트랜잭션에 사용되는 데이터를 다른 트랙잭션이 접근하지 못하도록 하는 것

  2] 트랜잭션들을 갱신할 떄는 반드시 잠금 - 실행 - 해제의 규칙을 따라야 함

2) 잠금 단위

  1] 병행 제어에서 한 번에 잠금 할 수 있는 단위로 데이터베이스, 테이블, 레코드, 필드 등이 사용 가능

  2] 잠금 단위가 크면 잠금 수가 작아 관리하기 쉽지만 공유성 수준이 낮으며 오버헤드 감소

  3] 잠금 단위가 작으면 잠금 수가 많아 관리하기가 복잡합지만 공유성 수준이 높음

3) 교착 상태

  1] 어떤 한 트랜잭션이 사용하기 위해 잠가 놓은 자원을 사용하기 위해 기다리므로 모든 트랜잭션이 실행을 전혀 진전시키지 못하고 무한정 기다리고 있는 상태

4) 2단계 잠금 기법

  1] 잠금을 2단계로 구분하여 진행하는 기법

  2] 확장 단계 growing pahase 에서는 트랜잭션에서 잠금만 수행하고 차단 단계에서는 데이터 연산만 수행하며 해제 연산은 수행 불가

  3] 수축 단계 shrinking phase 에서는 트랜잭션에서 해제만 수행하며 잠금 연산은 수행 불가

lock과 unlock이 계속 번갈아 수행되는 것이 아닌 lock이 쭉 수행되고 unlock이 쭉 수행

 

12. 병행 제어 - 타임 스탬프 순서 기법

1) 트랜잭션 순서 규칙은 해당 트랜잭션의 도착 시간 별로 타임스탬프를 할당하여 먼저 온 트랜잭션이 우선권을 획득

2) 시스템 계수기, 논리적 계수기를 이용하는 방식으로 구분

3) 시스템 계수기는 시스템 시간을 이용하는 방식

4) 논리적 계수기는 dbms의 논리적 계수기 값을 이용하는 방식

5) 각 트랜잭션이 데이터에 접근할 시간을 미리 지정하여 기억시킨 뒤 시간에 따라 순서대로 데이터에 접근하여 수행

6) 고유 번호인 시간 스탬프를 트랜잭션에 부여

 

13., 병행 제어 - 검증 기법

1) 트랜잭션 처리 시 먼저 메모리상에서 복사본에 대한 연산을 수행하고 검증 완료 시 dbms에 반영하는 기법

2) 읽기 단계는 메모리 상에서 데이터 연산을 수행

3) 검증 단계는 트랜잭션의 직렬성을 확인

4) 쓰기 단계는 검증 성공 시 dbms에 반영하고 검증 실패 시 철회하는 단계

 

14. 회복 기법

1) dbms의 회복 관리자가 당당

2) db를 갱신하는 도중에 시스템이 고장 나도 db의 일관성을 유지하는 dbms의 기능

3) 장애의 유형 

  1] 실행 장애 : 사용자의 실수, 무결성 규정 위반 등으로 징의 실행이 실패하는 현상

  2] 트랜잭션 장애 : 트랜잭션 내부에서 입력 데이터 오류, 불명확한 데이터, 시스템 자원 요구의 과다 등 비정상적인 상황으로 인하여 트랜잭션 실행이 중지되는 현상

  3] 시스템 장애 : 하드웨어 오동작, 정전, 소프트웨어 오류, 교착 상태 등에 의해 실행 중인 모든 트랜잭션이 더 이상 실행을 계속할 수 없는 현상

  4] 미디어 장애 : 저장 장치인 디스크 블록의 손상, 디스크 헤드의 충돌 등에 의해 db의 일부 또는 전부가 물리적 손상

4) db 회복의 핵심 원리는 데이터 중복으로, 별도의 장소에 미리 데이터를 복사하여 장애 발생 시 복사본을 이용해 복구

회복 관리자가 사용하는 기능
1) 덤프 : db 전체를 다른 저장 장치에 주기적으로 복사하는 작업
2) 로그 : db에서 데이터를 변경하기 이전 값과 변경한 이후의 값을 기록한 정보

덤프나 로그 방법을 이요한 가장 기본적인 회복 방법
1) redo 연산 : 로그에 기록된 변경 연산 후의 값을 이용하여 변경 연산을 재실행
2) undo 연산 : 로그에 기록된 변경 연산 이전의 값을 이용하여 변경 연산을 취소

회복 기법의 종류
1) 연기 갱신 기법 deferred update <- 로그 이용
2) 즉시 갱신 기법 immediate update <- 로그 이용
3) 검사점 기법 check point
4) 미디어 회복 기법
5) 그림자 페이징 기법 shadow paging

15. 로그를 이용한 회복 기법의 특징(중요도 下)

1) commit되지 않은 트랜잭션들은 취소

2) 로그 먼저 쓰기 : 트랜잭션이 db를 갱신하면 주기억 장치의 db 버퍼에 갱신 사항을 기록하고 로그 버퍼에는 이에 대응되는 로그 레코드를 기록

3) db 버퍼가 로그 버퍼보다 먼저 디스크에 기록되는 경우 로그 버퍼가 디스크가 기록되기 전에 시스템이 다운되었다가 재기동 되었을 때 주기억 장치는 휘발성이므로 db 버퍼와 로그 버퍼의 내용은 ㅓㄴ혀 남아 있찌 않음

4) 즉, db 버퍼보다 로그 버퍼를 디스크에 먼저 기록

 

16. 지연 갱신 기법

1) 트랜잭션이 성공적으로 종료될 때까지 데이터베이스에 대한 실질적인 갱신을 연기하는 기법

2) 데이터베이스에 즉시 반영하지 않고 로그 파일에만 기록

3) 트랜잭션이 실행되는 동안 변경된 내용은 로그에 보관

4) 트랜잭션의 부분 완료 시점에 저장된 로그를 사용하여 변경 내용을 실제 데이터베이스에 반영

5) 트랜잭션이 부분 완료되기 전에 장애가 발생하여 트랜잭션이 rollback 되면 트랜잭션이 실제 db에 영향을 미치지 않기 때문에 어떠한 변경 내용도 취소시킬 필요없이 무시

6) 트랜잭션 수행 중 장애가 발생한 경우 db에 적용되지 않은 상태이므로 로그 내용만 버림

 

17. 즉시 갱신 기법

1) 트랜잭션이 데이터를 변경하면 트랜잭션이 부분 완료되기 전이라도 즉시 실제 데이터베이스에 반영하는 기법

2) 장애가 발생하여 회복 작업을 수행할 경우에 대비하여 변경된 모든 내용은 로그에 보관

3) 회복 작업을 수행할 떄는 redo와 undo 작업이 모두 수행

4) 트랜잭션 수행 중 장애가 발생한 경우 undo 실행

 

18. 그림자 페이지 기법

1) 갱신 이전의 db를 일정 크기의 페이지 단위로 구성하여 각 페이지마다 복사본인 그림자 페이지로 별도 보관해 두고, 실제 페이지를 대상으로 트랜잭션에 대한 변경 작업을 수행하는 기법

2) 장애가 발생하여 트랜잭션 작업을 롤백 시킬 때는 그림자 페이지를 변경한 이후의 실제 페이지 부부에 대체하여 회복

3) 변경되는 내용은 원본 페이지에만 적용하고, 장애가 발생되는 경우 그림자 페이지를 이용해 회복

 

19. 검사점 기법

1) 시스템 장애가 발생하였을 경우 redo와 undo를 수행하기 위해 로그 전체를 조사해야 하는 경우를 피하기 위한 기법

2) 트랜잭션 실행 중 주기적으로 변경 내용이나 시스템 상황 등에 관한 정보와 함께 검사점을 로그에 보관

3) 장애 발생 시 로그 전체를 조사하지 않고 로그 내에서 가장 최근의 검사점으로부터 회복 작업을 수행하여 회복 시간을 단축

4) redo나 undo를 적용해야 하므로 회복에 너무 많은 시간이 소요되는 단점 보유

 

20. 미디어 회복 기법

1) db 내용을 주기적으로 안전한 저장 장치에 덤프

2) 디스크 장애가 발생하면 가장 최근의 덤프 내용을 디스크에 적재하고 로그를 이용하여 가장 최근 덤프 이후 완료된 트랜잭션들에 대해 redo 작업을 수행하며, undo는 수행할 필요 없음