获取Oracle用户下所有的表和每张表的数据量
通过编写代码块,获取Oracle中每张表的数据量
·
Oracle查询当前用户下的表和所有表的数据量
因为数据迁移,数据量较多,且还在使用中,所以想分批把表给迁移过去,统计下没张表是干什么的,以及表中的数据量,表是直接可以通过下面的SQL进行统计的:
select table_name from user_tables;
这样就获取到了当前用户下所有的数据表了,但是一个问题,就是还要获取到每张表中的数据量;当然,有些朋友也会说通过下面这个SQL来获取到数据量啊;
select num_rows from user_tables;
细心的朋友,可以通过下面的SQL和上面的SQL查询出的数据量对比下,你会发现,差了好多哦~
select count(*) from us_tables;
主要原因是:num_rows字段的值是在最后一次收集统计信息之后更新的,如果是频繁变化(批量变化)的表,这个字段的值极为不准确,如果数据量变化不频繁,这个字段的值也只是个大概数。
也就是说num_rows
只是一个粗略的计算,所以他的计算速度比较快,而count(*)
计算的比较仔细,速度也会有所下降;
当然,想要用num_rows
也不是不可以的,但是这个方法比较适合表少的,用下面这个SQL来对表进行一个详细的统计
analyze table us_tables compute statistics;
但是,我的数据表比较多,计算下,大概有五百多张表,不能一个一个统计统计吧,想着一步到位,就用plsql写了一个代码块,来进行循环统计,如下:
declare
v_num varchar2(200);
v_sql varchar2(500);
begin
for tab in (select table_name as tableName from user_tables)
loop
v_sql := 'select count(*) from ' || tab.tableName;
execute immediate v_sql into v_num;
dbms_output.put_line(tab.tableName || ',' || v_num);
end loop;
end;
这样就能统计出每张表中的数据量了,有需要的,可以将输出的信息复制到文本文档里面,表名和数据量是通过,
来分割的,可以直接将文本文档信息导入到Excel中;
以上只是我个人的想法,各位朋友有什么更好的方法,欢迎在下面留言交流~
更多推荐
已为社区贡献1条内容
所有评论(0)