21

所有者に関係なく、すべてのテーブルのすべての統計を更新する方法はありますか?

このスニペットを見つけましたが、これがすべてのテーブルを取得するかどうかはわかりません....

BEGIN
   FOR A IN ( SELECT owner FROM SYS.all_tables ) LOOP
      execute immediate
        EXEC dbms_stats.gather_schema_stats( 'A.owner', cascade='TRUE');
   END LOOP;
END;
4

3 に答える 3

22

DBMS_STATS.GATHER_DATABASE_STATSを使用します:

begin
    dbms_stats.gather_database_stats;
end;
/
于 2013-05-06T07:03:19.973 に答える
0

@sehrope プロシージャに変更を加えて、ロックされた統計と IOT テーブルをスキップするようにしました。

BEGIN
    FOR rec IN (SELECT a.owner, a.table_name 
                FROM all_tables a, dba_tab_statistics  s
                WHERE a.owner NOT IN ('SYS','SYSDBA')
                AND 
                (a.iot_type IS NULL
                OR
                a.iot_type != 'IOT_OVERFLOW')
                and a.owner = s.owner and a.table_name = s.table_name and s.STATTYPE_LOCKED is null)
    LOOP
        dbms_stats.gather_table_stats(rec.owner, rec.table_name);
    END LOOP;
END;
于 2021-04-08T20:37:30.587 に答える