1. SELECT 실행 과정 {SELECT * FROM emp;}
-> user process (sqlplus)
-> server process : Parsing
=> ASCII 변환 (query를 변환)
=> Hash 함수
=> Cache가 있는지 확인
==> instance [Shared Pool:Library Cache] - soft parsing
=> 문법검사
==> instance [Shared Pool:Dictionary cache] - hard parsing
=> 권한검사
-> optimaser
=> 실행계획
==> 실행 계획까지의 모든 데이터를 저장
==> instance [Shared Pool:Library Cache]
==> Dictionary를 확인하고 계획을 세우기 때문에 Dictionary를 Update 해야함 [CBO:9i]
-> server process
=> Execute : 실행계획을 받아서 실행
==> Database buffer Cache에 있는지 확인
==> Data File에서 Block의 정보를 읽고 Database buffer Cache에 전체를 복사해서 결과 가지고 옴
=> Fetch
==> 필요한 정보만을 Block에서 간추린다. [PGA]
==> user process 전달
2. UPDATE 실행계획{UPDATE emp SET name='홍길동' WHERE empno=100}
-> SELECT의 parsing까지 동일
-> server process
=> Execute : 실행계획을 받아서 실행
==> Database buffer Cache에 있는지 확인
==> Data File에서 Block의 정보를 읽고 Database buffer Cache에 전체를 복사해서 결과 가지고 옴
==> Redo log Buffer 작업 내용 저장[작업일지]
===> instance 이기 때문에 수시로 Redo log file에 저장
====> 속도 fast - 수정 및 저장 내용이 적고 간결, Block의 위치에 상관없기 때문에
====> LGWR
===> 만약 불가피하게 디비가 죽는다면 다시 디비를 올리면서 Database File의 데이터와
Redo log file의 내용을 비교해서 변경사항이 있다면 Database File의 내용을 변경한다.
====> 아카이브 로그에 다시 백업 복사
==> undo segment에 원래 내용 저장[취소하기 위해서]
==> Database buffer Cache에 원하는 정보로 변경 [commit 전에 변경 완료]
-> user process (sqlplus)
-> server process : Parsing
=> ASCII 변환 (query를 변환)
=> Hash 함수
=> Cache가 있는지 확인
==> instance [Shared Pool:Library Cache] - soft parsing
=> 문법검사
==> instance [Shared Pool:Dictionary cache] - hard parsing
=> 권한검사
-> optimaser
=> 실행계획
==> 실행 계획까지의 모든 데이터를 저장
==> instance [Shared Pool:Library Cache]
==> Dictionary를 확인하고 계획을 세우기 때문에 Dictionary를 Update 해야함 [CBO:9i]
-> server process
=> Execute : 실행계획을 받아서 실행
==> Database buffer Cache에 있는지 확인
==> Data File에서 Block의 정보를 읽고 Database buffer Cache에 전체를 복사해서 결과 가지고 옴
=> Fetch
==> 필요한 정보만을 Block에서 간추린다. [PGA]
==> user process 전달
2. UPDATE 실행계획{UPDATE emp SET name='홍길동' WHERE empno=100}
-> SELECT의 parsing까지 동일
-> server process
=> Execute : 실행계획을 받아서 실행
==> Database buffer Cache에 있는지 확인
==> Data File에서 Block의 정보를 읽고 Database buffer Cache에 전체를 복사해서 결과 가지고 옴
==> Redo log Buffer 작업 내용 저장[작업일지]
===> instance 이기 때문에 수시로 Redo log file에 저장
====> 속도 fast - 수정 및 저장 내용이 적고 간결, Block의 위치에 상관없기 때문에
====> LGWR
===> 만약 불가피하게 디비가 죽는다면 다시 디비를 올리면서 Database File의 데이터와
Redo log file의 내용을 비교해서 변경사항이 있다면 Database File의 내용을 변경한다.
====> 아카이브 로그에 다시 백업 복사
==> undo segment에 원래 내용 저장[취소하기 위해서]
==> Database buffer Cache에 원하는 정보로 변경 [commit 전에 변경 완료]
'Database > Oracle' 카테고리의 다른 글
10g RAC의 Load Balancing과 Failover (1) | 2009.12.30 |
---|---|
Backup and Recover (0) | 2009.12.30 |
Admin Workshop 1 - 구조 (0) | 2009.12.15 |
힌트 종류 (0) | 2009.12.15 |
외래키 검색 (0) | 2009.12.09 |