Database/ORACLE

[스크랩] SQL문 처리과정

99iberty 2014. 3. 3. 18:23

http://www.dbguide.net/dbqna/oracle.db?cmd=view4

 

 

DML문의 처리과정

데이터베이스의 성능튜닝을 원활하게 수행하기 위해서는 DB구조에 대한 완벽한 이해는 필수적 입니다. 3가지 유형의 SQL문 처리과정을 통해 오라클 서버구조에 대해 알아 보도록 하겠습니다. 위 3가지 유형중에 한가지 유형을 선택하십시오.

DML(Insert,Update,Delete)문을 실행하는 과정은 SELECT문을 실행하는 과정과 조금 차이가 있습니다. 왜냐하면 테이블로부터 데이터를 읽어서 변경해야 하고 또한 변경작업 후에 COM MIT, ROLLBACK문을 통해 변경작업에 대한 종료 및 취소를 해야 하기 때문입니다. (위 그림의 "클릭" 버튼을 누르시면 "DML문의 처리과정"을 그림을 통해 이해할 수 있습니다.)

만약 COMMIT문을 실행한다면 변경된 내용을 테이블에 저장하는 별도의 과정이 필요할 것이 고 ROLLBACK문을 실행한다면 변경전의 데이터로 복구되어야 하기 때문입니다.

SQL*PLUS 툴의 SQL> 프롬프트 상에서 사용자는 UPDATE문을 작성합니다. 사용자가 엔터키(ENTER-KEY)를 누르면 UPDATE문장은 네트워크를 통해 서버 프로세스로 전송이 되고 구문분석 작업을 실행하게 됩니다. 구문분석 작업이 끝나면 데이터버퍼 캐시영역에 다른 사용자의 SQL문에 의해 해당 테이블이 이미 읽혀졌는지를 검색한 후 존재하지 않으면

  1. 해당 데이터 파일로부터 테이블을 읽고 또한, DML문 작업 시 ROLLBACK문을 실행했을 때 변경 전 데이터로 복구해 주기 위해서 언두 세그멘트를 데이터베이스로부터 읽게 됩니다.
  2. 읽혀진 테이블과 언두 세그멘트는 데이터버퍼 캐시영역에 저장되게 됩니다.
  3. 그리고, 변경하려는 행(ROW)을 다른 사용자의 또 다른 DML문으로부터 안전하게 보호될 수 있도록 잠금(LOCK)을 설정하게 되고 그 잠금 정보를 관련되는 자료사전에 저장하게 됩니다.
  4. 마지막으로, 로그버퍼 영역에는 사용자가 실행한 DML문에 의해 변경된 행의 변경 전 정보와 변경 후의 정보가 저장됩니다. 로그버퍼 영역에 모든 변경된 데이터를 저장하는 이유는 변경작업 후 COMMIT문을 실행했을 때 뜻하지 않는 상황(정전이 되어 시스템이 다운되는 경우 등)이 닥쳐 사용자의 변경작업이 미처 완료되기 전에 데이터베이스가 다운되면 데이터의 유실이 생길 수 있기 때문에 그러한 경우 데이터를 복구해 주기 위해서 로그버퍼 영역에 백업을 하는 것입니다.