◆ 오라클 데이터베이스의 논리적 구조

우리가 물건을 이곳에서 저곳으로 옮기는 상황을 생각해보자.
1000개의 볼펜을 옮긴다는 가정하에, 볼펜 1개씩 옮기면 너무 오래 걸린다. 그래서 100개가 들어갈 수 있는 박스로 옮기면 10번이면 끝이 난다.
그리고 그 상자들을 모아서 한꺼번에 가져가면 좀 더 빨리 끝이 날 것이다.



◆ OS블록과 오라클 블록 그리고 익스텐트
위에서 그림에는 나와있지 않지만 오라클 블록은 OS블록이 하나 이상 모여서 이루어진 것이다.(OS블록은 한개가 될 수도 있고 여러개가 될 수도 있다.)


위 그림을 보자. 하나의 오라클 블록에 A가 저장되어 있다. 오라클 블록은 4개의 OS블록이 합쳐져 구성되어 있다.
Case1의 경우 A를 저장하는데 각 블록이 여러 곳에 분산되어 저장된다. 만약 HDD의 특정 부분이 고장이 나서 OS#3블록을 손실했다면 A데이터는 살리지 못하는 사태가 올 수 있다.
Case2의 경우 오라클 블록별로 뭉쳐서 HDD에 저장하므로 Case1의 경우보다 더 안전하고 쿼리를 날렸을 때의 결과속도 또한 여러 곳에서 읽지 않고 한곳에서 연속으로 읽으면 되기 때문에 훨씬 빠를 것이다.
그래서 오라클은 블록을 뭉쳐서 관리한다. 익스텐트는 오라클 블록을 모아놓은 것이다. 이렇게 모아 놓으면 I/O 속도도 훨씬 빠르고, 공간효율 또한 좋다.

솔라리스의 기본 OS블록 사이즈는 8K이다.
오라클 10g의 기본 블록 사이즈는 8K이다. (9i는 4K, 11g는 8K)
그래서 유닉스(솔라리스)에 오라클10g를 설치하면 OS블록과 오라클블록이 1:1 매칭이 된다.



◆ 세그먼트
세그먼트라는 용어가 굉장히 생소해 보일지 모르지만, 이미 우리가 앞에서 배운 것들이다.
예를 들어 테이블 세그먼트, 인덱스 세그먼트, 언두 세그먼트 등등.
세그먼트는 데이터를 저장하기 위해 만들어놓은 틀. 즉, 데이터를 담는 그릇이라고 생각하면 쉽다.
틀을 만들기 위해 사용한 원재료를 익스텐트, 그 원재료를 더 작게 보아 그 성분을 블록이라고 생각하라.
그릇 안에 담기는 데이터의 종류에 따라 테이블이 담기면 테이블 세그먼트, 인덱스가 담기면 인덱스 세그먼트, 언두가 담기면 언두 세그먼트라고 부른다.


◆ Object와 Segment의 차이
오라클을 쓰는 목적이 무엇인가? 물론 데이터를 저장하려고 쓴다.
데이터가 굉장히 많은 데 그 많은 데이터들을 저장해놓고 관리하기 위해 오라클 같은 DBMS를 쓸 것이다.
데이터를 관리하기 위해 만든 모든 것들을 오브젝트라 부른다.(Synonm, 뷰, 트리거, 테이블, 인덱스 제약조건 등)
그 중 특별한 성격을 가진 것들(독립적인 저장공간을 가진 오브젝트)은 세그먼트라고 별도로 부른다.
예를 들어 생각해보자.
뷰 안에 데이터가 들어있나? 뷰는 데이터가 없기 때문에 별도의 하드디스크 공간을 차지하지 않는다. 뷰는 딕셔너리에 저장이 되고, 뷰 자체는 데이터를 가지고 있지 않다.
Constraint나 Synonym도 별도의 데이터를 가지고 있지 않고 딕셔너리에 저장된다.
이러한 것들은 오브젝트라 부르고, 테이블이나 인덱스, 언두 같은 것들은 데이터를 가지고 있기 때문에 세그먼트라고 부르는 것이다.



◆ 테이블스페이스
하나의 데이터베이스엔 테이블스페이스가 여러 개 있다. 그렇다면 하나의 데이터베이스에 테이블스페이스는 최소 몇 개가 있어야 할까? 정답은 System, Undo 두개는 필수로 존재해야 하고, 나머지는 만들면 된다. (Sysaux는 10g부터 존재함)

'오라클 > Admin' 카테고리의 다른 글

[Admin] Parameter File  (0) 2010.08.26
[Admin] Database Starting Up  (0) 2010.08.26
[Admin] Background Process  (0) 2010.08.26
[Admin] Dedicated Server와 Shared Server  (0) 2010.08.25
[Admin] Oracle Primary Architecture  (0) 2010.08.25
Posted by 겨울섬
,