오라클의 통계정보를 활용하면, 데이터의 건수 및 디스크 사이즈를 쉽게 확인할 수있다.

아래의 쿼리를 실행하면, 쉽게 전체 테이블별 건수 및 용량을 쉽게 체크할 수 있다.
(참고로 Block의 사이즈는 8k, 16k 등 테이블 생성시 별도로 정할 수 있어서 확인 필요)

실제 추출되는 정보는 통계정보를 수행한 (Analyze)한 결과이므로, 실제 select count(*) 결과와는 다르다.
통계정보는 analyze한 시점의 정보이기 때문이다. 하지만 전체량을 확인코자 할 때, 약간의 오차 보다는 큰 틀에서 정보를 확인하는 것이 효율적이다.

특히, 주기적으로 삭제하는 테이블의 block을 보면 특이점이 있다.
분명히 많은 정보를 지웠음에도 불구하고, block이 많다. 그리고 full scan을 할 경우 너무 느리다.
그것을 delete의 한계 때문이다. delete를 할지라도 실제 최대로 할당 되었던 block을 반환하고 재구성하지 않기 때문에 차지하는 공간은 여전히 넓다. 필요하다면 테이블 재구성(rebuild 또는 shrink)를 해야 하겠지만, 온라인 상태인 경우 테이블의 lock되는 등 서비스가 일시 정지될 우려가 있으니 충분히 고려하길 바란다.

추가로, 통계정보를 갱신하기 위해 analyze할 경우 반드시 서버에 접속하여 topas로 서버의 상태를 모니터링하고 수행하기 바란다.

-------------------------------------------------------------------------------------------

테이블명 규칙이 테이블의 명령 규칙이 : T + 업무명(2자리) + 유니크한 이름
EX) TOK_DFSFSDFWER, TQA_DSFSKFSF 등

SELECT TA.*, TB.NUM_ROWS 레코드수
FROM
(
SELECT SUBSTR(SEGMENT_NAME, 2,2) AS UPMU, SEGMENT_NAME, C.COMMENTS, ROUND(SUM(A.BYTES)/8/1024) BLOCK수
FROM DBA_SEGMENTS A, DBA_TABLES B, ALL_TAB_COMMENTS C
WHERE A.SEGMENT_NAME = B.TABLE_NAME
AND A.SEGMENT_TYPE IN ('TABLE','TABLE PARTITION')
AND A.OWNER = '홍길동'
AND A.SEGMENT_NAME LIKE 'T%' -- 테이블의 명령 규칙이 T + 업무명(2자리) + 유니크한 이름 인 경우...
AND A.SEGMENT_NAME = C.TABLE_NAME
AND C.TABLE_TYPE IN ('TABLE','TABLE PARTITION')
GROUP BY SUBSTR(SEGMENT_NAME, 2,2), SEGMENT_NAME, C.COMMENTS
) TA,
DBA_TABLES TB
WHERE
TA.SEGMENT_NAME = TB.TABLE_NAME
ORDER BY 1,2
Posted by 목표를 가지고 달린다
,