Otomatik analiz çalışırken bazı tablolarınızın istatistiklerinin değişmesini veya analizleri daha sonra manuel olarak çalıştırmak isteyebilirsiniz.
Bu durumlarda,
begin
dbms_stats.unlock_table_stats('OWNERNAME','TABLENAME');
end;
komutu ile tablo istatistiklerini kapatabiliriz veya bir schema altındaki tüm objelerin istatistiklerini kapatmak istiyorsak,
begin
dbms_stats.unlock_schema_stats('OWNER');
end;
komutunu kullanabilirsiniz.
Şimdi bir örnek üzerinde test yapalım,
SQL> create table test as select * from dba_users;
Table created.
SQL> create index test_idx on test(username);
Index created.
SQL> begin
2 dbms_stats.lock_table_stats('deneme','test');
3 end;
4 /
PL/SQL procedure successfully completed.
Lock edilen tablonun istatistik tipi dba_tab_statistics view ınde 'ALL' görünür,
SQL> SELECT table_name FROM dba_tab_statistics WHERE stattype_locked='ALL' and owner='DENEME';
TABLE_NAME
------------------------------
TEST
Tablo lock edildikten sonra üzerinde bulunan indexler içinde analiz çalıştırılmaz,
SQL> begin
2 dbms_stats.gather_index_stats('deneme','test_idx');
3 end;
4 /
begin
*
ERROR at line 1:
ORA-20005: object statistics are locked (stattype = ALL)
ORA-06512: konum "SYS.DBMS_STATS", satır 14037
ORA-06512: konum "SYS.DBMS_STATS", satır 14060
ORA-06512: konum satır 2
Aşağıdaki şekildede istatiskleri unlock yapabiliriz.
dbms_stats.unlock_table_stats('OWNERNAME','TABLENAME');
Not:
Analizleriniz çalışırken aşağıdaki şekilde hata alarak analiz sonlanırsa,
ORA-00054: kaynak meşgul ve NOWAIT ile elde etme belirlendi veya zaman aşımı süresi doldu
ORA-06512: konum "SYS.DBMS_STATS", satır 17964
ORA-06512: konum "SYS.DBMS_STATS", satır 18450
ORA-06512: konum "SYS.DBMS_STATS", satır 18531
ORA-06512: konum "SYS.DBMS_STATS", satır 18487
ORA-06512: konum satır 2
Lock oluştuğu için hata almışsınız demektir.
Eğer schema bazlı istatistik çalıştırıldıysa istatistikleri unlock yaparak düzgün bir şekilde analiz çalıştırılmasını sağlayabiliriz.
Teşekkürler
Hiç yorum yok:
Yorum Gönder