안녕하세요..특정 테이블의 특정 컬럼이 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를 최적화 하는 스크립트가 있는지요?
ALTER TABLE table_name SHRINK SPACE CASCADE;
답글 감사드립니다..
LOB칼럼은 저렇게 null로만 업데이트 해도 되는 건가요?
참고하세요.
http://wiki.gurubee.net/pages/viewpage.action?pageId=26741144
답글 감사드립니다...^^
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 세그먼트도 해제되므로 테이블 크기가 줄어들게 됩니다.