No il pacchetto DBMS_STATS
può fare al massimo uno schema alla volta.
È possibile utilizzare lo script seguente per raccogliere le statistiche per tutti i tipi di oggetti in tutti gli schemi. Quello che hai elencato ha un paio di problemi (l'esecuzione immediata non necessaria, `A.owner 'è una stringa ma dovrebbe essere un oggetto, ecc.).
È possibile aggiungere schemi aggiuntivi da saltare nell'elenco IN
poiché probabilmente non si desidera eseguire ciò per gli schemi incorporati (sono comunque statici in ogni caso, quindi sarebbe inutile). Inoltre, è necessario disporre dei privilegi appropriati per ogni schema su cui si stanno raccogliendo le statistiche (o essere registrati come DBA).
Raccogliere statistiche su tutti gli oggetti (probabilmente quello che si vuole veramente):
BEGIN
FOR rec IN (SELECT *
FROM all_users
WHERE username NOT IN ('SYS','SYSDBA'))
LOOP
dbms_stats.gather_schema_stats(rec.username);
END LOOP;
END;
Raccogliere statistiche solo su tabelle:
BEGIN
FOR rec IN (SELECT *
FROM all_tables
WHERE owner NOT IN ('SYS','SYSDBA'))
LOOP
dbms_stats.gather_table_stats(rec.owner, rec.table_name);
END LOOP;
END;
SELECT DISTINCT proprietario DA SYS.all_tables –