2019. 12. 24. 16:27ㆍSecurity/oracle database
* Oracle 구조 구성 요소
오라클의 기본 구성 요소
인스턴스와 데이터베이스로 구성 되어 있다. 오라클에서 shut down 명령을 치면 인스턴스가 죽고 데이터베이스는 남아 있다.
- 인스턴스 : 메모리에 위치. 오라클의 논리적 구조(logical structure)
- 데이터 베이스 : 하드디스크(물리적인 저장매체)에 위치. 오라클의 물리적 구조(Physical structure)
- 사용자 프로세스 : 사용자가 oracle에 접속할때 사용. sqlplus와 같은 프로세스를 의미. 서버 프로세스를 통해 oracle 서버에 접속한다.
- 사용자 프로세스 : 사용자의 요청한 명령을 실행하며 oracle서버와 통신을 하는 프로세스.
서버 프로세스가 문장을 실행하기 전에 하는 일(파싱)
1. 문장검사
사용자 프로세스에서 입력한 구문이 오타가 없는 문장인지 확인. 문제가 있다면 사용자 프로세스에 다시 알려주고 아니면 인스턴스에 문장을 보낸다.
2. 구문 분석
딕셔너리를 조회해서 select에서 요청하는 테이블이 실제로 존재하는지 확인
3. 실행계획 작성
어떤 테이블을 먼저 읽고 어떤 테이블을 나중에 읽을지 작성.
매번 이렇게 실행계획을 작성해야하기 때문에 오라클은 메모리에 수행했던 명령어를 저장했다가 이전에 수행했던 문장을 다시 실행할경우 하지 않고 불러온다. 이렇게 파싱을 수행하지 않고 불러오는 문장의 비율을 파스율이라고 한다.
데이터베이스
오라클에서는 무결성을 지키기 위해 데이터베이스 내의 파일에 물리적인 접촉이 발견된 경우 모든 파일을 날려버린다.
데이터 파일 : 테이블 뷰, 인덱스, 계정 시퀀스 등등 생성한 모든 segment(실제 데이터)를 저장.
리두 로그(Redo log) 파일 : 현재 시점 기준으로 작업 일지(누가 언제 어떤 트랜잭션을 입력해서 데이터가 변경됐는지 모두 기록)를 저장. 장애가 생겼을때 작업일지가 정확하다면 참조해 복구하기 수월.
Control 파일 : 데이터 파일과 리두 로그 파일의 위치를 저장. 오라클은 컨트롤 파일을 통해서 다른 파일의 위치를 참고. 데이터베이스의 무결성을 유지 관리한다.
아카이브된 로그 파일 : 리두 로그 파일의 용량이 꽉 찼을때 리두 로그의 작업일지를 옮겨놓는 파일.
파라미터 파일 : 데이터베이스 밖에 존재하며 파라미터의 정보를 보관. 오라클이 시작 될때 가장 먼저 확인한다. 파일의 정보를 수정해도 곧바로 적용 되지 않는다.
패스워드 파일 : 관리자가 원격지에서 사용할때 네트워크에서 관리자임을 인증할때 사용하는 파일과 OS 인증 정보가 들어있다.
인스턴스
스타트업 하면 작동함. SGA(메모리 영역)와 백그라운드 프로세서(PMON, SMON, DBWR, LGWR, CKPT, ...)로 구성.
- SGA : 서버 프로세스가 공통으로 사용하는 영역.
Shared Pool : 라이브러리 캐시와 데이터 딕셔너리 캐시로 구성.
라이브러리 캐시 : 모든 SQL문장, 문장의 실행계획을 보관. 서버 프로세스가 사용자 프로세스가 작성한 구문이 저장됐는지 확인하는 장소. 용량이 부족할 경우 LRU알고리즘을 사용해서 사용하지 않는 구문을 삭제한다.
데이터 딕셔너리 캐시 : 데이터안의 딕셔너리의 정보가 들어있음. 데이터 파일에 있는 테이블의 유, 무등을 확인하는 작업을 한다.
데이터베이스 버퍼 캐시 : 데이터베이스 내에서 사용자가 실행하는 모든 작업을 수행하는 장소. 딕셔너리 외에 모든 정보가 들어있다. 데이터 파일에서 검색된 데이터 복사본을 가지고 있다.
리두 로그 버퍼 : 데이터 베이스에서 수행한 모든 작업 일지(엔트리)가 저장되어 있음. 사용자가 COMMIT을 하면(심지어 ROLLBACK을 하더라도) 리두 로그 버퍼의 모든 엔트리가 리두로그 파일에 덮어씌워진다. 크기는 (cpu 갯수*512k)가 권고 사항일정도로 파일 크기가 매우 작다.
- 백그라운드 프로세서
PMON(피몬) : 프로세서 모니터. 메모리를 돌아다니면서 좀비 프로세스를 죽여 메모리를 반환 받을수 있게 함.
SMON(에스몬) : 시스템 모니터. 오라클이 비정상 종료되어 인스턴스 장애가 생겼을때 리두로그 파일에 있는 내용으로 데이터 파일을 복구 할때 실행.
DBWR(DB라이터) : 데이터베이스 라이터. DBWn이나 DBW0이라고 쓰기도 한다. 데이터베이스 버퍼 캐시에 있는 내용이 기존의 데이터 파일에 있는 내용과 달라졌을때 데이터 파일로 옮기는 역할. 옮겨적는 시기는 랜덤하다.
LGWR(로그 라이터) : LGWn이나 LGW0이라고 쓰기도 한다. COMMIT할때 리두 로그 버퍼에 있는 엔트리를 리두 로그 파일로 옮긴다.
CKPT : 체크 포인트. DB라이터와 로그라이터가 기동 시기가 달라서 동기화가 되지 않을때 동기화 시키기 위해 작동.
만약 유저 프로세스가 서버프로세스에게 get(메모리에 테이블이 있는지 없는지 확인하는 것)을 실행했을때 데이터베이스 버퍼 캐시에 가서 확인해보는데 원하는게 메모리에 있다면 heat(히트)라고 하고 없다면 miss라고 한다. 오라클에서는 get대heat 비율을 계속해서 계산한다.
만약 트랜잭션이 insert라면 데이터베이스 버퍼 캐시에 있는 내용과 데이터파일에 있는 내용이 다르기때문에 적어줘야 한다.
* 용어 및 개념 정리 및 복습
-테이블을 스캔하는 방법
-> 1. 풀 스캔
-> 2. 인덱스 스캔
-리두(Redo) : 다시 실행하는 것.
'Security > oracle database' 카테고리의 다른 글
오라클 데이터베이스 관리자 기초-(5)리두 로그 파일 유지 관리 (0) | 2020.01.07 |
---|---|
오라클 데이터베이스 관리자 기초-(4)컨트롤 파일 유지 관리 (0) | 2020.01.07 |
오라클 관리자 실습과정 (0) | 2020.01.06 |
오라클 데이터베이스 관리자 기초-(3)데이터 딕셔너리 및 동적 성능 뷰 사용 (0) | 2020.01.02 |
오라클 데이터베이스 관리자 기초-(2)Oracle 인스턴스 관리 (0) | 2019.12.26 |