출처 : 리눅스/유닉스/OCP/MCDBA/SCSA/CCNP/JAVA/JSP/EJB/UNIX/C++(네이버 카페) 오라클 데이터베이스는 유니트(Unit)로 취급되는 데이터의 집합이다. 데이터베이스의 목적은 관계가 있는 정보의 저장 및 추출이다. 데이터베이스에는 논리적인 구조(Logical Structures)와 물리적인 구조(Physical Structures)가 있다. 물리적인 구조와 논리적인 구조가 분리되어 있기 때문에 물리적인 데이터의 저장이 논리적인 저장 구조의 액세스 없이도 이루어질 수 있다. | |
| |
1. 논리적 데이터베이스 구조(Logical Database Structures) | |
|
오라클 데이터베이스의 논리적 구조에는 테이블스페이스, 스키마 오브젝트, 데이터블록, 익스텐트, 세그먼트가 있다. (1) 테이블스페이스(Tablespaces) 데이터베이스는 테이블스페이스라고 하는 논리적 저장 단위로 나뉘어진다. 테이블스페이스는 하나 또는 여러개의 데이터 파일로 구성되는 논리적인 데이터 저장 구조이다. 즉, 오라클 데이터베이스에 저장되는 데이터들은 테이블스페이스라고 하는 논리적 스토리지에 저장되며 이러한 테이블스페이스는 물리적으로 하드디스크의 데이터 파일로서 저장된다. (i) 데이터베이스, 테이블스페이스, 데이터파일
테이블스페이스는 온라인 또는 오프라인 상태가 된다. 테이블스페이스는 일반적으로 사용자가 테이블스페이스 내의 정보를 액세스 할 수 있도록 온라인상태이다. 그러나 때때로 데이터베이스의 다른 사람들에게 일반적인 액세스를 허락하는 동안 데이터베이스의 일부분은 오프라인 상태가 되기도 한다. 이것은 많은 관리자들이 작업을 더욱 쉽게 수행하게 해준다. (2) 스키마(Schemas)와 스카마 오브젝트 스키마는 데이터베이스 오브젝트의 집합이다. 스카마 오브젝트는 데이터베이스의 데이터에 관하여 직접 설명해 주는 논리적 구조이다. 스키마 오브젝트는 테이블, 뷰, 시퀀스, 저장 프로시저, 시노님, 인덱스, 클러스터와 같은 구조를 포함한다. 스키마라는 말을 처음 듣는다면 그 용어의 생소함으로 왠지 어렵게 느껴질지 모르지만 데이터베이스 안에 존재하는 여러 가지 테이블과 인덱스와 같은 논리적 구조를 통틀어서 부르는 용어라고 간단히 정의할 수 있다. <참조> 테이블스페이스와 스키마 사이에는 관계가 없다. 같은 스키마에 있는 객체가 다른 테이블스페이스에 있을 수 있고 한 테이블스페이스가 다른 스키마의 오브젝트를 가질 수도 있다. (3) 데이터블록, 익스텐트, 세그먼트 (i) 데이터블록(Data Blocks) 데이터 블록은 오라클 블록 또는 페이지라고 불리는 오라클 내의 가장 작은 저장 단위로 데이터베이스 데이터는 여기에 저장된다. 데이터 블록은 실제 물리적 하드디스크상의 저장 공간으로 데이터베이스가 생성될 때 오라클 파라미터 파일에서 그 크기를 지정한다. (ii) 익스텐트(Extents) 논리적인 데이터베이스 영역의 다음 단계를 익스텐트라고 한다. 익스텐트는 데이터 블록의 모임으로 이루어지며 특별한 형태의 정보를 저장하기 위해 사용된다. 데이터 파일에 하나의 의미를 가진 정보인 오라클 객체를 저장하기 위해서는 일련의 연속적인 데이터 블록들을 필요로 하는데 이것을 오라클에서는 익스텐트라 부른다. 이러한 익스텐트는 데이터가 데이터 파일에 추가될 때마다 할당된다. (iii) 세그먼트(Segments) 익스텐트 상위의 논리적인 데이터베이스 레벨을 세그먼트라고 한다. 세그먼트는 특정 논리적 구조를 위해 할당된 익스텐트의 집합이다. 세그먼트는 4가지 타입이 존재하는데 다음과 같다.
|
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동안 다수의 오라클 데이터베이스 데이블에서 데이터를 로드할 수 있다. |