比如统计SYSDBA模式下的所有表记录数,如果统计其他模式的数据,可以将SYSDBA模式修改为其他模式。
方法一:
create OR REPLACE FUNCTION GETTOTALROWSFORSYSDBA()
return BIGINT
AS
DECLARE
v_total BIGINT := 0;
v_sql VARCHAR(2000);
v_count BIGINT;
BEGIN
FOR tab IN (SELECT TABLE_NAME FROM dba_TABLES WHERE OWNER = 'SYSDBA') LOOP
v_sql := 'SELECT COUNT(*) FROM SYSDBA.' || tab.TABLE_NAME;
EXECUTE IMMEDIATE v_sql INTO v_count;
v_total := v_total + v_count;
END LOOP;
RETURN v_total;
END;
/
select GETTOTALROWSFORSYSDBA()
方法二:
可以使用统计信息的方式,但是生产库上如果对于数据库使用不熟悉,不推荐随意使用统计信息。
静态统计信息–资源消耗
表统计信息:仅需访问聚集索引控制页,不影响数据页,性能影响较小。
列/索引统计信息:需构造查询访问实际数据页,可能引发性能热点,尤其是在排序(ORDER BY
)、分组(GROUP BY
)或数据汇总阶段。
基于统计信息查询(推荐)
- 确保统计信息已收集
执行以下命令收集SYSDBA模式下所有表的统计信息:
DBMS_STATS.GATHER_SCHEMA_STATS('SYSDBA',50,TRUE,'FOR ALL COLUMNS SIZE AUTO');
执行如下语句查询SYSDBA模式下所有表的记录数
SELECT SUM(NUM_ROWS) AS TOTALROWS
FROM DBA_TABLES
WHERE OWNER = 'SYSDBA';