如何获取oracle按表大小排行前50名列表信息?

进入sqlplus ,并运行下面脚本,就可以得到
set lines 200
set pages 1000
column OWNER format a25
column TABLE_NAME format a25
set serveroutput on
DECLARE
--v_tableowner varchar(50) := 'LUO';
t_OWNER varchar(50);
t_TABLE_NAME varchar(50);
t_BYTES number(30);
v_LAST_ANALYZED date;
v_NUM_ROWS number(30);
v_date char(10);
v_text varchar2(300);
v_text2 varchar2(3000);
CURSOR c1 IS
select owner, TABLE_NAME, LAST_ANALYZED, NUM_ROWS
from (select OWNER, TABLE_NAME, LAST_ANALYZED, NUM_ROWS, blocks * 8192 / 1024 / 1024
from dba_tables
where (LAST_ANALYZED is not null
and num_rows > 10000
) or TABLE_NAME='T_BAS_ATTACHMENT'
order by 5 desc) inner1
where rownum < 51;
BEGIN
select to_char(sysdate, 'yyyy_mm_dd') into v_date from dual;
v_text := 'create table TABLEINFO_DB_' || v_date || '(OWNER varchar2(40),TABLE_NAME varchar2(60),LAST_ANALYZED DATE,NUM_ROWS number(20),tablesize_MBytes number(20))';
execute immediate v_text;
OPEN c1;
LOOP
FETCH c1
INTO t_OWNER, t_TABLE_NAME, v_LAST_ANALYZED, v_NUM_ROWS;
EXIT WHEN c1%NOTFOUND;
select tabinfo.OWNER,
tabinfo.TABLE_NAME,
sum(tabinfo.BYTES) / 1024 / 1024
into t_OWNER, t_TABLE_NAME, t_BYTES
from (SELECT A.OWNER,
A.TABLE_NAME,
A.ALLSEGMENT,
B.SEGMENT_TYPE,
B.BYTES
FROM (SELECT OWNER,
OWNER || '.' || TABLE_NAME AS TABLE_NAME,
TABLE_NAME allsegment
FROM DBA_TABLES
WHERE OWNER = t_OWNER
AND TABLE_NAME = t_TABLE_NAME
UNION
SELECT OWNER,
OWNER || '.' || TABLE_NAME AS TABLE_NAME,
如何获取oracle按表大小排行前50名列表信息?
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



