Oracle Database TIP
Used space in tables 4 0 99,999+

by 구루비 DBA_SEGMENTS 테이블사용공간 [2003.04.12]


 
-- 테이블별 사용공간 저장 테이블 생성
SQL> CREATE TABLE tmp_used_space
     (table_name             varchar2(30),
      allocated_space        number,
      used_space             number)
      /

-- 테이블별 사용공간 계산
SQL> DECLARE
        w_blocksize     number;
        w_alloc         number;
        w_used          number;
        LClongstring    varchar2(2000);
        cid             integer;
        rows_processed  number;
    
        CURSOR c_tables IS 
        SELECT segment_name,bytes 
        FROM dba_segments where owner = '&&OWNER' 
        AND segment_type = 'TABLE';
        
    BEGIN
    
        SELECT value INTO w_blocksize 
        FROM v$parameter 
        WHERE name = 'db_block_size';

        FOR r_tables IN c_tables
        LOOP
	        LClongstring := 'SELECT COUNT(DISTINCT(dbms_rowid.rowid_block_number(rowid))) FROM '||r_tables.segment_name;
	        cid := DBMS_SQL.OPEN_CURSOR;
	        DBMS_SQL.PARSE(cid,LClongstring,dbms_sql.v7); 
	        DBMS_SQL.DEFINE_COLUMN(cid,1,w_used);
	        rows_processed := DBMS_SQL.EXECUTE_AND_FETCH(cid);
	        DBMS_SQL.COLUMN_VALUE(cid,1,w_used);
	        INSERT INTO tmp_used_space
	        VALUES (r_tables.segment_name, r_tables.bytes, w_used*w_blocksize);
	        DBMS_SQL.CLOSE_CURSOR(cid);
        END LOOP;
        COMMIT;
    END;
    /

--  테이블별 사용공간 조회
SQL> SET PAGESIZE 60
SQL> SELECT table_name,allocated_space/1024 "ALLOCATED (K)", used_space/1024 "USED (K)" 
     FROM tmp_used_space
     ORDER BY table_name;

-- 임시테이블 삭제
SQL> DROP TABLE tmp_used_space;
    

- 강좌 URL : http://www.gurubee.net/lecture/1765

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

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