29 Temmuz 2009 Çarşamba

DBA SQL - 1

/* ### Tablolarda alan aciklamalarinin toplu olarak girilmesi #####
/* ### Bazi alan isimleri kullanim amaclarina bagli olarak farkli tablolarda ayni isimle yer alabilir. (CRE_DATE, MOD_USER, FATURA_NO vb.) Bunlara tek seferde aciklama girmek icin asagidaki sql kullanilabilir.
/* ### owner='XXXXXX' sizin islem yapacaginiz schema adini girmeniz gerekecektir.
/* ### ZZZZZZZZZ yerine alan aciklamasini girilmelidir.
/* ### column_name='QQQQQQQQ' yerine istediginiz alan adi girilmelidir.
/* ### Bu sql calistirildiktan sonra listelenen SQL cümlecikleri secilip tekrar calistirilmalidir.

select 'COMMENT ON COLUMN XXXXXXXE.'||table_name||'.'||column_name||' IS '||''''||'ZZZZZZZZZZ'||''''||';'
from dba_col_comments where owner='XXXXXXXX' and comments is null
and column_name='QQQQQQQQ'

/* ### schema'ya ait tablolarin index kullanılip/kullanmadiginin monitor edilmesi ###
/* ### sql cumlecikleri calistikca tablolara ait indexleri kullanirsa indexin monitor degeri YES olur. Boylece o indexin kullanilmis oldugunu anlasilir.

-- scheman'in indexlerinin cikartilmasi ve toplu olarak acilmasi(schemaadi yerine sizin schema adini girmelisiniz)
select 'alter index schemaadi.'||index_name||' monitoring usage;' from dba_indexes where owner=schemaadi order by table_name;

-- monitor'Un acilmasi tek bir index icin (index.adi yerine istediginiz indexin adini giriniz)
alter index "index.adi" monitoring usage;

-- izlenmesi ((schemaadi yerine sizin schema adini girmelisiniz)
select * from v$object_usage where owner=schemaadi;

-- monitor'un kapatilmasi (index.adi yerine istediginiz indexin adini giriniz)
alter index "index.name" nomonitoring usage; /* ### table, index ve partition'larin toplam buyuklukleri
/* ### ozellikle partitionlarin buyukluklerini takip etmek icin kullanilir.

select segment_name,segment_type,bytes/1024 from dba_segments order by bytes desc /* ### Yanlis bir tablespace uzerinde acilan indexlerin dogru tablespace uzerinde rebuild edilmesi
/* ### HEDEFTS dogru tablespace adi
/* ### YANLISTS yanlis kullanilan tablespace adi.
/* ### SCMADI indexleri tasinacak scema adi.

select 'alter index '||owner||'.'||index_name||' rebuild tablespace HEDEFTS ;'
from dba_indexes
where tablespace_name='YANLISTS' and owner='SCHMADI' and index_type='NORMAL'
order by owner /* ### table ve index'lerin initrans değerinin yükseltilmesi
/* ### XXXXXX schemasina ait table ve indexlerin ini_trans degeri 250'den kucuk olanlarin secilmesi.
/* ### Asagidaki sql calistirildiktan sonra listelenen SQL cumlecikleri secilerek tekrar calistirilmalidir.

-- table's of schema
select 'alter table ' || owner || '.' ||table_name || ' initrans 255;'
from dba_tables
where owner in ('XXXXXX','') and ini_trans <250

-- index's of schema
select 'alter index ' || owner || '.' ||index_name || ' initrans 255;'
from dba_indexes
where owner in ('XXXXX','') and ini_trans <250
/* ### Index istatistik degerlerinin kontrol edilmesi.
/* ### Eger kayit sayisi fazla olan tablolarda indexli kolonlarda tekrar edilen deger 1000 den kucukse o zaman bu indexleri tekrar gozden gecirmek gerekir.
/* ### v$session.sid=XXXX session SID biliniyorsa yukaridaki deger yerine kullanilir.
/* ### XXXXXXXXX olarak schema adi girilmelidir.
/* ### burada tablolardaki kayit sayisi 1.000.000 dan fazla olanlar secilmektedir.

select c.TABLE_NAME,c.INDEX_NAME,c.column_name,s.DISTINCT_KEYS,s.NUM_ROWS
from dba_ind_columns c,dba_ind_statistics s,dba_tables t
where c.INDEX_OWNER='XXXXXXXX'
and c.index_NAME=s.index_NAME
and s.OWNER='XXXXXXXX'
and t.OWNER='XXXXXXXX'
and t.table_name=s.TABLE_NAME
and s.DISTINCT_KEYS<1000 and t.num_rows>1000000 and s.partition_name is null
order by 1,4 /* ### SQL PLUS uzerinden calisan sql'in execution plan bilgilerinin alinmasi (Bu ornek UNIX sistemler uzerinden verilmistir.)

-- 1. İzleme işlemini yapacak kullanıcının öncelikle bir PLAN_TABLE tablosuna sahip olması gerekir. Genellikle $ORACLE_HOME/rdbms/admin dizini altına yer alan utlxplan.sql script’i, izleme işlemini yapacak kullanıcı tarafından SQL*Plus’tan çalıştırılır.
SQL> @utlxplan

-- 2. İzlenecek sorgu SQL*Plus’tan aşağıdaki şekilde çalıştırılır.
SQL> explain plan
set statement_id=’MUSTERI’ for
select MUSTERI_ADI
from MUSTERI
where MUSTERI_NO=1;

-- 3. Plan, aşağıdaki sorgu ile görüntülenir.
SQL> select lpad(‘ ‘,2*(level-1)) || operation || ‘ ‘
|| options || ‘ ‘ || object_name || ‘ ‘ ||
Decode(id,0, ‘Cost = ‘ || position) “Query Plan”
from PLAN_TABLE
start with id=0 and
statement_id=’MUSTERI’
connect by prior id=parent_id
and statement_id=’MUSTERI’;
/* ### Index analiz edilmesi (SQL PLUS Uzerinden calistirilacaktir.)
/* ### XXXXXX ile schema adi ve "indexadi" ile analiz edilecek index girilmelidir.
/* ### Burada index'in %100 degeri kontrol edilecektir. istenirse bu deger %25, %50 olarak girilebilir.
/* ### Degree => 4 ile paralelizm 4 olarak set edilmistir. sistemdeki cpu sayisina bagli olarak 1,2,4,8 gibi degerler girilebilir.

BEGIN
SYS.DBMS_STATS.GATHER_INDEX_STATS (
OwnName => 'XXXXX'
,IndName => 'indexadi'
,Estimate_Percent => 100
,Degree => 4
,No_Invalidate => FALSE);
END;
/

-- ayni islemin daha basit ve default degerlerle yapiabilecek hali.
ANALYZE INDEX XXXXXX.indexadi COMPUTE STATISTICS ONLINE /

Hiç yorum yok:

Yorum Gönder