Last update: @1/31/2023
논리적 구조, 물리적 구조
•
물리적 구조: 실제 컴퓨터 내부에서 다뤄지는 파일 구조
•
논리적 구조: 오라클DB에서 데이터를 다루는 개념적 구조
Tablespace, segment, extent, datablock
•
오라클 내부에서는 데이터 블록(data block), 익스텐트(extent), 세그먼트(segment), 테이블스페이스(tablespace)라는 논리적 단위로 데이터를 관리함
Data block
•
데이터 블록은 Oracle block이나 페이지(page)등으로도 부름
•
디스크 상의 여러개의 바이트를 묶은 단위(수 Kb)
•
운영체제에서 사용하는 데이터 블록 단위의 배수여야 함
•
블럭 내부는 약 80%까지만 새로운 행으로 채워지고, 나머지 20%는 업데이트를 위해 남겨둠
•
80%가 찼다면 다시 40%가 될 때까지 새로운 행을 받아들이지 않고, 40% 밑으로 내려가면 다시 새로운 행을 쓰기 시작하
Extent
•
연속된 블록을 일정 개수만큼 묶어서 특정한 정보를 저장하기 위해 할당된 단위
Segment
•
익스텐트를 묶어서 특정한 데이터 구조를 저장하기 위해 할당된 단위
•
한 세그먼트 아래 묶인 익스텐트는 모두 같은 테이블 스페이스에 저장됨
•
예를 들어 각 테이블의 데이터는 데이터 세그먼트(data segment)에, 인덱스는 인덱스 세그먼트(index segment)에 저장됨
•
오라클은 세그먼트를 위한 공간을 익스텐트 단위로 할당하기 때문에 만약 기존의 익스텐트가 가득 차면 가득 찬 익스텐트가 속한 세그먼트에 새로운 익스텐트를 할당함
◦
이렇게 익스텐트는 필요할 때 할당되기 때문에 연속적이지 않을 수 있고, 같은 세그먼트 내의 익스텐트라도 다른 파일에 할당될 수도 있음
◦
다만 각각의 익스텐트 자체는 여러 파일에 걸쳐있지는 않음
Tablespace
•
오라클의 최상위의 논리적 저장 단위로, 하나 이상의 데이터베이스 파일로 이루어져 있음
•
테이블, 인덱스 등의 객체들로 이루어져 있는데, 이 객체들은 하나의 테이블 스페이스에만 속하지만, 테이블 스페이스가 여러 데이터 파일을 가질 수 있기 때문에, 객체들 역시 여러 데이터베이스 파일에 걸칠 수 있음
•
데이터베이스와 테이블스페이스의 차이
◦
오라클 데이터베이스는 하나 이상의 테이블스페이스로 이루어져 있음
•
테이블스페이스와 데이터파일의 차이
◦
테이블스페이스는 하나 이상의 데이터파일로 이루어져 있음
•
가장 단순한 형태의 데이터베이스는 1개의 데이터파일로 이루어진 1개의 테이블스페이스를 생각해볼 수 있겠고, 그다음 복잡한 형태는 각각 2개의 데이터파일로 이루어진 2개의 테이블스페이스를 생각해볼 수 있겠음(총 4개의 데이터파일)
•
schema object(테이블 또는 인덱스)를 생성하면 해당 테이블의 세그먼트가 지정된 테이블 스페이스에 생성됨. 즉, 테이블 스페이스를 이루는 하나 이상의 파일들에 걸치거나 걸치지 않고 생성될 수 있음. 하지만 테이블 스페이스 두 개이 상을 걸쳐서 생성되지 않고, 오직 하나의 테이블 스페이스에 속하게 됨
Tablespace의 용도
•
데이터베이스 데이터를 디스크 어느 공간에 할당할 지 제어(예를 들어 다른 하드에 분산시킨다던가 등)
•
데이터베이스 유저들에게 특정한 용량을 할당할 때
•
각각의 테이블스페이스를 온라인하거나 오프라인 시켜서 접근을 제어할 때
•
일부 데이터베이스만 백업하거나 복구할 때
•
데이터 스토리지를 여러 장치에 걸쳐서 성능을 향상시킬 때
•
임시 테이블을 만들고 나중에 없앨 때
•
읽기 전용 테이블 등을 만들 때
데이터베이스 용량을 늘리는 세 가지 방법
1.
하나의 테이블 스페이스 내에 새로운 데이터파일 생성하기
2.
새로운 테이블스페이스 생성해서 그곳에 데이터베이스 추가하기
3.
데이터파일 크기 자체를 동적으로 늘리기