问题描述
我试图找到所有陈旧的对象。据我所知,有两种方法,两者都应该返回相同的结果。
在开始之前,我第一次做了一个冲洗监控
然后我使用了第一种方法,即查询 * _ tab_statistics表
然后我使用了第二种方法,即在gather_schema_stat proc中传递 “列表陈旧”
在开始之前,我第一次做了一个冲洗监控
begin
dbms_stats.flush_database_monitoring_info;
end;
/
然后我使用了第一种方法,即查询 * _ tab_statistics表
select * from ALL_TAB_STATISTICS a where STALE_STATS = 'YES'
然后我使用了第二种方法,即在gather_schema_stat proc中传递 “列表陈旧”
declare
lv_object_list dbms_stats.objecttab;
p_filter_list dbms_stats.objecttab := dbms_stats.objecttab();
begin
dbms_stats.gather_schema_stats(ownname => 'XXXXX',
options => 'LIST STALE',
objlist => lv_object_list,
force => TRUE);
FOR i IN 1 .. lv_object_list.count
LOOP
dbms_output.put_line(lv_object_list(i).objName);
END LOOP;
end;
/
专家解答
要在 * _ tab_statistics中获取最新信息,您需要像完成的那样刷新统计信息。请注意,调用dbms_stats在内部做到这一点:
因此,假设您已经刷新了统计数据,您是否遇到了这些结果不同的情况?
create table t (
x int primary key, y int
);
insert into t values (0, 0);
commit;
exec dbms_stats.gather_table_stats(user, 't');
insert into t
select rownum, 1 from dual connect by level <= 100;
commit;
select table_name from user_TAB_STATISTICS a where STALE_STATS = 'YES' ;
TABLE_NAME
------------------------------
PEOPLE
declare
lv_object_list dbms_stats.objecttab;
p_filter_list dbms_stats.objecttab := dbms_stats.objecttab();
begin
dbms_stats.gather_schema_stats(ownname => 'chris',
options => 'LIST STALE',
objlist => lv_object_list,
force => TRUE);
FOR i IN 1 .. lv_object_list.count
LOOP
dbms_output.put_line(lv_object_list(i).objName);
END LOOP;
end;
/
PEOPLE
T
select table_name from user_TAB_STATISTICS a where STALE_STATS = 'YES' ;
TABLE_NAME
------------------------------
PEOPLE
T因此,假设您已经刷新了统计数据,您是否遇到了这些结果不同的情况?
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




