22 Şubat 2020

Oracle Database ile Yapılmış Bir Projenin Kurulum (Installation-Delta) Scriptlerini Ayrıştırmak

Oracle Database ile Yapılmış Bir Projenin Kurulum (Installation-Delta) Scriptlerini Ayrıştırmak

Yazılım süreçlerinde bazen bir projenin kopyasını almanız veya o projenin temel mimari kodlarını ayrıştırıp (İzolasyon İşlemi) başka yerde kullanmanız gerekebilir. Bu işlemi hem kod tarafında hem de Database tarafında yapmanız gerekmektedir. Veri tabanı kısmındaki ayrıştırma işlemlerini genelde DBA olarak bilinen Database Admin'ler yapar. Bu makaleyi yazmamdaki temel amaç bir Test Mühendisinin de en azından Database'deki ilişkileri bir nevi olsun öğrenmesi ve tatbik etmesidir.

Bir yazılım projesinin veri tabanı ayrıştırma operasyonu yapılırken ilk çalıştırılacak olan Installation veya Delta Script olarak biline sıralı çalışan SQL deyimleri Table, Grant, Synonyms, Triggers, Insert'ler, Index ve Sequences gibi ayrılarak belli bir sıra içerisinde yapılmaktadır.

Database Installation'da bu sıralı işlemleri başlık olarak yazacak olursak;
* Tablespaces SQL Script Dosyaları
* Table, Tablolardan Alınan SQL Script Dosyaları
* User ve Role Bulunduğu SQL Script Dosyaları
* SEQUENCE ve SYNONYM Bilgilerinin Bulunduğu SQL Script Dosyaları
* GRANT SQL Script Dosyaları
* INSERT (Data Set İşlemleri. Bu kısımda Tabloya atılacak veriler bir Insert Scripti veya Excel Import/Export ile yapılabilir. Ya da Tablodan Tabloya ortam seçerek DBA'ye veri taşıttırabilirsiniz.)
* INDEX ve CONSTRAINT Bilgilerinin Bulunduğu SQL Script Dosyaları

Temelde bir projenin veri tabanı kurulumu yapılırken Tablespaces ve Tablolar oluşturulur. Daha sonra User ve Roller Create edilir. Sequence karşılığı olan tablolar oluşturulur. Grant (Yetkiler) verilir, ilgili tablolara Datalar atılır ve en son Index-Constraint işlemi ile bitirilir.

Dipnot: Index-Constraint işlemini Insert (Data Ekleme) işleminden önce yapmayınız çünkü hata alabilir ve daha yavaş veri atacaktır.

Aşağıda bazı adımların nasıl yapılacağını anlatacağım. Oracle Database'e bağlantı için TOAD Oracle Client kullanıyorum. İşlemleri TOAD ara yüzüne göre anlatacağım.

Oracle Database ile Yapılmış Bir Projenin Kurulum (Delta) Scriptlerini Oluşturmak

A) TABLES, Tablolardan Alınan SQL Script Dosyaları
Create dosyasını alacağımız tabloyu Schema Browser'da açıp Script penceresinden ilgili Script dosyasını alabilirsiniz. Diğer yöntem Tabloya sağ tıklayıp Create Script demenizde yeterlidir.

İlk defa Create yapılacağı için Script Options'dan Drop Statement özelliğini Uncheck etmeyi unutmayın. Output olarak Single file seçebilirsiniz direk SQL dosyası olarak almak için.

Çıkan dosyadaki CONSTRAINT, UNIQUE INDEX olanları ayrı bir SQL dosyasına alınız. Örneğin 99_INDEX_CONSTRAINT adında ve bu dosyayı Insert işlemlerinden sonra çalıştıracağız. 99 yazılmasındaki amaç arada birçok Insert Scriptinin olabileceği ve en son bu dosyanın çalıştırılması gerektiğini belirtmek içindir.

B) User ve Role Bulunduğu SQL Script Dosyaları
User Scriptini çıkarmak için Editor alanına User adını yazıp F4 tuşuna basarak açılan sayfadaki Script penceresinden Create dosyasını alabilirsiniz. Aynı şekilde CREATE ROLE ile de Rolleri ekleyebilirsiniz.


C) SEQUENCE ve SYNONYM Bilgilerinin Bulunduğu SQL Script Dosyaları
Bazı tabloların SEQUENCE’ları da olmaktadır. Schema Browser'dan Sequences kısmından bunlara ulaşabilir ve aynı şekilde Create Script diyerek SEQUENCE ve SYNONYM dosyalarını çıkarabilirsiniz.

Bir Tablonun genelde SEQUENCE ismi başında "SEQ_" ibaresi ile oluşturulur. Örneğin Tablomuz SALARY olsun Sequences ismi SEQ_SALARY olarak verilmiştir.

D) GRANT SQL Script Dosyaları
En önemli kısma geldik. GRANT yani yetki dosyasını çıkarırken bir SQL sorgusu ile bu işlemi yapacağız.

Dipnot: Table ve Sequence'ların GRANT dosyalarını ayrı ayrı çıkarınız.

İlk olarak Şema ve Tablolara ait tüm bağımlı Grantları aşağıdaki sorgu ile çıkaralım. Ben örnekte dört şema ve ona bağlı dört tabloyu kullandım. Siz tek şema içinde bu işlemi yapabilirsiniz.

SELECT DISTINCT GRANTEE FROM DBA_TAB_PRIVS 
WHERE OWNER IN ('SCHEMA_1','SCHEMA_2','SCHEMA_3','SCHEMA_4') 
AND TABLE_NAME
IN
(
'TABLE_1',
'TABLE_2',
'TABLE_3',
'TABLE_4'
)
ORDER BY GRANTEE

Yukarıdaki sorgu sonucu tüm Grantlar çıkacaktır. İşimize yarayan Grantları alarak aşağıdaki gibi GRANTEE IN kısmına ekleriz. Burada User, Role ve Tablo isimleri olabilir. Aynı yapıyı Sequences Tabloları içinde kullanabiliriz.

SELECT 'GRANT '||PRIVILEGE|| ' ON '||OWNER||'.'||TABLE_NAME||' TO '|| GRANTEE||';' SCRIPT 
FROM DBA_TAB_PRIVS 
WHERE OWNER IN ('SCHEMA_1','SCHEMA_2','SCHEMA_3','SCHEMA_4') 
AND TABLE_NAME
IN
(
'TABLE_1',
'TABLE_2',
'TABLE_3',
'TABLE_4'
)
AND GRANTEE IN
(
'USER_1',
'ROLE_1',
'ROLE_2',
'TABLE_1'
)
ORDER BY GRANTEE

Son yazdığımız sorgu ile GRANT Scripti oluşturulacaktır. İlgili adımlara oluşan Scripti ekleyebilirsiniz.

Temelde bir yazılım projenin veri tabanı kurulumu yani Data Definition Language (DDL) işlemlerini bir Test mühendisi gözünden incelemiş olduk. Umarım faydalı olmuştur.

Authors: Burak AVCI & Yıldıray ELMACI

Hiç yorum yok:

Yorum Gönder