ANASAYFA MCSE ORACLE LINUX TEMEL PC SINEMA SPOR
Merak ettiğiniz veya öğrenmek istediğiniz konuları bize yazın.Makalelerini yayınlayalım.Mail adreslerimiz:
pektas.isil@gmail.com,acakmakli1983@gmail.com Bekliyoruz...

14 Eylül 2009 Pazartesi

DBMS_STATS.GATHER_TABLE_STATS

Bugün ihtiyaç duyduğum ve sizlerle paylaşmak istediğim bir konu,database inizde bir schema için analiz çalıştırmak istiyorsanız fakat bu schema içinde bir kaç tablonun istatistiklerine ihtiyacınız yoksa (mesela log tablosu vs gibi) bir procedure yazarak istemediğiniz tabloları exclude edebilirsiniz.
Bunun için aşağıdaki procedure kullanabilirsiniz,


create or replace procedure analyze_table is
analiz_tablo varchar2(150);
cursor tablo IS
select table_name from user_tables where table_name not in ('EXCLUDE EDİLECEK TABLOLAR') ;
begin
open tablo;
LOOP
FETCH tablo
INTO analiz_tablo;
EXIT WHEN tablo%NOTFOUND;
dbms_stats.gather_table_stats(
ownname => 'OWNER',
tabname => analiz_tablo,
estimate_percent => dbms_stats.auto_sample_size,
cascade => true,
method_opt => 'for all columns size auto',
degree => 2 );
END LOOP;
CLOSE tablo;
end;
/

Aşağıdaki gibi bir job tanımlayarak procedure u günlük çalışacak şekilde ayarlayabiliriz,

BEGIN
sys.dbms_scheduler.create_job(
job_name => '"OWNER"."ANALIZ_JOB"',
job_type => 'PLSQL_BLOCK',
job_action => 'begin
analyze_table ;
end;',
repeat_interval => 'FREQ=DAILY;BYHOUR=2;BYMINUTE=0;BYSECOND=0',
start_date => to_timestamp_tz('2009-09-14 Europe/Istanbul', 'YYYY-MM-DD TZR'),
job_class => '"DEFAULT_JOB_CLASS"',
auto_drop => FALSE,
enabled => TRUE);
END;

Teşekkürler…

Hiç yorum yok:

Yorum Gönder