본문 바로가기
Database

오라클 CLOB과 BLOB 데이터 처리 방법

by 굿센스굿 2024. 12. 4.
반응형


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)
이미지 데이터를 저장하고 불러오는 예제입니다.

  1. 이미지 데이터 저장:
  2. 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; /
  3. 이미지 데이터 추출:
  4. 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. 주의사항 및 성능 팁

  1. 대량 데이터 처리 시 성능 최적화
    • 데이터가 큰 경우 CHUNK 크기를 지정하여 데이터를 나누어 처리하면 성능이 향상됩니다.
    • DBMS_LOB.SUBSTR 또는 DBMS_LOB.WRITE 같은 함수로 부분 데이터를 처리합니다.
  2. LOB 저장소 관리
    • LOB 데이터는 별도의 테이블스페이스에 저장할 수 있습니다.
    • 예:
      CREATE TABLE large_text_data (
          id NUMBER,
          content CLOB
      )
      LOB (content) STORE AS SECUREFILE (TABLESPACE lob_tablespace);
      
  3. 보안 관리
    • BLOB 데이터는 암호화된 데이터를 저장할 때 사용되므로, DBMS_CRYPTO 패키지를 활용하여 암호화합니다.
  4. LOB 관련 오류 처리
    • ORA-22922 오류를 방지하려면 LOB 데이터 삽입 시 올바른 초기화를 해야 합니다.

7. 결론

CLOB과 BLOB 데이터 타입은 대용량 텍스트 및 이진 데이터를 효율적으로 관리할 수 있는 강력한 도구입니다. 적절한 저장 전략과 SQL/PLSQL의 활용법을 익히면 복잡한 데이터를 효과적으로 처리할 수 있습니다. 실무에서 다양한 활용 사례를 적용하며 데이터베이스의 기능을 극대화해 보세요!

반응형