ablog

不器用で落着きのない技術者のメモ

パーティション表の統計情報を収集する PL/SQL

パーティション表の統計情報を収集する 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