16 Temmuz 2008 Çarşamba

Materialized View

Oracle DW uygulamalarında sıkça rastlayabileceğimiz bir yapı olan Materialized Viewları, saklı tablo sonuçları olarak düşünebiliriz. Normal Viewlardan farkı, bir sql sorgusu olarak değil de sql sorgusu + data olarak saklanmasıdır. Yani MV diskte yer kaplar.

Peki neler yapılıyor MVlerle, milyonlarca kayıt bulunan tabloda belli sorguları önceden çalıştırıp bunun sonuçlarını saklama işlemini yapıyoruz.
Örneğin, bir satış tablomuz var, 5 milyar kaydımız var bu tabloda, 100 id'li müşterinin o günkü toplam harcamalarını öğrenmek istiyoruz. Bu öğrenme işi çok fazla kez tekrar ediliyor diyelim. 5 milyar kayıt içinde group by, sum() gibi sql özelliklerini kullanmak çok fazla kaynak kullanımına sebebiyet vereceğinden dolayı, bu işlemlerin önceden bir yerde tutulması bizim işimize yarayacaktır.

Yazının başında belirtildiği gibi, Data Warehouse sistemlerde özellikle kullanılan bir yapı, biraz real-time uygulamaların dışında gerçekleştirilebilir diyebiliriz. Örneğin salı günkü verilerden yola çıkarak, çarşamba günü rapor hazırlama işlemleri bu şekilde daha hızlı gerçekleştirilebilir. Salı akşamı sorgular çalıştırılır, MV'ler güncellenir, çarşamba günü sorgular çalıştırıldığında Ana tablo yerine bu MV'lerden ilgili bilgiler çekilmiş olur. Yani 5 milyar kayıt içinde arayacağımıza, çok daha az miktarda veri içinde arama yapmış olacağız. Bu da bizim kaynakları kullanma performansımızı arttıracak. Fakat bu durumda güncel verilerden yararlanmamış oluyoruz, sadece önceki güne ait verilerden yararlanmış oluyoruz. Bunu önleme yöntemleri de mevcut, MV'de.

MV'de bilinmesi gereken en önemli özelliklerden birisi de Query Rewriting özelliği. Bu özellik Session bazında ve MV oluştururken enable yapıldığı takdirde, MV 'in sql sorgusu çalıştırıldığında ana tablo yerine MV'den veriler çekilmiş oluyor. Şöyle ki, MV yi oluştururken "SELECT * FROM SALES" olarak oluşturduğumuz zaman, Query Rewriting özelliği enable olur ise, "SELECT * FROM SALES" sorgusu çalıştırıldığında, CBO ( Cost Based Optimizer ) bu sorgunun aslında MV'den çekilmesine karar verir ve yazılan sorguyu MV'yi işaret edecek şekilde ( örn : "SELECT * FROM MV_SALES" ) değiştirirr ve sorguyu yapan farkında olmadan MV kullanılmış olur.

Eğer bu özellik enable edilmez ise, MV'den yararlanmak için sorgu yazılırken MV direk işaret edilmelidir. "SELECT * FROM MV_SALE" gibi, aksi takdirde direk ana tablodan veriler çekilir.

3 Temmuz 2008 Perşembe

Tablespace - Datafile Oluşturma

Oracle'da verilerimiz fiziksel olarak datafile'larda saklanır ve bu datafile'ları barındıran lojiksel olarak Tablespace adını verdiğimiz yapılar bulunur. Tablespace'ler, data fileların toplu olarak yönetimini kolaylaştırmıştır. Bir Tablespacei read only yaparak, onu içeren dosyaları da read only yapmış oluruz, hepsini teker teker yapacağımıza.

Şimdi bu tablespace oluşturma işlemini manuel olarak yapalım.
İlk olarak konsoldan bir dosya oluşturalım.


root@fuat-laptop:/home/oracle/datafiles# touch fuat_3.dbf
root@fuat-laptop:/home/oracle/datafiles# ls -la


Daha sonra bu dosyaya yazma işlemlerinin gerçekleşebilmesi için:

root@fuat-laptop:/home/oracle/datafiles# chmod 777 fuat_3.dbf


Şimdi fuat_ts_2 adli tablespacimizi fuat_3.dbf dosyasini içerecek şekilde oluşturalım:

CREATE TABLESPACE FUAT_TS_1 DATAFILE '/home/oracle/datafiles/fuat_1.dbf' SIZE 10M;

Tablespace altered.


Kontrol etmek için:

root@fuat-laptop:/home/oracle/datafiles# ls -la
total 20536
drwxr-xr-x 2 root root 4096 2008-06-03 13:35 .
drwxrwxrwx 3 root root 4096 2008-06-03 10:11 ..
-rwxrwxrwx 1 root root 10493952 2008-06-03 11:49 fuat_3.dbf
...
...
...


Görüldüğü gibi fuat_3.dbf dosyası 10MB olarak oluşturuldu.

Şimdi, başka bir dosyayı var olan tablespace'e ekleme işlemini gerçekleştirelim.
Yine bir dosya oluşturalım, fuat_4.dbf diye, chmod ayarlarını yapalım,
ve sql plus 'ta su komutu yazalım:


alter tablespace fuat_ts_1 add datafile '/home/oracle/datafiles/fuat_4.dbf' SIZE 10M


Çok basit komutlarla datafile'larımızı ve tablespace'lerimizi oluşturmuş olduk.

2 Temmuz 2008 Çarşamba

Linux Üzerinde Oracle 10g XE ve Oracle SQL Developer

Merhaba, Linux'e uygulama kurmak bazı durumlarda gerçekten güç olabiliyor ( yeteri kadar bilgi sahibi değilseniz ). Çok araştırma yapmak, forumları gözden geçirmek, döküman okumak gerekiyor. Veya deneme/yanılma yöntemi ile de çözüm bulabiliyorsunuz. Aarama motorlarından arama yapıp bazılarının blogundan bunları elde etmek de mumkun oluyor.

Oracle 10g XE Linux'e kurulumu için aşağıdaki linki inceleyebilirsiniz:

http://www.oracle.com/technology/software/products/database/xe/htdocs/102xelinsoft.html


Ubuntu'ya kurulumu cok kolay, indirilecek .deb dosyasının çift tıklama ile yükleyebiliyorsunuz.

Tabi yükleme ile bitmiyor, configure etmemiz gereken bazı şeyler var. Bunun için aşağıdaki adresten yararlanabilrsiniz :

http://susedim.blogspot.com/2008/03/suse-103-zerine-oracle-xe-kurulumu.html


SQL Developer
http://www.oracle.com/technology/software/products/sql/index.html

rpm li dosyayı acma sekli linkte yazıyor. Icini acip icindeki klasoru masaustune kopyleyip, /opt/sqldeveloper/sqldeveloper.sh dosyasını çalıştırarak uygulamayı başlatabilirsiniz.