23 Aralık 2008 Salı

Oracle'ın Geçmişine Küçük Bir Yolculuk

Merhaba,

Oracle ile uğraşan herkes az çok Oracle'ın nasıl bir geçmişi olduğunu bilir. Bugün anlatmak istediğim aslında perdenin arkasında gerçekleşmiş olaylar.

Oracle'ın geçmişi tam olarak 30 yıllık bir geçmiş. Kurucularından olan Larry Ellison ve Bob Miner'ın başlangıçta sadece 2000 Doları varmış. Veritabanlarının adı da "Oracle"mış. Tabii o zamanlar ilişkisel veritabanı değil, "veritabanı programı" olarak biliniyormuş. Bahsettiğim yıl, 1977. Bruce Scott ve Ed Oates isimli yazılım mühendisleri ise Oracle'ın ilk tam zamanlı çalışan personelleri.

Oracle başlangıçta sadece ürünün adı olacaktı ancak ilerleyen zamanlarda şirketin adı olarak anılmaya başlandı. O zamanlarda da SQL (Structured Query Language) vardı fakat kullanan şirket IBM'di. ANSII gibi bir standart olmadığı için de ilk kullanılan sorgulama dili olmasının avantajı ile bütün veritabanları da peşinden SQL'e geçti ve bugün standart olan halini aldı.

IBM'in araştırma dosyalarından yararlanarak -o zamanların meşhur mühendisi Edgar Codd ile birlikte- ilk ilişkisel veritabanın temellerini 1978 yılında attılar. Projeye IBM destek vermemiş ve Edgar Codd görevinden istifa ederek Oracle'a geçmiştir.

1979'un Temmuz ayında Oracle, raflardaki yerini almaya başladı. Bu sayede Oracle ilk RDBMS olarak tarihteki yerini aldı. Oracle ilk olarak PDP-11 Assembler Language ile yazıldı ve 2nci versiyon olarak piyasaya sürüldü.

1980'li yıllarda Oracle veritabanı o zamanların en popüler programlama dili olan C ile yazılmaya başlandı. Bu yıllarda Oracle'ı diğer bütün yazılımlardan farklı kılan bir özellik vardı. O da işletim sistemi ne olursa olsun çalışması! İnsanlar 80'li yıllarda önce ilk olarak donanım alırlardı sonra yazılım alırlardı. Sonra da kara kara hangi yazılım bizim donanımlarımızda ve işletim sistemlerimizde çalışıyor diye düşünüyorlardı.

1982 yılı geldiğinde Oracle 16 ve 32 bit işletim sistemlerinde de çalışır hale geldi. Bu versiyon 2.3'tü. 2.3'te ise Oracle yepyeni bir son kullanıcı arayüzü ile piyasaya sürüldü. Yeni geliştirmeler içinse yazılım ekibi gece gündüz çalışmaya devam ediyordu.

1984 yılında, Oracle ilk kez "okuma tutarlılığı" konusunu gündeme getirdi ve Oracle versiyon 4 ile birlikte piyasaya sürdü. Bu şekilde Oracle bir sorgunun çalıştırıldığı zamandaki verilerin tutarlı olacağını garantilemiş oldu. Bankalar ve büyük şirketlerin bütün elektriğini üstüne çekmişti Oracle. Bu büyük innovasyon ile pazardaki yeri de gittikçe sağlamlaşıyordu. Informix ile savaşan Oracle'ın vurduğu en büyük darbelerden birisi de fiyatında uygunluk ve 2 ila 15 kat daha fazla arttırdığı performansı oldu. Yine bu yılın en büyük gelişmelerinden birisi de "Export/Import" aracının geliştirilmesi oldu. Günümüzde kullandığımız ve veritabanındaki verileri ve bütün objeleri başka bir veritabanına taşınması 1984 yılında Oracle'ın 4ncü versiyonu ile birlikte yapılır hale geldi.

1985'li yıllarda çok popüler olan Client/Server ilişkisini Oracle 5nci versiyonu ile birlikte hayata geçirdi. Oracle versiyon 9i'deki Real Application Clusters'ın temelleri de bu yıllarda clustering'in gelişmesi ile atılmış oldu.

1988'in en büyük dönüm noktası ise PL/SQL olarak tarihe yazıldı. Oracle 6ncı versiyonunda PL/SQL'i hayata geçirerek procedure'ler oluşturmaya başladı. Satır bazında tablolara kilit koyulması da yine bu versiyon ile gündeme geldi. Yine aynı yıl "Hot Backup" olarak bilinen ve veritabanı açık(online) iken yedekleme alınmasına yarayan sistem geliştirildi. Bundan önceki bütün versiyonlarda veritabanı yöneticileri veritabanını kapatıp sonra yedek alıyorlardı.

Oracle 1989 yılında OLTP sistemler için destek vermeye başladı (OLTP - OnLine Transaction Processing). Bu sistem genelde işlemlerin çok olduğu ve sorguların çok yoğun çalıştığı sistemlerde kullanılıyor. Bu sebepten, Oracle sektördeki birçok potansiyel müşteriyi de etkilemeyi başardı.

90'lı yıllarda teknolojik herşeyin gelişmesi son derece büyük bir ivme ile hızlanmaya başlamıştı. Oracle'ın artık yeni rakipleri, yüzleşmesi gereken bir innovasyon maliyeti ile birlikte gündeme gelmişti. Güncel gereksimler, müşteri ihtiyaçları ve rekabetin daha da kızışması ile birlikte 1990-2000 yılları arasında Oracle'da müthiş gelişmeler kaydedildi.

Oracle artık kat kat daha hızlı, güvenli, tutarlı ve sağlamdı. Oracle geliştirdiği 6.2 versiyonu ile cluster'lı yapısı ve PL/SQL'i ile müşterilerine birçok fırsat sunabiliyordu. Bu yıllarda Oracle daha çok son kullanıcıların arayüzlerinin iyileştirilmesi ile uğraşıyordu. Aslında son derece olumlu sonuçlar da alıyordu. Artık kullanıcılar daha kolay ve hızlı SQL kullanıyorlardı.

Seneler 1992'yi gösterdiğinde Oracle versiyon 7'yi piyasaya sürmeye hazırlanıyordu. Bu versiyonda PL/SQL'de trigger yazılmaya başlandı. Bu şekilde veritabanının işleyişi ve kontrol'ü biraz daha kolaylaşmış oldu. Veritabanı, artık yöneticisi tarafından tam olarak izlenebiliyordu (audit). Bu sayede yönetici, kullanıcılarının girdiği bütün sorguları kontrol edebiliyordu.

Client/Server uygulamaları hız kesmeden devam ediyordu. Bir yandan da 64 bit sistemler için entegrasyon işlemlerini yürütüyorlardı. Internet bazlı ve uygulama tabanlı entegrasyonları da son hız devam etmekteydi.

Oracle veritabanı, 1997 yılında Java ile daha da güçlü hale geldi ve veritabanının içinde Java uygulamaları geliştirebilir hale geldi. Veritabanının içine Java kodu gömülebiliyordu ve son derece hızlı bir şekilde çalıştırılabiliyordu. XML desteğini de vermeye başlayan veritabanının bu yıllardaki versiyonu 7 idi.

1998 yılında Linux tabanlı sistemi ile Oracle, internet ortamında çok daha sağlam bir duruş sergilemeye başladı. Versiyon ise 8i.

2000'li yıllarında başında Oracle "Unbreakable" olarak tanımlamaya başlamıştı kendini. Solaris'in 64 bit işletim sisteminin desteğini arkasına alan Oracle Linux Cluster'ları ile birlikte çok kuvvetli sistemin altına imzasını altın harflerle attı. Oracle veritabanı bu yıllardan sonra hep sağlam bir veritabanı olarak anıldı.

2001 yılında, Oracle'ın belkide en çok kullanılan, hala da uzun zaman önce sistemlerde entegre edilmiş ve sürüm güncellemesi yapılmamış veritabanı olan 9i piyasaya sürüldü. Oracle, Microsoft ve IBM'in veritabanlarına inanılmaz fark atmış, pazardaki payını dramatik bir şekilde arttırma yollarını genişletirken, yeniliklerin de ardı arkası kesilmiyordu. Tam cluster desteğine de geçiş sağlandı. Real Application Clustering ve kırılamayan Oracle 9i'nin lansmanları ve ardından gelen entegrasyonları ile veritabanı yöneticileri de sistemleri daha rahat ve kolay kullanmaya başladılar. Tabii aynı zamanda daha faydalı. Oracle veritabanı ile yapılan testlere göre, 100 TB'lık bir veritabanı, hala tutarlı ve sağlam bir şekilde durabiliyordu. Bu kadar gelişimden sonra da Oracle'ın aldığı ödüllerde artıyordu.

Oracle güvenli backup'ın geliştirilmesini 2006 yılında tamamladı ve sundu. Oracle'da veriler yedeklenirken artık encyrpt edilerek yedeklenebiliyor ve olası bir hırsızlık ve kaybolması durumunda korunabiliyordu. Oracle'ın versiyonu ise 10g oldu.

2007 yılında Oracle 11g versiyonunu tanıttı ve şu andaki sürümü ise 1 (release 1). 11g ile geliştirilen birkaç başlık ise; "Oracle Database Vault, Oracle Partitioning, Oracle Real Application Clusters and Oracle Audit Vault".

30 yılda Oracle'daki gelişmeleri bu şekilde özetleyebiliriz. Evet, sadece bir özet olarak kaydedilebilir yazdıklarım. Bunların arkasında ise inanılmaz bir yazılım geliştirme ekibi ve hırs var. Daha da ilerisinde ise, öğrenilecek çok şey :) Çünkü Oracle'da yeni bir innovasyon, siz eskisini tam olarak anlayana kadar geliştiriliyor ve Oracle durmuyor, yoluna devam ediyor. Bize de buradan şimdiye kadar bu yazılımın geliştirilmesinde katkısı bulunan bütün mühendislere teşekkür ediyoruz, ellerine sağlık.

İyi akşamlar,

Ogan


4 Aralık 2008 Perşembe

Reverse Key Indexes

Merhaba,

Bir index yarattığımız zaman (create index komutu kullanarak) sıradan bir b-tree index yaratmış oluyoruz. Bu yazımda bahsedeceğim konu ise Index'lerin Reverse Key ve Bitmap olanları.

Reverse Key Indexes: Bu index'in, standart bir b-tree index'ten en büyük farkı; kolonları değiştirmeden sadece indexlenen her kolonun byte'ını ters çevirmesidir. Bu durumda index'in okuduğu byte'ların yerleri tamamen değişecek ve bir takım performans problemlerine yol açacaktır. Yani, heap organized bir tablo'da yaratılan ve paşa paşa kullanılan bir b-tree index'i reverse ederseniz, bu büyük bir yanlışlık olacaktır. Reverse işlemi genelde RAC (Real Application Cluster)'lardaki performans problemlerini çözmek için kullanılır. Ayrıca, düzgün bir yapıya sahip index eğer reverse edilirse index range scan yapabilmekte bir hayal olarak kalacaktır. Çünkü index'in point ettiği alanların yerleri altüst olacak ve range ile bakabilmesi imkansız olacağından index yerine histogramlar vasıtasıyla ya full table scan'e bırakacaktır ya da düzensiz olarak reverse key index ile çalışıp, performansı son derece düşürecektir.
Reverse Key Index'leri genelde OLTP RAC (Online Transaction Processing Real Application Clusters) ortamlarında performansı arttırmak için kullanıyoruz.

Bir örnek vermek gerekirse;

SQL > CREATE INDEX index_deneme ON ogan_deneme (kullanici_adi) REVERSE;

Yukarıdaki örnekte, index_deneme diye bir reverse key index'i ogan_deneme tablosunun kullanici_adi kolonunda yarattık.

Reverse Key bir index'i eski haline döndürebilmek içinse;

SQL> ALTER INDEX index_deneme REBUILD NOREVERSE;

diyoruz... Ayrıca noverse demezsek, index_deneme reverse haliyle rebuild edilecektir.

Index'lerin genelde hızlı olmasının sebebi rowid'lerden, belirli bir düzen ile gitmesidir. Oracle veritabanın'da veriye en hızlı ulaşma yolu ise rowid'dir. Bu sebepten dolayıdır ki b-tree index'ler rowid'leri takip ederek sonuca ulaşırlar.

İyi çalışmalar,

Ogan
Takip et: @oganozdogan