LOB (Large Object)
대용량 데이터를 저장하고 관리하기 위해 오라클에서 제공하는 기본 데이터타입이다.
오라클의 기본 데이터는 varchar, number, datetime 등 구조적인 데이터타입인데
Oracle 8i부터 비구조적인 데이터 타입인 사진, 음악, 동영상 등의 처리도 필요하게 되어 생겨난 형태가 LOB이다.
사실 LOB이전에도 LONG이라는 대용량 TYPE이 있었으나 한 테이블에 하나의 컬럼만 사용할 수 있고
검색구현도 어려웠으며 최대크기도 2GB로 제한적이였다. 이러한 이유로 현재는 LOB타입을 많이 사용한다.
LOB 종류
Internal
- CLOB (Character Large Object) : 문자데이터를 저장하기 위한 LOB유형이다.
CLOB은 가변 길이 문자열 데이터를 저장하며, 최대크기는 4GB이다.
일반적으로 텍스트문서, HTML페이지, XML문서 등과 같은 문자 데이터를 저장하는데 사용한다. - BLOB (Binary Large Object) : 이진데이터를 저장하기 위한 LOB유형이다.
BLOB은 가변 길이 이진데이터를 저장할 수 있으며, 최대 크기는 4GB이다.
이미지, 사운드, 동영상 등과 같은 이진 데이터를 저장하는데 사용된다. - NCLOB (National Character Large Object) : 다국어 문자 데이터를 저장하기 위한 LOB유형이다.
CLOB과 유사하지만, 다국어 문자집합 (Unicode)을 지원한다. 따라서 멀티바이트 문자를 저장하는데 사용
External
- BFILE : OS파일에 저장된 데이터의 포인터 저장, 최대크기는 4GB이고 READ ONLY이다.
Internal LOB
LOB데이터가 테이블의 ROW내에 직접 저장되는 형태이다. 데이터베이스에서 Internal LOB은 테이블의 열로 정의되며
작은 크기의 LOB데이터에 적합하다.
다음과 같은 특징을 가진다.
- 로우 내에 직접 저장되므로 액세스 속도가 빠르다.
- 작은 크기의 LOB데이터에 적합하다.
- LOB데이터와 테이블의 다른 열은 함께 로우 내에서 관리된다.
- 데이터베이스 블록내에 LOB데이터가 저장되므로 블록 할당 및 관리에 관련된 내부 메커니즘이 사용된다.
External LOB
LOB데이터가 외부에 저장되는 형태이다. 대용량 LOB데이터를 젖아하거나 성능을 최적화해야하는 경우에 주로 사용되며
다음과 같은 특징을 가진다.
- 로우네는 LOB데이터의 포인터만 저장되며, 실제 데이터는 외부에 저장된다.
- 외부 LOB데이터는 세그먼트로 구성된 공간에서 관리된다.
- LOB데이터의 크기가 크거나, 액세스 빈도가 낮은 경우에 유용하다.
- LOB데이터에 대한 액세스는 포인터를 사용하며 외부에서 수행된다.
- LOB데이터에 대한 액세스 속도는 Internal LOB보다 느릴 수 있지만, 대용량 데이터를 효율적으로 관리할 수 있다.
저장한 LOB을 어떻게 사용해야 할까?
CLOB은 문자열의 저장이라 일반적인 SELECT 문으로 조회가 가능하다.
BLOB처럼 비구조화된 파일을 저장하는 경우에는 일반적인 SELECT 문으로 조회가 불가능 하다.
따라서 데이터를 저장, 조회할 때 별도의 프로그래밍 기법을 이용해야 하는데 Toad에서는 LOB데이터를 쉽게 저장하고 조회할 수 있다고 한다. (역시 Toad,,,)