Rastgele Yazılar : Group By ve Having By
Rastgele Yazılar : Data Guard Broker Konfigurasyonu ve Switchover Operasyo...
Rastgele Yazılar : Java Nedir ?
Rastgele Yazılar : Oracle Veritabanı İpuçları
Rastgele Yazılar : Neden ORM- Object Relatioanal Mapping- kullanayım ki?
Rastgele Yazılar : ORACLE OBJECT TYPE
Rastgele Yazılar : Datawarehouse Yapısından Azıcık
Rastgele Yazılar : Canlı Bir Transportable Tablespace Operasyonu
Rastgele Yazılar : Table Partition oluşturma
Rastgele Yazılar : Oracle'da Merge İşlemi
ORACLE VERİTABANI DEPLOYMENT ANALİZİ
Bu makalemde oracle veritabanı obje (package, procedure, function, tablo, index) taşımalarında yapmamız gereken bağımlılık (dependency) analizinden bahsedeceğim.
Analiz edilmeden taşınan obje, veritabanında ciddi problemler oluşturabilmekte ve hatta servis kesintisi ile kurum vizyonuna zarar verebilmektedir. Veritabanına taşımayı düşündüğümüz objenin çok fazla bağımlılığı olabilir. Ve yaptığımız işleme görede bağımlı objeler invalid duruma düşebilmektedir. Invalid duruma düşen obje son kullanıcı tarafından kullanılmadan derlenirse herhangi bir problem oluşturmamaktadır. Eğer invalid duruma düşen obje son kullanıcı tarafından çok çağrılan (kullanılan) bir obje ise, bu durum objeyi derlememize engel olacağı gibi son kullanıcının hata almasınada sebep olacaktır.
Hizmet kalitesi olarak performans, bizim için en önemli unsurlardan biridir. Internet şubeden hesap hareketlerini inceleyen, havale, fatura ödemesi yapan müşterimiz, yapmış olduğu işlemi en kısa sürede problemsiz tamamlamak ister. Sürekli yavaşlıktan şikayetçi olan bir müşteri, üstüne iyilik birde yukarıda bahsettiğim gibi analizsiz taşımalar sonucu sürekli hata ile karşılaşırsa ilgili kurum ile çalışmaktan vazgeçecektir.
Peki obje taşımalarımızda nelere dikkat etmeliyiz? Bağımlıklıkları nasıl analiz etmeliyiz? Şimdi bu sorulara cevap arayalım. Obje taşımalarında hangi durumlara dikkat etmemiz gerektiğini başlıklar altında tek tek inceleyelim.
Obje bağımlılık (dependency) durumunu aşağıdaki sorgu ile kontrol edebiliriz. Aşağıdaki sorgu sonucunda en az 1 kayıt (objenin kendisi) gelmelidir. Bu durum objenin varlığını gösterir. Hiç kayıt gelmiyorsa veritabanında böyle bir obje yoktur. Eğer kayıt sayısı çok fazla ise bağımlılık fazla olduğundan dolayı dikkat edilmeli ve obje tipine göre aşağıdaki adımlar izlenmelidir.
SELECT name FROM dba_dependencies d WHERE (d.referenced_name,d.referenced_type) in( SELECT name,type FROM dba_dependencies d1 WHERE d1.referenced_name IN ('OBJECT_NAME') ) UNION SELECT name FROM dba_dependencies d2 WHERE d2.referenced_name IN ('OBJECT_NAME') UNION SELECT object_NAME FROM dba_objects WHERE object_NAME IN ('OBJECT_NAME')
1- SP TAŞIMALARI: Package taşımalarında dikkat etmemiz gereken SPEC olup olmamasıdır. Eğer SPEC varsa bağımlı olan bütün objeleri düşürecektir. Bu durumda bu paketin kullanım yoğunluğuna bakılmalıdır. Kullanım yoğunluğu ve sıklığı çok fazla ise taşıma güniçi yapılmamalıdır. Aşağıdaki script ile kullanım yoğunluğunu tespit edebiliriz.
SELECT name, loads, executions, pins,c.* FROM v$db_object_cache c WHERE name in (SELECT name FROM dba_dependencies d WHERE (d.referenced_name,d.referenced_type) in( SELECT name,type FROM dba_dependencies d1 WHERE d1.referenced_name IN ('OBJECT_NAME') ) UNION SELECT name FROM dba_dependencies d2 WHERE d2.referenced_name IN ('OBJECT_NAME') UNION SELECT object_NAME FROM dba_objects WHERE object_NAME IN ('OBJECT_NAME')) AND pins >0;
2- ADD, DROP, MODIFY COLUMN Komutları: Tabloya kolon ekleme, silme, değiştirme (ADD, DROP, MODIFY) ve Constraint modify işlemleri yapan scriptler tabloyu kullanan SP leri invalid duruma düşürecektir. İlgili tablo için bağımlılık analizi yapılmalıdır. Analiz sonucuna göre deployment planlanmalıdır.
3- ADD, DROP CONSTRAINT Komutları: Tabloya constraint ekleme/kaldırma (ADD, DROP CONSTRAINT) işlemlerinde PK/FK constraint tipinde ve bütün tipler için VALIDATE modunda tabloya kilit atıldığı için gün içinde yapılmamalıdır.
Diğer constraint tiplerinde mutlaka NOVALIDATE parametresi ile komut çalıştırılmalıdır.
4- CREATE INDEX komutu: CREATE INDEX komutu ile index açılırken ilgili tabloya kilit atıldığı için bu tablonun çok kullanılan bir tablo olmadığından emin olunmalıdır.
5- CREATE TRIGGER komutu: Create trigger komutu ile trigger oluşturma işlemi tablo üzerinde kilit oluşturmaz. Gün içerisinde çok fazla insert görmeyen bir taloya insert trigger i gün içerisinde yapılabilir. Ancak çok sık insert gören tablolara, insert işlemiyle tetiklenen trigger eklenmesi durumunda kısa süreli pinleyememe sorununa yol açmaktadır.
6- CREATE TABLE komutu: Tablo create scriptinin içindeki constraintler incelenmelidir. Sade bir tablo create scripti sorun çıkarmayacaktır. Ama içerisinde PK/FK constraint var ise dikkatli olunmalıdır. Çünkü bu durum 3. Maddede belirttiğim gibi ilişkili tabloya kilit atacaktır.
Sağlıklı çalışan, problemsiz deploymentların olduğu mutlu veritabanlarımız olması dileğiyle. Sağlıcakla kalın… :) :)
Talip Hakan ÖZTÜRK