パーティション表の統計情報を収集する PL/SQL を書いてみたけど、これでよいんだか。。。 来週検証してみる予定。
set pagesize 10000 set linesize 200 set trimout on set trimspool on set serveroutput on size 1000000 declare cursor cu is select owner, table_name, partitioned from dba_tables where owner not in ('DBSNMP','EXFSYS','MDSYS','ORACLE_OCM','ORDPLUGINS', 'ORDSYS','OUTLN','PERFSTAT','PUBLIC','SI_INFORMTN_SCHEMA', 'SYS','SYSMAN','SYSTEM','TSMSYS','WMSYS','XDB') and partitioned = 'YES'; begin for rec in cu loop begin dbms_output.put_line(rec.table_name); dbms_stats.gather_table_stats( ownname=> rec.owner, tabname=> rec.table_name, cascade=> TRUE, granularity=> 'ALL', estimate_percent=> 15); exception when others then dbms_output.put_line(rec.owner||'.'||rec.table_name||':[ '|| sqlcode||']'||sqlerrm); end; end loop; end; / exit