LOB 컬럼 초기화 문의드립니다. 1 140

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 세그먼트도 해제되므로 테이블 크기가 줄어들게 됩니다.