Di seguito alcuni comandi per raccogliere le statistiche di uno schema oracle:
- DBMS_UTILITY.ANALYZE_SCHEMA --> viene utilizzato per raccogliere statistiche per tutte le tabelle, i cluster e gli indici di uno schema.
- EXEC DBMS_UTILITY.ANALYZE_SCHEMA('SCOTT','COMPUTE');
- EXEC DBMS_UTILITY.ANALYZE_SCHEMA('SCOTT','ESTIMATE', estimate_rows => 1000);
- EXEC DBMS_UTILITY.ANALYZE_SCHEMA('SCOTT','ESTIMATE', estimate_percent => 25);
- EXEC DBMS_UTILITY.ANALYZE_SCHEMA('SCOTT','DELETE');
Note: È anche possibile analizzare l'intero database con il comando DBMS_UTILITY.ANALYZE_DATABASE('COMPUTE');
oppure si può utilizzare DBMS_STATS.GATHER_TABLE_STATS
- EXEC DBMS_STATS.GATHER_SCHEMA_STATS(ownname => 'CONTRACT', cascade =>true,estimate_percent => dbms_stats.auto_sample_size);
- EXECUTE DBMS_STATS.GATHER_TABLE_STATS(ownname => 'CONTRACT', tabname => 'CONT_NAME', method_opt => 'FOR ALL COLUMNS', granularity => 'ALL', cascade => TRUE, degree => DBMS_STATS.DEFAULT_DEGREE);
il seguente script genererà l'elenco dei comandi per l'analisi di tutte le tabelle nello schema.
SELECT 'EXECUTE DBMS_STATS.GATHER_TABLE_STATS
(ownname =>'||CHR(39)||'CONTRACT'||CHR(39)||',
tabname =>'||CHR(39)||TNAME||CHR(39)||',
method_opt => ''FOR ALL COLUMNS'',
granularity => ''ALL'',
cascade => TRUE,
degree => DBMS_STATS.DEFAULT_DEGREE);'
FROM TAB;
Terminando abbiamo la possibilità di utilizzare due metodi differenti per la raccolta delle statistiche. Per capire quale utilizzare si rimanda alla documentazione ORACLE:
- DBMS_UTILITY.ANALYZE_SCHEMA
- DBMS_STATS.GATHER_TABLE_STATS