2012. 7. 9. 18:03

   

 Context

 Reference

 Processes

 User process
 Server process
 Background procsses : SMON, PMON, DBWR, LGWR, CKPT...

 Memory structures

 SGA(System Global Area) :
  - Shared pool
  - Database buffer cache
  - redo log buffer
 PGA(Program Global Area)

 Physical sturctures(files)

 Database files:
  - Data files
  - Control files
  - Redo log files
 Other files :
  - Parameter file
  - Password file
  - Archived redo log files

 Parameters

 SHARED_POOL_SIZE
 DB_BLOCK_SIZE
 DB_BLOCK_BUFFERS
 LOG_BUFFER


1. Oracle Database Users
   - Logging in directly to the host : host에서 직접 접속...
   - Using a two-tiered(Client-server) connection : sql*plus...
   - Using a three-tiered connection : tuxedo...

   * Session : user가 login해서 logout할때까지의 기간

2. User Process
   - SQL*Plus, Server Manager, Developer/2000등의 application을 실행했을때 생성.
   - client에서 실행된다.
   - UPI(User Program Interface)를 포함한다.

3. Server Process
     - user process를 받아서 host에서 처리해서 결과를 client에 return한다..
     - user process와 1:1 관계이다.
     - PGA(Program Global Area)를 호출한 메모리영역을 사용한다.
     - OPI(Oracle Program Interface)를 사용한다.

4. Oracle Instance
   * SGA(Sysem Gloval Area)
     - Shared pool : library cache & Data Dictionary cashe를 갖고 있다.
     - Database buffer : 가장 최근에 처리된 데이터를 저장해놓고 있다.
     - Redo log buffer : redo log file에 log를 저장하기전에 어느정도 용량을 buffer에 저장해놓고
       처리한다.

   * Background Process
     - DBWR(Database Writer) : 변경된 데이터를 data file에 쓰는 역할을 한다.
     - LGWR(Log Writer) : redo log buffer의 내용을 redo log file에 쓰는 역할을 한다.
     - SMON(System Monitor) : instance fail시 instance를 복구하는 역할을 한다.
     - PMON(Process Monitor) : 하나의 process가 fail되면 resource를 clean해주는 역할을 한다.
     - CKPT(Checkpoint process) : Database 상태 정보를 update하기 위한 응답을 보내준다.

   * Oracle Instance는 ORACLE_SID에서 setting한다.

   * Oracle Server ─┬─ Instance : Memory(SGA) & Background Process
                     └─ Database : data files, redo log files, control files

5. Database File
   - Data files : 현재의 transaction에 의해서 수정되어지는 data dictionary, user object,
     데이터의 before image등을 저장.
   - Redo log files : 데이터저장 실패에 대비해서 변경된 레코드를 저장.
   - Control files : database를 유지하는데 필요한 정보를 갖고 있다.

6. Other Key Physical Structure
   ; Database File 이외의 file들

   - Parameter file : instance를 구성할때 이 file에 정의된 instance정보를 읽는다.
   - Password file : client에서 접속할때의 user정보에 대한 file
   - Archived redo log file : redo log file의 backup file

7. Running a Query
   Parse --> Execute --> Fetch
   1. Parse(구문분석)
      i) syntax check
      ii) sementics check (Object확인, 권한확인)
      iii) 실행계획과 Parsed Tree
   2. Execute(실행)
   3. Fetch(인출) --> Select only

8. Shared Pool
   - parameter file안에 있는 SHARED_POOL_SIZE에서 size가 정의된다.
   - Library cache : Text of the statement, Parse Tree, Execution Plan등을 저장하고 있다.
   - Data Dictionary cache : table, column definition, username, password, privilege등의
     정보가 있는 data dictionary를 가장 최근에 사용한 내용을 저장하고 있다.

9. Database buffer Cache
   - DB_BLOCK_BUFFERS parameter에서 buffer의 수를 정의 한다.
   - DB_BLOCK_SIZE parameter에서 block 1개의 크기를 정의 한다.

10. Program Global Area(PGA)
   - 공유나 쓰기가 되지 않는다.
   - Sort area, Session Information, Cursor state, Stack space로 구정되어 있다.
     Sort area : 어떠한 sort를 사용할건지에대한 정보.
     Session Information : 현재 user session에 대한 정보
     Cursor state : 현재 cursor의 상태정보
     Stack space : session변수의 영역

11. Running a DML Statement
   * UPDATE emp SET sal = sal*1.1 WHERE empno = 7369; 를 실행하면 Parse - Excute의 과정을 거친다.

   * Excute Phase
     1. buffer cache가 존재하지 않는다면 data file로부터 data와 rollback block을 읽는다.
     2. Buffer cache를 읽어서 block으로 복사한다.
     3. server process가 데이터에 Lock을 건다.
     4. server process가 redo log buffer의 새로운 값과 before-image값을 비교해서 바뀐
        부분을 기록한다.
     5. 마지막으로 수정 작업을 완료한다.

12. Rollback segment
   - transaction이 roll back되었다면 undo한다.
   - 읽기 일관성을 위해서...(read consistency)
   - fail시 database를 복구하기 위해서...

13. Redo Log Buffer
   - LOG_BUFFER에서 size를 정의한다.
   - 순환되는 buffer이다.
   - 순차적으로 사용된다.

14. DataBase Writer (DBWR)
   - buffer가 꽉찾을 때 가장 오래된 buffer의 내용을 지우고 새로운 내용을 기록한다.
   - server process가 free buffer를 찾다가 못 찾았을 경우 DBWR이 작동 된다.
   - timeout이 발생했을 때 작동된다.
   - checkpoint가 발생했을 경우에 작동된다.

15. Log Writer (LGWR)
   - log buffer가 1/3 정도 찼을 때...
   - timeout이 발생했을 경우 3초마다 기록한다.
   - transaction COMMIT이 발생했을 경우.

16. COMMIT Processing
   ; commit 이 발생하면 아래와 같은 순서로 처리된다.

   1) commit한 record들을 log buffer에 기록한다. SCN(System Change Number: Tansaction을 구별할 수
      있게하는 번호)이 발생된다.
   2) LGWR이 수행된다.
   3) commit message를 user에게 보여준다.
   4) resource lock이 풀린다.


[ Lab ]


1. 실습환경을 세팅하세요!!!
$ svrmgrl
SVRMGR> connect / as sysdba  --> connect internal로 써도 되지만...정석대로 사용하는게 좋다.
SVRMGR> CREATE USER scott
     2  IDENTIFIED BY tiger
     3  DEFAULT TABLESPACE data01
     4  TEMPORARY TABLESPACE temp ;
SVRMGR> !   --> host로 써도 된다.
$ vi scott.sql  --> 자신에 맞게 편집한다음...
$ exit
SVRMGR> @ scott.sql  --> EMP, DEPT테이블을 만들고 데이터를 insert한다.

   -- mino.sql --

SET ECHO OFF

rem CONGDON    Invoked in RDBMS at build time.   29-DEC-1988
rem OATES:     Created: 16-Feb-83
connect system/manager;
GRANT CONNECT,RESOURCE,UNLIMITED TABLESPACE TO SCOTT ;
connect scott/tiger;
CREATE TABLE SCOTT.DEPT
       (DEPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,
        DNAME VARCHAR2(14) ,
        LOC VARCHAR2(13) ) ;
CREATE TABLE SCOTT.EMP
       (EMPNO NUMBER(4) CONSTRAINT PK_EMP PRIMARY KEY,
        ENAME VARCHAR2(10),
        JOB VARCHAR2(9),
        MGR NUMBER(4),
        HIREDATE DATE,
        SAL NUMBER(7,2),
        COMM NUMBER(7,2),
        DEPTNO NUMBER(2) CONSTRAINT FK_DEPTNO REFERENCES SCOTT.DEPT);
INSERT INTO scott.DEPT VALUES
        (10,'ACCOUNTING','NEW YORK');
INSERT INTO scott.DEPT VALUES
        (20,'RESEARCH','DALLAS');
INSERT INTO scott.DEPT VALUES
        (30,'SALES','CHICAGO');
INSERT INTO scott.DEPT VALUES
        (40,'OPERATIONS','BOSTON');
INSERT INTO scott.EMP VALUES
(7369,'SMITH','CLERK',7902,to_date('17-12-1980','dd-mm-yyyy'),800,NULL,20);
INSERT INTO scott.EMP VALUES
(7499,'ALLEN','SALESMAN',7698,to_date('20-2-1981','dd-mm-yyyy'),1600,300,30);
INSERT INTO scott.EMP VALUES
(7521,'WARD','SALESMAN',7698,to_date('22-2-1981','dd-mm-yyyy'),1250,500,30);
INSERT INTO scott.EMP VALUES
(7566,'JONES','MANAGER',7839,to_date('2-4-1981','dd-mm-yyyy'),2975,NULL,20);
INSERT INTO scott.EMP VALUES
(7654,'MARTIN','SALESMAN',7698,to_date('28-9-1981','dd-mm-yyyy'),1250,1400,30);
INSERT INTO scott.EMP VALUES
(7698,'BLAKE','MANAGER',7839,to_date('1-5-1981','dd-mm-yyyy'),2850,NULL,30);
INSERT INTO scott.EMP VALUES
(7782,'CLARK','MANAGER',7839,to_date('9-6-1981','dd-mm-yyyy'),2450,NULL,10);
INSERT INTO scott.EMP VALUES
(7788,'SCOTT','ANALYST',7566,to_date('13-JUL-87')-85,3000,NULL,20);
INSERT INTO scott.EMP VALUES
(7839,'KING','PRESIDENT',NULL,to_date('17-11-1981','dd-mm-yyyy'),5000,NULL,10);
INSERT INTO scott.EMP VALUES
(7844,'TURNER','SALESMAN',7698,to_date('8-9-1981','dd-mm-yyyy'),1500,0,30);
INSERT INTO scott.EMP VALUES
(7876,'ADAMS','CLERK',7788,to_date('13-JUL-87')-51,1100,NULL,20);
INSERT INTO scott.EMP VALUES
(7900,'JAMES','CLERK',7698,to_date('3-12-1981','dd-mm-yyyy'),950,NULL,30);
INSERT INTO scott.EMP VALUES
(7902,'FORD','ANALYST',7566,to_date('3-12-1981','dd-mm-yyyy'),3000,NULL,20);
INSERT INTO scott.EMP VALUES
(7934,'MILLER','CLERK',7782,to_date('23-1-1982','dd-mm-yyyy'),1300,

NULL,10);
COMMIT;
exit;


2. startup, shutdown, connect, disconnect
$ svrmgrl
SVRMGR> connect / as sysdba
SVRMGR> startup
SVRMGR> connect scott/scott
SVRMGR> disconnect
SVRMGR> shutdown

Posted by 몰라욧