본문 바로가기
Programming 개발은 구글로/Database

[Database] DML문과 COMMIT문 처리과정

by 40대직장인 2022. 5. 6.

 

DML문과 COMMIT문 처리과정

1. DML문 처리과정

  1.1. STEP 1

   - 데이터 파일로부터 해당 테이블을 읽어 행 데이터를 데이터 버퍼 캐시 영역에 저장.

  1.2. STEP 2

   - 메모리에 저장되는 행 데이터에 대한 변경 작업을 수행하기 위해서는 만약 변경 후 ROLLBACK문을 수행할 것을  대비하여 변경 전 데이터를 저장해 둘 수 있는 언두 세그먼트의 공간을 확보.

  1.3. STEP 3

   - 공유 풀 영역을 구성하는 데이터 딕셔너리 캐시 영역(Data Dictionary Cache Area)은 사용자가 실행한 DML문의 구문 분석을 수행하기 위한 테이블 정보와 록(LOCK) 정보를 저장해준다. DML문  실행 시 록(LOCK) 발생 이벤트를 기록해 두었다가 다른 사용자들이 똑같은 행 데이터에 대해 변경 작업을 수행하지 못하도록 DML문을 대기 상태로 만든다.

  1.4. STEP 4

   - 리두로그 버퍼 영역에 변경 전 데이터와 변경 후 데이터를 모두 백업하게 된다.

2. COMMIT문 처리과정

  2.1. STEP 1

   - 사용자가 DML문을 실행 후 COMMIT문을 실행하면 서버 프로세스로 전송된다.

  2.2. STEP 2

   - 사용자가 COMMIT문을 수행할 때마다 오라클 서버에 의해 시스템 변경 번호(SCN:System Change Number)가

    연속적으로 부여되며 해당 트랜잭션이 데이터베이스 생성 후 몇 번째로 COMMIT 된 것인지를 나타낸다.

  2.3. STEP 3

   - 일정한 시점이 되면 LGWR은 로그 버퍼 영역에 백업되어 있는 데이터를 리두로그 파일로 저장함.

   - LGWR가 리두로그 버퍼의 내용을 리두로그 파일로 저장하는 시점은 아래와 같다.

  • 사용자가 COMMIT문을 실행하는 경우
  • 매 3초가 지날 때마다 오라클 서버에 의해 실행되는 경우
  • CHECKPOINT가 발생하는 경우
  • 오라클 서버가 정상적으로 SHUTDOWN 되는 경우

  2.4. STEP 4

   - LGWR 프로세스에 의해 리두로그 파일에 백업 데이터가 저장되면 "Committed"라는 메시지를 띄워준다.

  2.5. STEP 5(Log switch)

   - LGWR 프로세스가 리두로그 버퍼의 모든 데이터를 리두로그 파일에 기록하지 못한  경우에는 다음 리두로그 파일로 이동하여 계속적으로 데이터를 기록하게 된다.

  2.6. STEP 6

   - LGWR 프로세스가 하나의 리두로그 파일에 모든 로그 버퍼의 데이터를 저장하지 못하면 다음 로그 파일로  이동하게 되는데 이때 CKPT 프로세스는 체크포인트(CHECKPOINT)를 발생시켜 현재 시점까지의 모든 변경 상태를 컨트롤 파일(Control file)과 데이터 파일(Data file)에 기록한다.

 2.7. STEP 7

  - DBWR 프로세스는 데이터 버퍼 캐시 영역에 저장되어 있는 테이블의 변경 후 데이터를 최종적으로 테이블에 기록한다.

 

 

댓글