GATHER_SCHEMA_STATS

收集Schema中所有对象的统计信息。

声明

DBMS_STATS.GATHER_SCHEMA_STATS (
            ownname                          VARCHAR2,
            estimate_percent                 NUMBER   DEFAULT 100,
            block_sample                     BOOLEAN  DEFAULT FALSE,
            method_opt                       VARCHAR2 DEFAULT 'FOR ALL COULMNS',
            degree                           NUMBER   DEFAULT 1,
            granularity                      VARCHAR2 DEFAULT 'ALL',
            cascade                         BOOLEAN  DEFAULT FALSE,
            stattab                          VARCHAR2 DEFAULT NULL,
            statid                           VARCHAR2 DEFAULT NULL,
            options                         VARCHAR2 DEFAULT 'GATHER',
            objlist                          ObjectTab DEFAULT NULL,
            statown                          VARCHAR2 DEFAULT NULL,
            no_invalidate                    BOOLEAN  DEFAULT FALSE,
            force                           BOOLEAN DEFAULT FALSE,
            obj_filter_list                  ObjectTab DEFAULT NULL)

结构

参数 说明
ownname Schema的用户名。
estimate_percent 参与统计的列的采样率。
block_sample 是否进行块采样,默认列行采样(暂未启用)。
method_opt 可选函数操作(暂未启用)。
degree 并行度(暂未启用)。
granularity 采样的粒度(暂未启用)。
cascade 是否统计所有索引信息(暂未启用)。
stattab 统计表名称(暂未启用)。
statid 在stattab中统计记录id(暂未启用)。
options 指定要被统计的对象类型(暂未启用)。
objlist 存放过期的对象列表(暂未启用)。
statown 统计表所在schema(如果与ownname不同,暂未启用)。
no_invalidate 是否生效相关游标(暂未启用)。
force 是否统计加锁对象(暂未启用)。
obj_filter_list 对象过滤器列表(暂未启用)。

示例

--  清理环境
exec public.dbms_stats.DELETE_SCHEMA_STATS('USER1');
exec public.dbms_stats.DROP_STAT_TABLE('SYSDBA','USER1_STAT_TABLE');
DROP TABLE user1.tab1 CASCADE;
DROP TABLE user1.tab2 CASCADE;
DROP USER user1 CASCADE;

--创建模式下的两个表,分别为user1.tab1和user1.tab2
create user user1 with password '123456Hh';
create table user1.tab1
(
    a int, 
    b text
);
create table user1.tab2
(
    a int, 
    b text
);

create or replace procedure dbms_stats_gather_schema() as
declare
    a DBMS_STATS.ObjectTab;
    b DBMS_STATS.ObjectTab;
begin
    public.dbms_stats.GATHER_SCHEMA_STATS(
        'USER1', 100, false, '', 1, '', false, '', '', 
        '', a, null, false, false, b);
end;

/


--构建环境
exec public.dbms_stats.CREATE_STAT_TABLE('SYSDBA','USER1_STAT_TABLE',null);


--调用dbms_stats_gather_schema,获得user1下的所有表对象的统计信息
exec dbms_stats_gather_schema();


exec public.dbms_stats.EXPORT_SCHEMA_STATS('USER1','USER1_STAT_TABLE');


select STANAME from USER1_STAT_TABLE order by STANAME;
STANAME(name)      |
-------------------
USER1_TAB1_DBMS_STA|
TS$                |
-------------------
USER1_TAB1_DBMS_STA|
TS$                |
-------------------
USER1_TAB2_DBMS_STA|
TS$                |
-------------------
USER1_TAB2_DBMS_STA|
TS$                |
总数目:4

exec public.dbms_stats.DELETE_SCHEMA_STATS('USER1');
exec public.dbms_stats.DROP_STAT_TABLE('SYSDBA','USER1_STAT_TABLE');
DROP TABLE user1.tab1 CASCADE;
DROP TABLE user1.tab2 CASCADE;
DROP USER user1;