Oracle 데이터베이스는 **CLOB(Character Large Object)**과 BLOB(Binary Large Object) 데이터 타입을 제공하여, 텍스트 또는 이진 데이터를 저장하고 관리할 수 있습니다. 대규모 텍스트 데이터(CLOB)나 이미지, 동영상, 파일 등 바이너리 데이터(BLOB)를 다루는 데 매우 유용합니다. 이번 포스팅에서는 CLOB과 BLOB의 개념, 저장 방법, SQL 및 PL/SQL을 활용한 처리 방법, 그리고 실무 사례를 알아보겠습니다.
1. CLOB과 BLOB의 개념
CLOB:
- 텍스트 데이터를 저장하기 위한 데이터 타입.
- 최대 4GB까지 저장 가능하며, XML, JSON, 문서, 로그 등 대규모 텍스트 데이터에 사용됩니다.
BLOB:
- 바이너리 데이터를 저장하기 위한 데이터 타입.
- 이미지, 동영상, 오디오 파일, 압축 파일 등 구조화되지 않은 데이터를 처리합니다.
특성 CLOB BLOB
데이터 타입 | 텍스트 데이터 | 바이너리 데이터 |
용도 | XML, JSON, HTML 등 | 이미지, 동영상, 오디오 등 |
최대 크기 | 4GB | 4GB |
2. CLOB과 BLOB 저장하기
데이터를 저장하기 위해서는 다음과 같은 테이블을 생성합니다.
CLOB 저장용 테이블:
CREATE TABLE text_data (
id NUMBER PRIMARY KEY,
content CLOB
);
BLOB 저장용 테이블:
CREATE TABLE binary_data (
id NUMBER PRIMARY KEY,
file_data BLOB
);
3. SQL로 CLOB과 BLOB 데이터 처리
1) 데이터 삽입
CLOB과 BLOB 데이터는 일반 INSERT 문으로 삽입하거나, 바인드 변수와 함께 삽입합니다.
CLOB 데이터 삽입:
INSERT INTO text_data (id, content)
VALUES (1, 'This is a large text example stored in CLOB.');
BLOB 데이터 삽입 (빈 BLOB 생성 후 업데이트):
DECLARE
empty_blob BLOB;
BEGIN
INSERT INTO binary_data (id, file_data)
VALUES (1, EMPTY_BLOB())
RETURNING file_data INTO empty_blob;
-- 바이너리 데이터를 업데이트
DBMS_LOB.WRITEAPPEND(empty_blob, LENGTH('SampleBinaryData'), UTL_RAW.CAST_TO_RAW('SampleBinaryData'));
END;
/
2) 데이터 조회
CLOB 데이터 조회:
SELECT content
FROM text_data
WHERE id = 1;
BLOB 데이터 조회 (HEX 값으로 변환):
SELECT RAWTOHEX(file_data)
FROM binary_data
WHERE id = 1;
4. PL/SQL을 활용한 CLOB과 BLOB 처리
PL/SQL을 사용하면 대규모 데이터를 효율적으로 삽입, 업데이트, 삭제할 수 있습니다.
1) CLOB 데이터 삽입 및 읽기:
DECLARE
clob_data CLOB;
BEGIN
-- 데이터 삽입
INSERT INTO text_data (id, content)
VALUES (2, 'This is another example of CLOB data.')
RETURNING content INTO clob_data;
-- CLOB 데이터 읽기
DBMS_OUTPUT.PUT_LINE(SUBSTR(clob_data, 1, 50));
END;
/
2) BLOB 데이터 삽입 및 처리:
DECLARE
blob_data BLOB;
raw_data RAW(2000) := UTL_RAW.CAST_TO_RAW('Binary data example');
BEGIN
-- BLOB 데이터 삽입
INSERT INTO binary_data (id, file_data)
VALUES (2, EMPTY_BLOB())
RETURNING file_data INTO blob_data;
-- BLOB 데이터 작성
DBMS_LOB.WRITE(blob_data, LENGTH(raw_data), 1, raw_data);
END;
/
5. 실무 활용 예제
예제 1: 대용량 텍스트 데이터 저장 (CLOB)
대량의 XML 데이터를 저장하고 처리하는 예제입니다.
DECLARE
xml_data CLOB;
BEGIN
-- XML 데이터를 삽입
INSERT INTO text_data (id, content)
VALUES (3, '<root><item>Example</item></root>')
RETURNING content INTO xml_data;
-- XML 데이터를 읽어 출력
DBMS_OUTPUT.PUT_LINE(SUBSTR(xml_data, 1, 100));
END;
/
예제 2: 이미지 데이터 처리 (BLOB)
이미지 데이터를 저장하고 불러오는 예제입니다.
- 이미지 데이터 저장:
- DECLARE image_blob BLOB; BEGIN INSERT INTO binary_data (id, file_data) VALUES (3, EMPTY_BLOB()) RETURNING file_data INTO image_blob; -- 바이너리 데이터 쓰기 DBMS_LOB.WRITEAPPEND(image_blob, LENGTH('image_binary_data'), UTL_RAW.CAST_TO_RAW('image_binary_data')); END; /
- 이미지 데이터 추출:
- DECLARE image_data RAW(2000); BEGIN SELECT file_data INTO image_data FROM binary_data WHERE id = 3; -- 바이너리 데이터를 HEX로 출력 DBMS_OUTPUT.PUT_LINE(UTL_RAW.CAST_TO_VARCHAR2(image_data)); END; /
예제 3: CLOB과 BLOB 비교
CLOB 데이터를 JSON 형식으로 저장하고, BLOB 데이터를 ZIP 파일 형식으로 저장한 뒤 처리합니다.
6. 주의사항 및 성능 팁
- 대량 데이터 처리 시 성능 최적화
- 데이터가 큰 경우 CHUNK 크기를 지정하여 데이터를 나누어 처리하면 성능이 향상됩니다.
- DBMS_LOB.SUBSTR 또는 DBMS_LOB.WRITE 같은 함수로 부분 데이터를 처리합니다.
- LOB 저장소 관리
- LOB 데이터는 별도의 테이블스페이스에 저장할 수 있습니다.
- 예:
CREATE TABLE large_text_data ( id NUMBER, content CLOB ) LOB (content) STORE AS SECUREFILE (TABLESPACE lob_tablespace);
- 보안 관리
- BLOB 데이터는 암호화된 데이터를 저장할 때 사용되므로, DBMS_CRYPTO 패키지를 활용하여 암호화합니다.
- LOB 관련 오류 처리
- ORA-22922 오류를 방지하려면 LOB 데이터 삽입 시 올바른 초기화를 해야 합니다.
7. 결론
CLOB과 BLOB 데이터 타입은 대용량 텍스트 및 이진 데이터를 효율적으로 관리할 수 있는 강력한 도구입니다. 적절한 저장 전략과 SQL/PLSQL의 활용법을 익히면 복잡한 데이터를 효과적으로 처리할 수 있습니다. 실무에서 다양한 활용 사례를 적용하며 데이터베이스의 기능을 극대화해 보세요!
'Database' 카테고리의 다른 글
EXTERNAL TABLE을 이용한 외부 데이터 처리 (0) | 2024.12.04 |
---|---|
오라클 JSON 데이터 처리: JSON_TABLE과 JSON_VALUE (0) | 2024.12.04 |
오라클 테이블스페이스(Tablespace)란 무엇인가? (0) | 2024.12.04 |
오라클 데이터 파일과 로그 파일의 이해 (0) | 2024.12.04 |
오라클 UNDO 테이블스페이스의 역할과 관리 (0) | 2024.12.04 |