您的位置:首页 > 数据库 > Oracle

一个统计Oracle中所有应用表记录数的例子

2008-08-07 17:41 555 查看
通常开发人员很少关注表数据量的大小的Impact,但是设计者和DBA就需要实时监测数据的大小对系统的Impact,说到底就是对Oracle DB Instance的负荷量的估算。举个例子,我们在设计的时候需要估算出一定的数据量需要多大的Tablespace,包括Data的Tablespace,Index的Tablespace,Archive Log的Tablespace(这个需要一个有经验的DBA根据实际用户的使用Transaction数据来进行估算),而DBA则需要这些数据来对后续的测试及上线进行监测,有可能需要么动态调整DB Size以满足Performance的要求。那么统计表数据的Utilities就起作用了(有点扯远了,反正就是一个能统计应用级所有表记录数啦)。

create or replace procedure count_table_stat
as
record_number INTEGER;
schema_name varchar2(20);
table_name varchar2(20);
BEGIN
FOR target_table IN (SELECT owner,table_name FROM all_tables where owner not in ('SYS','SYSTEM','CTXSYS','PERFSTAT','WMSYS','EXFSYS','SYSMAN')) LOOP
schema_name := target_table.owner;
table_name := target_table.table_name;
EXECUTE IMMEDIATE 'select count(*) from ' || target_table.owner||'.'||'"'||target_table.table_name||'"' || '' into record_number;
dbms_output.put_line('record number is ' || record_number);
END LOOP;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line(SQLERRM);
RAISE;
commit;
end;

从而可以根据现有的data数量和db size的使用情况做出估算,当数量达到某个极限值的时候,db size多大才能够cater这种情况,这个是Designer和DBA所需要时刻关注的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息