2013-05-05 19 views
12

Czy istnieje sposób zaktualizować wszystkie statystyki dla wszystkich tabel, niezależnie od właściciela?Oracle ręcznie aktualizować statystyki dotyczące wszystkich tabel

Znalazłem sniplet, ale nie jestem pewien, czy to będzie chwycić wszystkie tabele ....

BEGIN 
    FOR A IN (SELECT owner FROM SYS.all_tables) LOOP 
     execute immediate 
     EXEC dbms_stats.gather_schema_stats('A.owner', cascade='TRUE'); 
    END LOOP; 
END; 
+1

SELECT DISTINCT właściciel od SYS.all_tables –

Odpowiedz

7

Nie pakiet DBMS_STATS może zrobić co najwyżej jeden schemat naraz.

Można użyć skryptu poniżej w celu zebrania statystyk dla wszystkich typów obiektów we wszystkich schematów. Ten, którego liście ma kilka problemów (niepotrzebne wykonać natychmiastową, `A.owner” jest ciągiem znaków, ale powinna ona być przedmiotem, etc).

Możesz dodawać dodatkowe schematy, aby pominąć listę IN, ponieważ prawdopodobnie nie chcesz tego robić w przypadku wbudowanych schematów (w większości przypadków są statyczne, więc mogą być niepotrzebne). Ponadto, musisz mieć odpowiednie uprawnienia dla każdego schematu jesteś zbieranie statystyk na (lub zalogować się jako DBA).

Zbieranie statystyk na wszystkich obiektach (prawdopodobnie to, czego naprawdę chcesz):

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; 

Zbieranie statystyk na zaledwie tabelach:

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; 
13
+3

Chociaż ten link może odpowiedzieć na pytanie, lepiej jest to tutaj zasadnicze części odpowiedzi i podać link do odniesienia. Odpowiedzi dotyczące linków mogą stać się nieprawidłowe, jeśli strona z linkami się zmieni. – SysDragon

+2

@SysDragon Moja odpowiedź była zarówno funkcją, jak i linkiem. Dodałem 'exec' i'; ', aby było bardziej zrozumiałe. –

+0

I zgodnie z przewidywaniami, łącze jest zepsute. –

Powiązane problemy