Sayfalar

9 Haziran 2012 Cumartesi

ORACLE DBMS Mimarisine Bir Bakış-Mantıksal Mimari

Merhaba Arkadaşlar!

Geçtiğimiz yazılarda ORACLE mimarisinin fiziksel bölümünü inceleyip bitirdik. Şimdi fiziksel mimari kadar önemli olan mantıksal mimariyi inceleyeceğiz. Zira bizim için fiziksel mimariyle bağlantı kuran mantıksal mimaridir. Yani fiziksel mimari işin biraz ayrıntısı olurken, mantıksal mimari işin görünen kısmıdır. İşletim sistemi mantıksal mimariye müdahale edemez. Mantıksal mimari DML komutlarıyla işlenir. Şimdi bu kısa girişle başlayabiliriz;


2. MANTIKSAL MİMARİ

Mantıksal mimarinin temsil edildiği bir şekil aşağıdadır;



Mantıksal mimari genel olarak tablo uzaylarından, şema nesnelerinden, veri bloklarından, genişlemelerden ve parçalardan oluşur. Bunlar Türkçe isimleriyle biraz tuhaf gelebiliyor :) Bunların orijinal halini de bilmekte fayda var.

Tablo Uzayı (Tablespaces)
Her veritabanı mantıksal olarak tablo uzaylarına bölünmüştür.Bunlar mantıksal depolama birimi olarak kullanılır. Her tablo uzayı için bir yada daha fazla veri depolama dosyaları bulunur (Data Files). Bir veritabanı bir veya daha fazla tablo uzayına sahiptir. Tablo uzayları sahip oldukları fiziksel dosyaların kapasitesi kadar veri tutabilirler. Nihayetinde tablo uzaylarının toplam kapasitesi veritabanının kapasitesini bize verecektir. Tablo uzayı veri yazmaya açılıp, kapatılabilir niteliktedir. 

Veri Blokları (Data Blocks)
Veritabanı verileri veri blokları halinde tutulur. Bunlar arkaplanda aslında byte'lar olarak ifade edilir. Verilerin depolandığı en küçük birimdir. Veri bloklarının uzunluğu henüz veritabanı oluşturulurken belirlenir. 

Genişlemeler (Extends)
Veri bloğunun bir büyüğüdür. Arka arkaya sıralanan belli sayıdaki veri bloklarından oluşur. 

Parçalar (Segments)
Genişlemelerin bir üst birimi olarak ifade edilirler. Yani bir segment, genişlemelerden oluşur. Parçalar kendi aralarında farklı görevleri yapacak şekilde ayrılırlar. Bunlar veri parçaları(data segments), indeks parçaları(index segments), geri alma parçaları(roll back segments) ve geçici parçalar(temporary segments)'tir.

  •  Data Segment:Bir tablo bir veri parçasından(data segment) oluşmaktadır. Tabloya ait veriler bu segmentin içerisindeki extend'lerde saklanır. Kümeler de (cluster) aynı yapıyla bir segmentten oluşur.
  • İndex Segment: Her indeks de bir index segmentten oluşur. İndekse ait veriler burada tutulur. 
  • Roll-Back Segment: Yine veritabanı kurtarma işlemleri roll-back segmentlerde saklanır ve bu işlem için birden fazla segment kullanılabilir. 
  • Temporary Segment: Temporary segmentler ise ihtiyaç duyulduğunda oluşturulur. SQL komutlarının işletiminde kullanılırlar. 


Veri Bloğu, Genişleme ve Parça Arasındaki Bağ
Kısaca; veritabanı tablespace'lerden, tablespace'ler segmentlerden, segmentler extent'lerden, extendler de nihayet data blocklardan oluşur. Demek ki en büyük mimari birim veritabanıyken, en küçük mimari birim data blocklarıdır.

Veritabanında bir tablo oluşturulduğunda, bu tablo için aslında arkaplanda bir segment oluşturulur. Bu segment yine pek çok tablonun bulunabileceği bir table space'te yer alır. Veriler, veri bloklarında satır ve sütunlar halinde saklanır. Satır bilgileri row piece denen yerde saklanır. Her row piece sadece 1 satıra ait bilgiyi tutabilir. Bu ilişkiler aşağıdaki şemadan görülebilir. (Sembolik olarak belli sayıda içerikler eklenmiştir.)



Bir veri bloğunda şu bilgiler tutulur;
Block Header (Blok Başlığı): Segment tipi burada saklanır. Index, Roll-Back, Temporary... Yine verinin adresi, tablonun dizini gibi yapısal bilgiler burada tutulur.
Row Data (Satır Verisi): Verinin gerçek hali buradadır.
Free Space (Boş Alan): Ayrılan alandan geriye kalan boş kısımdır.

Bir tablo uzayı sadece bir veritabanına ait olabilir. Yani paylaşılamaz. Çünkü fiziksel dosya yani data file, sadece bir veritabanına ait olabilir. 

Veritabanı Şema Nesneleri (Schemas)
Mantıksal depolama yapıları olarak tanımlanır. Veritabanında bir takım işlemler için kullanılırlar. Tablolar, görüntüler, sıralar, eşanlamlılar, indeksler, kümeler, prosedürler, fonksiyonlar, paketler ve ilişkiler. Şema tüm bunları içeren bir gruplama birimidir. Şimdi bunların tek tek ne anlama geldiğine bakalım;

  1. Küme (Cluster)
    Aynı anda sorgulanan birden çok tablonun bir arada kaydedilmesi işlemidir. Oluşan bu yapıya "küme" denir. Bu yapının amacı, sorgulama işlemlerinde birlikte sorgulanan tablolar için yapılan işlemleri hızlandırmaktır.Bu tarz ilişkili tablolar veritabanında bir kümeye kaydedilir. Bu kümelere ait veriler de hızlı erişim için aynı veri bloğuna (data block) kaydedilir.
  2. İndeksler (Index)
    İndeksler küme ve tablolar için kullanılırlar. Asıl amaç yine aranan kayda en hızlı şekilde ulaşmaktır. Genelde favori olarak çok sık kullanılan alanlar üzerinde indeks oluşturmak faydalıdır. Bunun aksine her alana bir indeks vermek veritabanını hızlandırmak yerine ağırlaştıracaktır ve optimize kullanımı etkileyecektir.
    Bir tablo için sınırsız sayıda indeks oluşturulabilir. Bu sütunların sayısıyla ve birbiriyle olan ilişkisiyle alakalıdır. Örneğin bir sütun birden fazla indekste yer alabilir. Şunu da unutmamak gerekir ki aynı indeks yapısının farklı isimlerle oluşturulmasına izin verilmez.
    İndeksleme işlemi ORACLE'da başlı başına bir konudur. Eğer fırsat olursa bu konuda yazılar paylaşılabilir. Örneğin; ORACLE B*TREE indeksleme metodunu kullanır. Yine bunun dışında hash clusters, reverse keys, bitmap indeksleme metodları da kullanılır. İndeksleme işlemleri tabloları etkilemez. Yani indeks oluşturulup, silindiğinde tablodaki veriler silinmez. İndeksler sadece tabloya erişim hızını etkiler. Bir indeks oluşturulduğunda artık indeksin kontrolü otomatik sağlanır. Tabloda güncellenen veriler indekste de güncellenir. 
  3. Rol(Role)
    Demişitk ki veritabanında her nesnenin bir kullanıcısı vardır. Bir kullanıcı başka kullanıcıya ait nesnelerle direkt işlem yapamaz. Bunun için bazı haklara sahip olması gerekir. Veritabanında herhangi bir işlem yapmak için o işleme yetkili olmamız gerekir. Mesela bir başkasının tablosunun içeriğindeki verileri listelemek, tablo oluşturmak gibi her işlem hak gerektirir. Bu haklar kullanıcının derecesine göre  kullanıcılara verilir.
    Peki rol işin neresinde? İlk olarak belirli haklar kullanıcılara tek tek atanır. Ardından da bir takım haklar roller altında birleştirilir. Daha sonra bu roller, gereken kullanıcılara atanır.
    Haklar konusu da yine ayrıntılı bir konu olup kısaca bahsetmeye çalışalım; Haklar sistem ve nesne hakları olmak üzere iki çeşittir. Sistem hakları veritabanında önceden hakları tanımlanan rollerdir. Tablo, tablo uzayı oluşturma, index oluşturup kaldırma gibi işlemler sistem haklarına örnektir. Nesne hakları ise adından da anlaşılacağı üzere nesneler üzerinde tanımlanan haklardır. Nesne hakları; "SELECT", "INSERT", "UPDATE", "DELETE", "ALTER", "INDEX", "EXECUTE" ve "REFERENCES" olmak üzere 8 adet tanımlıdır. Bu komutlar ayrı ayrı konular olup mümkün olursa incelenecektir. 
  4. Geri Alma Parçası (Roll-Back Segments)
    ORACLE en güvenlikli veritabanı olarak bilinmektedir. Peki bunun sebebi nedir? SELECT, INSERT, UPDATE gibi veritabanındaki temel işlemlerin yedeği alınır. Bu veritabanının güvenliği açısından çok önemlidir. Alınan bu yedeklere roll back segments denir ve hatalı bir işlem sonunda ROLLBACK komutu girilerek yapılan değişikliklerin uygulanması engellenir. Bu da geri alma parçalarından yedeğin getirilerek kaydın eski haline dönmesiyle olur. Fakat eğer kullanıcı COMMIT yani onaylama komutunu uygularsa değişiklik bu segmentlerden geri alınamaz. Bu gibi durumlarda recovery işlemi yine mümkün olmakla beraber, biraz daha külfetlidir. 
  5. Sıra (SEQUENCE)
    Sıra numaraları otomatik olarak oluşturulan bir takım numaralardır. Tablo kayıtları için kullanılırlar. Bu genelde şu gibi durumlarda çok kullanışlı olur. Diyelim ki veritabanımız çok kullanıcılı bir sistem ve aynı anda bir kayıt için 2 kullanıcı numara oluşturmak istediğinde bu sıkıntı yaratacak bir durumdur. Çünkü sıralar tekil olmalıdır. Sonuç olarak bunun önüne geçmek kod yazarak sağlanır. Eğer bunu daha hızlı yapmak istersek Seequence özelliği imdadımıza yetişir. Zira bu işi kodlarla yapmak veritabanını yavaşlatır. Çünkü aynı anda iki kullanıcının işlem yapmaması için kodlar kullanılır.
    Bir sıra numarası sıra adını, artan ya da azalan olduğunu ve artma miktarını içerir.  Bu numaralar sistem tablo uzayında saklanır. Bu tablo uzayı her zaman aktif olduğu için sıra numaraları daime aktiftir. Bir sıra numarası birden fazla tablo için kullanılabilir.
  6. Prosedürler ve Fonksiyonlar (Stored Procedures and Stored Functions)
    Bazı işlemleri sürekli tekrarlayarak uygulamak gerekebilir. Her defasında veritabanına müdahale ederek el ile bu işlemleri yapmak elbette can sıkıcı olacaktır. Bu gibi durumlarda prosedürler ve fonksiyonlar imdadımıza yetişir. Üstelik bir uygulama için yazılan bu prosedür ve fonksiyonlar her uygulama üzerinde sorunsuz kullanılır. Daha önce bahsettiğimiz gibi ORACLE ile gelen ürünler prosedür ve fonkisyonlara destek verir.
    Peki prosedür ile fonksiyonun farkı nedir? Prosedürler geriye birden çok değer döndürürken, fonksiyonlar tek değer döndürürler. Tüm prosedürler ve fonksiyonlar SQL ve PL/SQL komutlarıyla yazılırlar. 
  7. Tablo (Table)
    Bilindiği üzere veritabanındaki veriler mantıksal olarak tablolar üzerinde saklanır.Kayıtlar bu tablonun satırlarında tutulurlar. Verilerin özelliklerini belirten kısımlar da sütun olarak adlandırılır. Her sütun bir ada ve sakladığı veri tipine dair bir özelliğe sahiptir. Yine tablolar da bir isim taşırlar. Veritabanında sınırsız sayıda tablo oluşturulabilir. Genel olarak tablolar tablo uzaylarında tutulur. Bu konuyu zaten yukarıda açıklamıştık.
  8. Görüntüler (Wiews)Bazı durumlarda tabloların belli kısımlarının sürekli kullanılması gerekebilir. Mesela 2 tablonun belli alanları sürekli işlemde kullanılmak istenebilir. Bu durumlarda aslında var olmayan fakat kullanılması gereken birçok alanın sanki bir tabloymuş gibi bir çatı altında toplanması mümkündür. Bu yapılara "görüntü" adı verilir. Görüntüler yine SQL sorgularıyla asıl tablolar üzerinde oluşturulur. Amaç yine hız sorgu olaylarında hız kazanmaktır. Görüntüler asıl verinin sadece bir yansımasıdır. Yani bu veriler üzerinde silme, veriyi değiştirme gibi bir işlem mümkün olamaz. Bu işlem görüntü için yapılabilir.
  9. Eşanlamlılar (Synonym)
    Bazen güvenlik adına nesnelerin ve o nesnenin sahibinin gizlenmesi istenebilir. Bu gibi durumlarda eşanlamlar devreye girer. Eşanlamlar güvenliği artırmak için kullanılırlar. Eşanlam aslında bir takma isimden ibarettir. Yani veritabanında yer kaplamaz.
    Eşanlamlar özel veya genel olabilirler. Genel olanlar tüm kullanıcılara açıkken, özel olanlar kapalıdır. Yani özel olan eşanlama sade o nesnenin sahibi erişebilir.
    Yine eşanlam kullanıcıların nesnelere erişimini kolaylaştırır. Örneğin A kullanıcısı B kullanıcısının nesnesine erişirken her zaman B.nesneadı yazmak istemeyebilir. Bu gibi durumlarda "genel" olarak tanımlanan bir eşanlam ile sadece eşanlamın ismini yazarak o nesneye erişim mümkündür.
    Eşanlamlar uygulama programları için de kolaylık sağlar. Bir nesnenin adı üzerinde işlem yapıldığında, eskiden bu nesneyi kullanan uygulama programları içerisinde var olan yapılarda eğer bu nesnenin adı geçiyorsa, değişiklik sıkıntı oluşturur. Oysa tanımlı olan bir eşanlam, nesne ismi değişse bile bu sıkıntının olmasını engeller. Çünkü kullanımda olan sadece eşanlamın ismidir. Yine SQL sorgularında eşanlamlar uzun uzun nesnesahibi.nesneadi syntax'ını yazmak yerine sadece eşanlam ismini yazarak büyük kolaylık sağlar. Hem de kullanıcı adını ve nesne adını gizleyerek güvenlik sağlar.
Nihayet bitirdiniz! :) Sanırım biraz uzuuuunca bir yazı oldu. Fakat eminim bir o kadar da faydalı bir yazıdır. Bu sayede veritabanı mantıksal mimarisine de bir göz atmış olduk. Görüldüğü gibi sistem çok mükemmel bir uyum içinde işliyor ve her ayrıntı düşünülmüş. Yeni yazılarda buluşmak ümidiyle...

İyi çalışmalar...

Hiç yorum yok:

Yorum Gönder