oracle

失効している統計情報のみを取得しなおす(分割実行)

SCOTTスキーマが持つテーブルの中で現在失効している統計情報を取得しなおすプロシージャです。無名ブロックで記載しているのでDBへのストアドは不要でお気軽です。fetch first xxx rows only の部分を適当に変えて使ってください。

declare
exesql varchar2(800);
exeobj varchar2(80);

BEGIN
FOR CUR IN (select t.OWNER,t.TABLE_NAME from DBA_TAB_STATISTICS  t where t.OWNER='SCOTT' and t.STALE_STATS ='YES' fetch first 100 rows only ) LOOP
exesql := 'begin DBMS_STATS.GATHER_TABLE_STATS( OWNNAME => ''"'|| CUR.OWNER||'"'',TABNAME => ''"'||CUR.TABLE_NAME||'"'',METHOD_OPT => ''FOR ALL COLUMNS SIZE AUTO''); end;';
exeobj := CUR.OWNER||'.'||CUR.TABLE_NAME;
EXECUTE IMMEDIATE exesql;
DBMS_OUTPUT.PUT_LINE(exeobj);
END LOOP;
END;

スポンサーリンク
コピペで使う