LOB 컬럼 초기화 문의드립니다. 0 5 6,438

by 동동동 [Oracle 기초] Oracle DB최적화 [2022.06.09 15:05:13]


안녕하세요..특정 테이블의 특정 컬럼이 BLOB로 되어 있는데요..

사이즈를 줄이고자 해당 컬럼을 Null로 업데이트 했는데, 쿼리로 사이즈 체크를 해보면 변함이 없네요?

UPDATE 테이블
   SET LOB컬럼 = null;

다음과 같이 업데이트 후
SELECT MAX(OWNER) OWNER
      , SEGMENT_NAME TABLE_NAME
      , MAX(BYTES)/1024/1024||' MB' TABLE_SIZE
      , SUM(NVL(LBYTES,0))/1024/1024||' MB' LOB_SIZE
      , (MAX(BYTES)+SUM(NVL(LBYTES,0)))/1024/1024||' MB' TOTAL_SIZE 
FROM (
    SELECT A.OWNER,A.SEGMENT_NAME,A.BYTES,C.BYTES LBYTES
     FROM DBA_SEGMENTS A, DBA_LOBS B, DBA_SEGMENTS C
    WHERE A.OWNER = 계정
      AND A.SEGMENT_TYPE = 'TABLE'
      AND A.SEGMENT_NAME = 해당테이블
      AND A.SEGMENT_NAME = B.TABLE_NAME(+)
      AND B.SEGMENT_NAME = C.SEGMENT_NAME(+)
    ) 
GROUP BY SEGMENT_NAME;

다음과 같은 쿼리로 사이즈 측정을 해봤는데, 변화된게 없네요?

LOB 칼럼은 초기화 하려면 null이 아닌 EMPTY_BLOB 이나 EMPTY_CLOB 로 업데이트 해야 하나요?

 

추가로 테이블 스페이스의 데이터 파일 사용을 보니 여기저기 조금씩 사용되고 있는데,

윈도우의 디스크 조각모음과 같이 오라클 DB를 최적화 하는 스크립트가 있는지요?

 

by 마농 [2022.06.09 15:52:41]
ALTER TABLE table_name SHRINK SPACE CASCADE;

 


by 동동동 [2022.06.10 11:08:53]

답글 감사드립니다..

LOB칼럼은 저렇게 null로만 업데이트 해도 되는 건가요?


by 우리집아찌 [2022.06.10 09:29:25]

참고하세요.

http://wiki.gurubee.net/pages/viewpage.action?pageId=26741144

 


by 동동동 [2022.06.10 11:08:19]

답글 감사드립니다...^^


by 닭뇌 [2023.06.27 11:22:30]

chartGPT에 문의 하니 다음과 같은 답변을 주네요...

 

LOB_COLUMN = EMPTY_BLOB()과 LOB_COLUMN = NULL의 차이점은 다음과 같습니다:

1. LOB_COLUMN = EMPTY_BLOB():
   - EMPTY_BLOB()은 LOB 칼럼에 빈(BLOB) 또는 빈 문자열(CLOB)을 설정하는 함수입니다.
   - LOB_COLUMN = EMPTY_BLOB() 구문을 사용하면 LOB 칼럼에 빈 값이 저장됩니다.
   - 이 경우, LOB 세그먼트는 여전히 존재하지만, LOB 데이터는 실제로 저장되지 않고 공간만 차지하게 됩니다.

2. LOB_COLUMN = NULL:
   - LOB_COLUMN = NULL 구문을 사용하면 LOB 칼럼에 NULL 값을 설정합니다.
   - 이 경우, LOB 데이터가 삭제되고 LOB 세그먼트도 해제됩니다.
   - 따라서, 테이블 크기는 LOB 칼럼을 포함하여 줄어들게 됩니다.

BLOB와 CLOB의 경우, LOB 데이터를 완전히 삭제하기 위해서는 LOB_COLUMN = NULL을 사용하여 LOB 칼럼에 NULL 값을 설정해야 합니다.
이렇게 하면 LOB 데이터가 삭제되고 LOB 세그먼트도 해제되므로 테이블 크기가 줄어들게 됩니다.

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입