오라클 10g 에서 제공하는 EM에서 테이블 > 세그먼트를 보면
테이블이 얼마의 공간을 할당 받았고 실제로 데이터를 얼마를 쓰고 있는지를 알 수가 있다.
허나...... 스키마에 테이블이 한두개냐 -ㅅ-.. 하나씩 하나씩 언제 그걸 다 보라고 ㅗㅡㅡㅗ
고로 SQL*PLUS에서 쿼리로 테이블 데이터 사이즈를 확인해 보기로 했다.
일단 어떤 프로시져를 사용 할 지 보자.
dbms_space.object_space_usage 란 놈을 사용 할 거다.
procedure object_space_usage ( object_owner in varchar2 , object_name in varchar2 , object_type in varchar2 , sample_control in number , space_used out number , space_allocated out number , partition_name in varchar2 default, preserve_result in boolean default, timeout_seconds in number default );
요렇게 생겨 먹은 녀석이다.
일단 analyze를 먼저 해 주는게 정확도에 영향을 주지 않을까 싶다 -_-;;
EM에서 잘 찾아 보면 통계 수집이란 항목이 있다. 원하는 스키마의 모든 테이블을
선택해서 분석해주자.
자 그럼.. For 루프를 사용해서 해당 스키마의 모든 테이블 견적을 뽑아 보자!!
--------------------------------------------------------------------------------
set serveroutput on
declare
su number;
sa number;
cp number;
owner_name varchar2(10) := 'SCOTT';
type tb_type is table of user_tables.table_name%TYPE
index by binary_integer;
tb_name tb_type;
i binary_interger := 0;
begin
for k in (select table_name from dba_tables where owner=owner_name) loop
i := i + 1;
tb_name(i) := k.table_name;
end loop
dbms_output.put_line('_ TABLE_NAME ___ USED SPACE(KB)
_____ALLOCATE SPACE(KB) ______ ' );
for j in 1..i loop
dbms_space.object_space_usage(owner_name,tb_name(j),'TABLE',NULL,su,sa,cp);
dbms_output.put_line(RPAD(tb_name(j),15) || ' ' ||
RPAD(ROUND(su/1024),2),17) || ' ' || sa/1024);
end loop
end;
/
set serveroutput off
--------------------------------------------------------------------------------
쿠우........ 타자 치는데 손 아퍼 죽는 줄 알았다. ㅠ_ㅠ... 컴터가 밥상위에 있다. ㅋ
암튼.. 오타가 있을 수 있으니 주의를 하자 ㅡㅡ;;
owner_name에 분석을 하고자 하는 녀석의 이름을 적으면 된다.
그 녀석이 소유권을 가지고 있는 모든 테이블을 분석 할 것이다.
그다지 설명이.. 필요 한가 ㅡㅡ??
암튼.. 손목 아퍼서 여기까지 ㅡㅠㅡ//
에혀.. 네이버꺼 옮겨 오기 귀찮다 ㅡㅡ;; 아직도 덜 가져 왔군 그랴 ~
댓글