[이슈체크] oracle sql - clob이란?

HOU·2023년 11월 9일

backend

목록 보기
2/10

이슈

전에 다니던 회사에서 sql 호출이 6초 이상걸려 사용자들의 불편함이 계속 해서 발생하는 문제가 있었다.
파일 전송을 하기 위해 파일 전송을 원하는 직원들을 선택하는 부분이었는데, 사용자 리스트 출력이 너무 오래걸리는 문제가 있었다.

왜 이슈가 발생했을까?

데이터를 확인해보니, clob이라는 데이터 타입의 컬럼이 있었는데 이 컬럼의 용량이 굉장히 크다는 것을 확인 할 수 있었다. 그리고 메일 리스트를 호출하는데, clob이라는 컬럼은 사용되지 않는 다는 것도 확인 할 수 있었다.

해결

해당 컬럼을 호출 할 때 배제하였다. 그러니 속도가 월등히 빨라졌다.

clob이라는 데이터 타입은 무엇일까?

clob이란 lob데이터 타입에 대해서 알아야 한다는 걸 알 수 있었다.
그러면 lob데이터 타입은 무엇일까?

  • LOB은 TEXT, 그래픽, 이미지, 비디오, 사운드 등 구조화되지 않은 대형 데이터를 저장하는데 사용한다.
  • 일반적으로 테이블에 저장되는 구조화된 데이터들은 크기가 작지만, 멀티미디어 데이터는 크기가 크다.
  • 크기가 큰 데이터는 DB에 저장하기 힘들기 때문에 OS상 존재하는 파일을 데이터베이스가 접근하게 된다.
  • LONG, LONG RAW 데이터 유형은 예전에 사용던 것이고, 현재는 대부분 LOB 데이터 유형을 사용한다.
  • TO_LOB 함수를 이용하여 LONG 및 LONG RAW 를 LOB 으로 변경할 수 있다.
타입설명예시
CLOB문자형 대용량 객체 고정길이와 가변길이 문자집합 지원html, txt
NCLOB유니코드를 지원하는 문자형 대용량 객체대용량 텍스트 파일
BLOB이진형 대용량 객체이미지, 동영상
BFILEOS에 저장되는 이진 파일의 이름과 위치를 저장. 읽기 전용 모드로만 액세스 가능.

여기서 CLOB과 NCLOB 의 차이가 궁금해졌다. 오라클 공식 문서에서 찾은건데 나도 참 모르는 단어가 많다.

CLOB은 데이터베이스의 Character Set으로 데이터를 저장하는 반면, NCLOB은 National Character Set으로
데이터를 저장하는데, 9i 이상 버전에서는 UNICODE를 사용하여야만 합니다.
CLOB과 NCLOB는 charsetform에 의해 차이가 발생합니다.

character setnation character set 간단하게 말해서 사용하고자 하는 다른 언어들이 있다면 베트남어나 중국어를 그냥 저장하면 글자가 깨지는 문제가 발생할 수 있기 때문에, 그런 경우를 방지하고자 사용한다! 라고 이해했다.

배운것은 무엇인가?

회사에서 clob에 저장되는 것은 html 파일이였다. 메일 전송을 위해서 미리 준비한 템플릿과 그 안의 내용들을 포함하고 있었다. 예전부터 이미지와 동영상 같은 바이너리 파일들의 저장방식에 대해서 궁금했는데 clob과 blob을 통해서 알 수 있어서 유익했고, 대용량 데이터를 가지고 오는 경우에 반드시 where 조건을 넣어서 사용해야된다는 것을 알 수 있었다.

참고

clob이란?
[ORACLE] JAVA에서 LOB, BLOB, CLOB 데이터 관리
캐릭터셋이란?

profile
하루 한 걸음 성장하는 개발자

0개의 댓글