-- 테이블별 사용공간 저장 테이블 생성
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
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.