출처 : 리눅스/유닉스/OCP/MCDBA/SCSA/CCNP/JAVA/JSP/EJB/UNIX/C++(네이버 카페)

오라클 데이터베이스는 유니트(Unit)로 취급되는 데이터의 집합이다. 데이터베이스의 목적은 관계가 있는 정보의 저장 및 추출이다. 데이터베이스에는 논리적인 구조(Logical Structures)와 물리적인 구조(Physical Structures)가 있다. 물리적인 구조와 논리적인 구조가 분리되어 있기 때문에 물리적인 데이터의 저장이 논리적인 저장 구조의 액세스 없이도 이루어질 수 있다.

 

1. 논리적 데이터베이스 구조(Logical Database Structures)
 

 
오라클 데이터베이스의 논리적 구조에는 테이블스페이스, 스키마 오브젝트, 데이터블록, 익스텐트, 세그먼트가 있다.
(1) 테이블스페이스(Tablespaces)
데이터베이스는 테이블스페이스라고 하는 논리적 저장 단위로 나뉘어진다. 테이블스페이스는 하나 또는 여러개의 데이터 파일로 구성되는 논리적인 데이터 저장 구조이다. 즉, 오라클 데이터베이스에 저장되는 데이터들은 테이블스페이스라고 하는 논리적 스토리지에 저장되며 이러한 테이블스페이스는 물리적으로 하드디스크의 데이터 파일로서 저장된다.

(i) 데이터베이스, 테이블스페이스, 데이터파일
데이터베이스, 테이블스페이스, 테이터파일 사이의 관계는 그림 1-1에서 설명되어지고 있다.

 

  • 데이터베이스는 하나 또는 그이상의 테이블스페이스로 나누어진다.
  • 하나 또는 그이상의 데이터파일은 테이블스페이스에서 모든 논리적 구조의 데이터를 물리적으로 저장하기 위해 명시적으로 생성된다.
  • 테이블스페이스의 데이터파일 크기의 합은 테이블스페이스 전체 저장 용량이 된다. 위 그림에서 SYSTEM Tablespace는 2MB, 반면에 USER Tablespace는 4MB의 저장 용량을 가지고 있다.
  • 테이블스페이스의 저장 용량의 합은 데이터베이스 전체 저장 용량이 된다. 위 그림에서 데이터베이스는 6MB의 저장 용량을 가지고 있다.
(ii) 온라인, 오프라인 테이블스페이스
테이블스페이스는 온라인 또는 오프라인 상태가 된다. 테이블스페이스는 일반적으로 사용자가 테이블스페이스 내의 정보를 액세스 할 수 있도록 온라인상태이다. 그러나 때때로 데이터베이스의 다른 사람들에게 일반적인 액세스를 허락하는 동안 데이터베이스의 일부분은 오프라인 상태가 되기도 한다. 이것은 많은 관리자들이 작업을 더욱 쉽게 수행하게 해준다.

(2) 스키마(Schemas)와 스카마 오브젝트
스키마는 데이터베이스 오브젝트의 집합이다. 스카마 오브젝트는 데이터베이스의 데이터에 관하여 직접 설명해 주는 논리적 구조이다. 스키마 오브젝트는 테이블, 뷰, 시퀀스, 저장 프로시저, 시노님, 인덱스, 클러스터와 같은 구조를 포함한다. 스키마라는 말을 처음 듣는다면 그 용어의 생소함으로 왠지 어렵게 느껴질지 모르지만 데이터베이스 안에 존재하는 여러 가지 테이블과 인덱스와 같은 논리적 구조를 통틀어서 부르는 용어라고 간단히 정의할 수 있다.
<참조> 테이블스페이스와 스키마 사이에는 관계가 없다. 같은 스키마에 있는 객체가 다른 테이블스페이스에 있을 수 있고 한 테이블스페이스가 다른 스키마의 오브젝트를 가질 수도 있다.
(3) 데이터블록, 익스텐트, 세그먼트
(i) 데이터블록(Data Blocks)
데이터 블록은 오라클 블록 또는 페이지라고 불리는 오라클 내의 가장 작은 저장 단위로 데이터베이스 데이터는 여기에 저장된다. 데이터 블록은 실제 물리적 하드디스크상의 저장 공간으로 데이터베이스가 생성될 때 오라클 파라미터 파일에서 그 크기를 지정한다.

(ii) 익스텐트(Extents)
논리적인 데이터베이스 영역의 다음 단계를 익스텐트라고 한다. 익스텐트는 데이터 블록의 모임으로 이루어지며 특별한 형태의 정보를 저장하기 위해 사용된다. 데이터 파일에 하나의 의미를 가진 정보인 오라클 객체를 저장하기 위해서는 일련의 연속적인 데이터 블록들을 필요로 하는데 이것을 오라클에서는 익스텐트라 부른다. 이러한 익스텐트는 데이터가 데이터 파일에 추가될 때마다 할당된다.

(iii) 세그먼트(Segments)
익스텐트 상위의 논리적인 데이터베이스 레벨을 세그먼트라고 한다. 세그먼트는 특정 논리적 구조를 위해 할당된 익스텐트의 집합이다. 세그먼트는 4가지 타입이 존재하는데 다음과 같다.

  • 데이터세그먼트(Data Segment) : 데이터 세그먼트는 실제적인 데이터를 저장하는 곳이다. 이 데이터 세그먼트는 테이블이 생성될 때 생성된다.
  • 인덱스세그먼트(Index Segment) : 인덱스 세그먼트 또한 그 이름이 가리키는 것처럼 인덱스를 위한 저장 공간이다. 이 세그먼트는 인덱스가 생성될 때 생성되며 모든 인덱스는 이 인덱스 세그먼트에 존재하게 된다.
  • 롤백세그먼트(Rollback Segment) : 데이터베이스에 하나 이상의 롤백세그먼트는 원상태로 돌리려는 정보를 임시적으로 저장하기 위해 데이터베이스 관리자에 의해 생성된다. 롤백 세그먼트는 트랜잭션을 확인하고 반영한다는 의미인 커밋(Commit)이 실행되기 전까지 계속 트랜잭션을 기록하게 되며 커밋이 일어나면 자동적으로 할당된 익스텐트를 풀어주게 된다.
  • 임시세그먼트(Temporary Segment) : 임시세그먼트는 SQL문이 실행하기 위한 임시 작업 영역을 필요로 할 때 오라클에 의해서 생성된다. 문장의 실행을 마쳤을 때 임시세그먼트의 익스텐트는 다음 사용을 위해서 시스템에 반환된다.
오라클은 존재하는 세그먼트의 익스텐트들이 풀(Full) 되었을 때 다이나믹하게 공간을 할당한다. 그러므로 오라클은 필요로 하는만큼 또 다른 세그먼트의 익스텐트를 할당한다.
 

2. 물리적 데이터베이스 구조(Physical Database Structures)
 

 
오라클 데이터베이스의 물리적 구조에는 데이터파일, 리두로그파일, 컨트롤파일이 있다.
(1) 데이터파일(DataFiles)
모든 데이터베이스는 하나이상의 데이터파일을 가지고 있고, 모든 데이터베이스의 데이터를 포함하고 있다. 테이블, 인덱스와 같은 논리적 데이터베이스 구조의 데이터를 데이터파일에 물리적으로 저장된다.
데이터파일의 사용
데이터베이스가 정상적으로 작동하는동안 데이터파일에서 데이터는 필요로하는 만큼 읽어서 오라클 메모리 캐시에 저장된다. 예를들어 사용자가 테이블에서 어떤 데이터를 액세스 하기를 원한다고 하자. 만일 요청된 정보가 메모리캐시에 존재하지 않는다면 데이터파일로부터 읽어서 메모리에 저장하게 된다. 변경되거나 새로운 데이터는 데이터파일에 즉시 쓸 필요가 없다. 디스크 액세스 수를 줄이고 성능을 향상시키기 위해 메모리에 두었다가 백그라운드 프로세스인 DBWn에 의해서 결정되어 한번에 해당 데이터파일에 기록한다.

(2) 리두로그파일(Redo Log Files)
모든 오라클 데이터베이스는 두개이상의 리두로그파일을 가지고 있다. 리두로그의 기본적인 기능은 데이터의 모든 변경을 기록하는 것이다. 리두로그파일은 변경된 모든 데이터를 저장하는 함으로써 치명적인 데이터베이스 실패(또는 에러)로부터 보호를 해주고, 데이터베이스의 복구 작업의 경우에 사용된다. 리두로그 자체의 실패에 대해서도 보호를 하기 위해 오라클은 다른 디스크에 두개이상의 리두로그 복사본을 두고 있다.
리두로그파일의 사용
리두로그파일은 시스템 또는 데이터를 데이터파일에 쓰는 것을 방해하는 매체실패(Media Failure)로부터 데이터베이스를 복구하는데 사용된다. 예를 들어, 만약 데이터베이스의 동작이 예상치못한 힘에 의해서 종료되었다면, 메모리에 있는 데이터는 데이터파일에 쓰여지지 못하고 데이터는 잃어 버리게 그러나, 어떤 잃어버린 데이터도 데이터베이스가 다시 작동할 때 복구될 수 있다. 데이터파일에 가장 최근의 리두로그파일의 정보를 적용시킴으로써 오라클은 실패가 발생하기 전상태로 데이터베이스를 복구한다. 복구작업이 이루어지는 동안 리두로그가 적용되는 프로세스를 Rolling Forward라고 한다.

(3) 컨트롤파일(Control Files)
모든 오라클 데이터베이스는 컨트롤파일을 가지고 있다. 컨트롤 파일은 데이터베이스 이름, 데이터파일과 리두로그파일의 이름과 위치, 데이터베이스 생성시간과 같은 정보를 포함하고 있다. 리두로그와 같이 오라클은 컨트롤 파일의 보호를 위하여 복합적인 컨트롤 파일을 허용하고 있다.
컨트롤파일의 사용
컨트롤 파일은 데이터파일, 리두로그파일 생성과 같은 데이터베이스의 물리적인 변경이 이루어지면 오라클에 의해서 자동적으로 그 내용이 변경된다. 그리고 데이터베이스 복구가 필요할 때에도 사용된다.

(4) Structured Query Language(SQL)
SQL은 데이터베이스를 정의하고 다루는 프로그래밍 언어이다. 데이터베이스는 하나이상의 테이블로 구성이 되는데 각 테이블은 컬럼과 행을 가지고 있다. 예를 들어 사원 데이터베이스의 테이블은 사원번호라는 컬럼을 가지고 있고 각각 사원번호마다 행을 가지게된다. SQL문을 사용해서 이런 테이블의 데이터를 정의하고 다룰 수 있다. Data Definition Language(DDL)문을 사용해서 데이터베이스와 테이블의 생성 및 변경이 이루어지고, Data Manipulation Language(DML)문을 사용해서 테이블의 데이터를 추출, 업데이트, 삭제가 이루어진다. 가장 일반적인 SQL문은 SELECT문장인데 데이터베이스로부터 데이터를 추출하는데 사용된다. 추가적으로 오라클 서버는 PL/SQL이라고 하는 절차적인 언어를 제공한다. PL/SQL은 프로그래머가 SQL문의 순서 조정, 변수의 사용, 에러핸들링 등의 SQL문의 프로그램을 가능하게 해준다.
(5) 데이터 유틸리티(Data Utilities)
하나의 오라클 데이터베이스에서 또다른 데이터베이스로 일부분을 옮기고자 할 때 Export, Import, SQL * Loader 세가지 유틸리티가 사용된다.
(i) Export/Import
오라클에서 제공하는 백업 및 복구에 사용되는 툴이다. Export는 데이터베이스에 저장되어 있는 데이터들을 OS binary 파일로 전환하는 툴이고 Import는 binary 파일을 데이터베이스 안의 데이터로 전환하는 툴이다. 그러므로 Export는 백업 작업에 사용하고, Import는 복구시에 사용된다.

(ii) SQL * Loader
오라클 SQL * Loader는 기존의 응용 프로그램 데이터나 다른 데이터베이스로 저장된 데이터를 오라클 데이터베이스의 데이터로 변환하는 매우 유용한 툴이다. 다양한 형식의 입력값을 받아들이고, 필터링을 수행할수 있으며, 같은 load session동안 다수의 오라클 데이터베이스 데이블에서 데이터를 로드할 수 있다.

 

Posted by Taoist
,