这么收集:
DECLARE
BEGIN
for rs in (select * from dba_tab_cols where owner not like '%SYS%') LOOP
DECLARE
BEGIN
EXECUTE IMMEDIATE 'STAT 100 ON "'||RS.OWNER||'"."'||RS.TABLE_NAME||'"("'||RS.COLUMN_NAME||'");';
EXCEPTION WHEN OTHERS THEN
NULL;
END;
END LOOP;
END;
如果为了快,可以先收集索引列的(快),再收集其他列的(慢):
说明:
- 查询出来的结果,复制全部结果,执行即可
- 这里执行的时候,记得设置manager为报错跳过的方式
- 这里需要关注下是不是会把视图的列查询出来(实际上是不需要的)——查出来了也无所谓,报错跳过吧;如果需要过滤的话,在a的with表里,考虑添加 tab.subtype$加限制条件即可
索引列:
with a as (
SELECT SCH.NAME OWNER,TAB.NAME TABLE_NAME,col.name COLUMN_NAME FROM SYSSTATS S,SYSOBJECTS SCH,SYSOBJECTS TAB,syscolumns col
WHERE SCH.ID=TAB.SCHID AND S.ID=TAB.ID and col.id=tab.id and s.colid=col.colid
--SELECT SCH.NAME,TAB.NAME,S.* FROM SYSSTATS S,SYSOBJECTS SCH,SYSOBJECTS TAB
--WHERE SCH.ID=TAB.SCHID AND S.ID=TAB.ID
),B AS(
select INDEX_OWNER OWNER,TABLE_NAME,COLUMN_NAME from -- dba_tab_columns
ALL_IND_COLUMNS
WHERE INDEX_OWNER NOT IN ('CTISYS',
'SYS',
'SYSAUDITOR',
'SYSDBA',
'SYSJOB'
) -- AND DATA_LENGTH<500
),C AS(
select * from b MINUS SELECT * FROM a)
SELECt 'STAT 100 ON '||OWNER||'.'||TABLE_NAME||' ("'||COLUMN_NAME||'");' FROM C WHERE TABLE_NAME not LIKE '%_DELL'
其他列:
with a as (
SELECT SCH.NAME OWNER,TAB.NAME TABLE_NAME,col.name COLUMN_NAME FROM SYSSTATS S,SYSOBJECTS SCH,SYSOBJECTS TAB,syscolumns col
WHERE SCH.ID=TAB.SCHID AND S.ID=TAB.ID and col.id=tab.id and s.colid=col.colid
--SELECT SCH.NAME,TAB.NAME,S.* FROM SYSSTATS S,SYSOBJECTS SCH,SYSOBJECTS TAB
--WHERE SCH.ID=TAB.SCHID AND S.ID=TAB.ID
),B AS(
select OWNER,TABLE_NAME,COLUMN_NAME from dba_tab_columns WHERE owner
NOT IN ('CTISYS',
'SYS',
'SYSAUDITOR',
'SYSDBA',
'SYSJOB'
) AND DATA_LENGTH<500
),C AS(
select * from b MINUS SELECT * FROM a)
SELECt 'STAT 100 ON '||OWNER||'.'||TABLE_NAME||' ("'||COLUMN_NAME||'");' FROM C WHERE TABLE_NAME not LIKE '%_DELL'
最后修改时间:2020-12-24 13:18:24
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




