Oracle Veritabanı Mimarisi (Database Architecture) I

watch_later 2/07/2016
Veri tabanı büyük çaptaki verilerin tutarlı ve ilişkilendirilmiş şekilde bir arada bulundurulmasına olan sağlayan yapıdır.

DBA (Database Administrator)(Veritabanı Yöneticisi)
Veritabanının yönetimini sağlayan kişidir. DBA günlük bakım, yönetim, yazılım ile eş zamanlı olarak tabloların ve indekslerin oluşturulması gibi işlemleri üstlenir. Aynı zamanda backup işlemini uygular, yönetir. İşletim sistemi kaynaklarını tespit eder yeterlilik durumunda güncellemesini ve gerektiğinde kurulumunu sağlar.  Veritabanında ASM (Automated Storage Management) kullanılıyorsa, disklerin, fail groupların yapılandırılmasından izleme işlemine kadar hepsinden sorumlu olan kişidir.

Oracle Database
Oracle Relational Database Management System (RDBMS) İlişkilendirilmiş Veritabanı Yönetim Sistemi büyük miktardaki verilerin saklanabildiği,verilerin güvenliğinin sağlanabildiği, veriye hızlı erişimi sağlayabildiği ve bütün bu işlemleri tutarlı ve bütünlük içinde saklayabildiği, aynı zamanda birden fazla kullanıcıya aynı anda bilgiye erişim imkanı tanıyan sistemdir.


Oracle 11g Server Bağlantısı
3 farklı şekilde bağlantı:
1. İşletim sisteminin komut istemcisi
2. Uygulama (SQL Developer vb.)
3. Web tarayıcı

Kullanıcı SQL Plus gibi veritabanına bağlantı kurmak için kullanılan bir uygulama ile istemci makinede kullanıcı işlemi (user process) başlatılır. Kullanıcı adını, şifresini ve ulaşmak istediği veritabanının ismini girerek Oracle sunucusuna bağlanır ve anda sunucu makinede sunucu işlemi (server process) oluşturulur. Eğer Dedicated Server yerine Shared Server yapısı kullanılıyorsa her kullanıcı işlemi için ayrı bir sunucu işlemi oluşturulmaz. Her oturum yönlendirici tarafından paylaşımlı sunucu işlem havuzuna yönlendirilerek, kullanıcı işleminin faaliyette olan bir sunucu işlemi ile ilişkilendirilmesi sağlanır. Kullanıcı işlemi isteklerini sunucu işlemine iletir. Sunucu işlemi istekleri yerine getirir ve sonucunu kullanıcı işlemine verir. Kullanıcı bağlantıyı kestiğinde sunucu ve kullanıcı işlemleri bitirilir. 

Oracle sunucusunda sunucu işlemi dışında, disk I/O işlemleri gibi arkaplan işlemlerini gerçekleştirilir. Bunlar kullanıcı işlemi ile doğrudan ilişkili değildir. Belirli zaman aralıklarında veya belirli koşulların sağlanması durumunda çalışırlar. Her çalışan Oracle veritabanı bir instance ile ilişkilendirilir. ORACLE_SID parametresi ile işletim sistemine tanıtılan instance, belirli bir zamanda sadece bir veritabanını açıp kullanabilir.

Oracle Veritabanı Mimarisi
Instance iki işlemden oluşur. Bunlar: Memory ve Background’dur. Oracle 1 veya 1’den çok instance’tan oluşabilir.

Oracle Veritabanı Mimarisi

Veritabanı Bağlantısı
İlk olarak uygulama aracılığıyla bağlantı, diğeri ise sunucuya doğrudan bağlantı şeklindedir. Uygulama aracılığı ile bağlantı: bir banka ATM ile bağlanırken ATM uygulama sunucusuna bağlanır ve o sunucuda ana sunucuya bağlar. Temelde uygulama sunucusu tek bir kullanıcı ile ana sunucuyla bağlantı kurmaktadır ancak biz farklı kullanıcılar ile uygulama sunucusuna bağlanırız. Bağlantı hakları uygulama sunucusu ile belirlenir. Doğrudan bağlantı ise geliştirici ya da yöneticilerin bağlantı şeklidir.

Oracle Veritabanı Bağlantısı Simülasyonu
Instance
Oracle’ın çalışmasını sağlayan bileşendir. RAM üzerinde çalışır. Veri dosyalarına(Datafile) erişmemizi sağlar. Ayrıca RAM üzerinde belirli alanları ayırarak kullanmamızı sağlar. Çeşitli Arkaplan İşlemlerini (Background  Process) kullanır ve böylece veritabanının çalışmasını sağlar. 


Oracle Veritabanı Hiyerarşisi

Oracle Veritabanı Sunucu Yapısı 3’e ayrılır. Bunlar:
1. Bellek Birimleri (SGA/PGA)
2. İşlem Birimleri (Background Process)
3. Depolama Birimleri (Physical Files)

Oracle Veritabanının Bellek Altyapısı
Oracle RAM üzerinde kullanmak için belirli bir alanı kendine ayırır. Bu alan iki kısımdan oluşur bunlar: SGA(System Global Area) ve PGA(Program Global Area)’dır.


Oracle SGA-PGA Yapısı Simülasyonu
Oracle veritabanının yönetiminin sağlanmasında kullanılan işlemleri ve bellek yapılarını içermektedir. Tüm bellek yapıları veritabanının oluşturulduğu bilgisayarın RAM’inde yer almaktadır. Bu bilgi çoklu kullanıcının aynı anda veritabanına bağlanıp işlemlerini gerçekleştirmesinin nasıl olduğunu anlamak açısından önemlidir. Oracle işlemlerini gerçekleştirmek için bellek yapıları oluşturur ve kullanır. Bir Oracle veritabanında 2 adet bellek yapısı yönetilmektedir. Bu belleklerinde kendi içerisinde bileşenlere ayrılır. Bileşenlerin her biri farklı amaçlara hizmet etmektedir. Bütün verilerin bulunduğu alan disklerdir. Buna depolama alanı(storage area) denir.

Makinemize bulunan RAM’den Oracle servislerini açtığımızda, bir kısmı veritabanımız için adreslenir. Bu adreslenen bellek Oracle 11g veritabanında MEMORY_TARGET parametresi ve üst sınırı da MEMORY_MAX_TARGET parametresi ile kontrol edilir.

Memory iki parçadan oluşur:
1. SGA: System Global Area (Bellek içinde)
2. PGA: Program Global Area (Bellek dışında)

System Global Area (SGA) :
SGA, RAM üzerinde ayrılmış belleğin içerisinde kendisine ayırdığı alandır. Başka bir deyişle SGA bir Oracle instance için, veri ve kontrol bilgilerinin tutulduğu, bütün sunucu ve işlemler tarafından kullanılan paylaşımlı bellek alanıdır.

SGA Bileşenleri
1. Veritabanı Tampon Belleği (Database Buffer Cache)
Temel olarak tanımlamak gerekirse, veritabanından sorgu ile çekilen verilerin tutulduğu ya da saklandığı alandır.  Tüm kullanıcılar tarafından ortak olarak kullanılır. Kullanıcılar oturum açtıklarında, INSERT, UPDATE, DELETE vb. işlemleri yaptıkları zaman, yapılan değişiklikler doğrudan veritabanı üzerine yazılmaz. Yapılan tüm o değişiklikler buffer cache üzerinde tutulur.
Bir SELECT işleminde veritabanı ilk olarak veritabanı buffer cache’e bakarak işlemi veritabanına buffer cache’den döndürür. Eğer bu alan boş ise o zaman sorguyla ilgili olan tabloları datafile’den buffer cache’e kopyalayarak sorgu sonucunu geriye döndürür. Bu işlem sırasında datafile üzerinde sorguyla ilgili kaç tablo varsa hepsi kopyalanacaktır. Bu sırada disk yazma ve okuma hızlarına bağlı olarak performans kaybı olabilir. Ayrıca hiçbir veritabanı satır bazında taşıma yapmaz.

Bu şekilde Oracle verilere erişimi hızlı bir hale getirmiştir. Çünkü disklerin belirli bir okuma/yazma hızı vardır.  Okuma/Yazma hızları sorguların geriye döndürme süresi açısından önemlidir. Belleğinde bir kapasitesi var ve kapasitesi dolduğu an veritabanı kullanım sıklığına göre verileri ayrıştırır ve en az kullanılanlardan silmeye başlar. Yeni veriler eklendiğinde eski veriler bir COMMIT ya da ROLLBACK yapılana kadar undo tablespace’e gönderir.

Buffer cache içerisinde segmentler(tablo ve indeksler) bulunur. Önemli nokta mümkün olduğunca indeks ve tabloları bellekte tutmak gerekir. Yapılan işlemleri kalıcı hale getirmek için COMMIT komutunu kullanırız. Ancak COMMIT komutunun kullanılması verilerin diske yazılacağı anlamına gelmez. COMMIT komutu kullanılan veriler Log Buffer’a yazılır.

2. Hazır Log Tamponu (Redo Log Buffer)
Instance'da bir sorun olduğunda recovery işlemi için gerekli olan bilgiler burada saklanır. Belirli bir süre sonra fiziksel olarak diskte saklanmak için redo log dosyalarına yazılır. Ayrıca DML ve DDL işlemleri de diske yazılmadan önce burada tutulur.

Veriler çok sık aralıklarla burada işlem görürler (I/O yaparlar). bu alana yazılan veriler bir tabloda değiştirilen bir satırın tamamı değildir. Sadece değişim verisi log belleğine yazılır. Bunun bir başka ifadesi, bir tablodaki satırlardan birinin veya bazılarını UPDATE ile güncellediğimiz zaman, sadece yeni verinin Redo Log Buffer’ a yazacak olmasıdır. Eski veriler ise UNDO tablolarına yazılır ve ROLLBACK komutu çalışırsa UNDO tablolarından geriye yani eski haline döner.

COMMIT komutunun çalıştırılmasından sonra LGWR arkaplan işlemi devreye girer ve tampondaki bu değişikliği Online Redo Log dosyasına yazar. Böylece veritabanında gerçekleştirilmiş olan değişiklikler kalıcı olmuş olur.

3. Paylaşım Havuzu (Shared Pool)
Veritabanı kullanıcıları tarafından paylaşılan çeşitli yapıların tutulduğu alandır. Data dictionary, SQL sorgu sonuçları, PL/SQL blok sonuçları, paralel çalışan işlemler için gerekli olan bellek paylaşım havuzu içinde barındırılır. Kendi içinde alt bileşenlere ayrılır.

Kütüphane Tamponu (Library Cache)
Veritabanı bir sorguyu getirmek için birden çok metot üretir. En kısa sürede ve en az güç tüketimi hangi metot ile gerçekleşecek ise onu seçer. Seçtiği metodu da Library Cache içindeki Shared SQL Area’nın içine atar. Library Cache içinde kullanıcıların yazmış oldukları SQL ve PL/SQL kodlarının execution planları saklanır. Alternatifler çoğaldığında yani tablo yapısıyla alakalı bir değişiklik olduğunda execution planları yeniden yapılandırılıp Library Cache’in içinde yeniden planlanır.

Veri Sözlük Tamponu (Data Dictionary Cache)
En son erişilen, eriştiğimiz tanımlamaların bellek alanıdır. Oracle bir nesneye erişirken tanımlamaya ihtiyaç duyar ve bu tanımlama Data Dictionary Cache’te tutulur. Data Dictionary Cache veritabanının metadata’sını tutar. Kullanıcıların yetki ve bağlantı bilgilerinin kontrolleri buradan sağlanır. Nesne bilgileri ve nesnelere erişim bilgileri burada tutulur.

4.  Large Pool (İsteğe Bağlı)
Geniş bellek alanı gerektiren durumlarda(backup ve recovery vb.) kullanılabilir. Backup ve Recovery gibi işlemler için Large Pool  da alan ayrılmaz ise bu işlemleri Shared Pool üzerinden gerçekleştirecektir. Paralel işlemlerde Large Pool daha çok öneme sahiptir.

5. Java Pool
JVM (Java Virtual Machine)’deki verilerin ya da oturumların ait java kodlarının tutulduğu alandır.

6. Streams Pool
Bu yapı çok kullanılmamasına rağmen replikasyon için kullanılır. Streams Pool yerine data guard gibi yapılar daha çok kullanılıyor. Uzak lokasyonlar arasında iletişimi sağlar.

7. Keep Buffer Pool (İsteğe Bağlı)
Veritabanının buffer cache’inden tamamen ayrı bir alandır.  Buffer cache dolduğunda en az kullanılan veri buffer cache'de tutulmaz. Belirlenen sık kullanılan verileri keep buffer pool alanına aktararak uzun süre tutulması sağlanabilir.

8. Recycle Buffer Pool (İsteğe Bağlı)
Daha az kullanılan verileri recycle buffer alanında saklanmasını sağlanabilir.

9. nK Buffer Cache
Veritabanlarında genellikle 8 KB’lık bloklar kullanılır. Ancak bazı özel tablespace’leri için başka blok boyutu belirlemek gerekebilir ve bu amaçla nK buffer cache alanı kullanılır.

PGA (Program Global Area)
Kullanıcıların yapmış olduğu SQL sorgularının sonuçları private area üzerinde saklanır. Oracle veritabanının bu bölgede kullandığı alan ise PGA (Program Global Area) olarak adlandırılır. PGA için ayrılacak belleği hesaplamak için kullanıcı sayısını 40 MB ile çarpmak yeterli olacaktır. PGA’nın kullandığı bazı işlemler vardır.
Oracle PGA İşlem Yapısı Simülasyonu
Kullanıcı İşlemi (User Process)
Oracle veritabanına bir uygulama ile bağlanıldığı anda kullanıcı tarafında açılan işlemin kendisidir.

Veritabanı İşlemi (Database Process)
Oracle tarafından oluşturulan bağlantıdır. Bu işlemlerin bir kısmı arkaplan işlemleri(background process) bir kısmı da sunucu işlemidir.

Sunucu İşlemi (Server Process) 
Kullanıcı Oracle’a bağlanarak bir işlem yaptığında ya da tablolardan veri okumaya çalıştığında ya da çalıştırdığı programdan geriye sonuç döndürmek istediğinde oluşan işlemlerdir. Belleğin son kısmıdır. PGA alanına ayrılan bellek yetmediğinde sıralama ya da verinin düzenlenme işlemi veritabanı tarafında depolama alanında bulunan Temp File’da yapılır.

Diğer taraftan veritabanı çalışma güvenliği, performansı, çoklu kullanıcı desteği vb. gibi Oracle özelliğini kullanabilmemiz için arkaplan işlemleri vardır.

Arkaplan İşlemleri (Background Process) 
Oracle açıldığı andan kapatıldığı zamana kadar geçen süre içerisinde bir takım işlemler veritabanının işlevlerini yapmasını sağlamaktadır. Bu işlemler SGA ve PGA bellek yapılarıyla bir araya gelerek Oracle veritabanı instance olarak bilinen yapıyı oluşturmaktadır. Oracle 11g veritabanı açık ve çalışır haldeyken arka planda mutlaka işlemler çalışıyor olacaktır. 

Database Writer Process (DBWn):
Veritabanında buffer cache içeriğini diske yazan işlemdir. DBWn UPDATE, INSERT, DELETE vb. işlemlerinde değişiklik olan alanları alıp ilgili veritabanının alanlarına yazar. Ancak bu yazma işlemi buffer cache içerisindeki veriler düzenledikten sonra belirli bir sıra ile gerçekleşir. Ayrıca kullanılan yazılım ne kadar hızlı olursa olsun, yapılan değişiklikler, verilerin saklanmakta olduğu datafile dosyalarına anında işlenmezler.

Yazma işlemi sırasıyla SGA içerisinde yer alan Log Buffer alanına ve ardından LGWR işlemiyle Online Redo Log dosyalarına yazılır. Daha sonra DBWn işlemi değişmiş olan veriyi son haliyle datafile dosyalarına yazar. Buffer Cache alanında tablolardan okunup kopyalandıkları haliyle bulunan veri blokları Clean Blocks olarak adlandırılır. Eğer bir tablodaki verilerde değişiklik meydana gelirse, buffer bellekte ilgili tablodaki verilere ait bloklar 'Dirty' hale gelir. Dirty blokların belirli aralıklarla fiziksel disk üzerindeki datafile dosyalarına yazılarak Clean hale getirilmesi  DBWn işleminin görevidir. DBWn işleminin sonundaki 'n' harfi, birden çok Database Writer işleminin aynı anda çalışabildiği içindir. 

DBWn İşlem Simülasyonu
Log Writer Process (LGWR):
Redo Log Buffer’daki verileri Redo Log File’lara yazma işlemini yapar. Veriyi değil sadece log bilgileri yazılır. LGWR 3 dosyadan oluşur, bir dosya dolduktan sonra diğerine yazmaya devam eder. 3 dosya da dolduğunda tekrar ilk dosyanın üzerine yazmaya başlar. Yazma işlemlerini COMMIT yapıldıktan sonra, Redo Log Buffer’lardan biri dolduğunda, DBWn işlemi çalışmadan önce yapar.


LGWR İşlem Simülasyonu

Checkpoint Process (CKPT):
Veritabanındaki tutarlılığın bir göstergesi olan işlemdir. Checkpoint bir tür sistem değiştirme numaralarını saklayan veri birimleridir. Kontrol ve veri dosyalarına yazılır. Sistem bir checkpoint oluşturduğunda kontrol dosyalarının içeriğini ve veri dosyalarının başlıklarını güncelleme işlemini Checkpoint işlemi üstlenir. Diske yazım işlemi yapmaz. Recovery için kritik öneme sahiptir.

System Monitor Process (SMON):
Kullanılmayan geçici segmentleri temizleme işi yapar. Tutarsızlığı önler ve recovery gerekirse yapar. Eğer gerekirse instance başlaması sırasında başka bir işlemin çalışması gibi işlemler SMON tarafından gerçekleştirilir. Oracle 11g başlatılırken SMON işlemi devreye girer, açılış sırasında öncelikle instance başlatılır. Oracle veritabanı açılışında oluşan bu ilk duruma NOMOUNT modu adı verilir. Sonrasında veritabanına ait kontrol dosyasına erişir ve buradaki bilgileri geçerli olup olmadığını denetler. Kontrol dosyası başarılı ise MOUNT moduna geçer. Sonrasında bütün datafile’ları denetler. Redo Log dosyalarının konum ve içeriklerini denetler. Sonrasında OPEN moduna geçer ve hizmete başlar.

Process Monitor Process (PMON):
Kullanıcı oturum açtığında, kullanıcı ve sunucu işlemiyle bağlantı kuracaktır. Kullanıcı eğer kullandığı programı çıkış komutunu ya da SQL Developer’da dosya ve çıkış alanını kullanarak yaptıysa oturum sona erecektir. İstek dışı bir çıkma olursa işte burada PMON devreye girer. PMON tüm kullanıcı oturumlarını denetler ve askıda kalan bir oturum fark ettiğinde o oturuma gider ve sunucu işlemini bitirir. Eğer ki INSERT, UPDATE, DELETE vb. DML sorguları yazılmış fakat COMMIT edilmemişse, PMON COMMIT edilmemiş bütün DML işlemlerini ROLLBACK edecektir. Bütün bu süreç sonunda askıda kalan oturum kapatılır. ROLLBACK gereken durumlarda yapar ve PGA belleği boşaltılır. Ayrıca RDBMS'lerin tümü COMMIT işlemi yapılmış veriler için kayıp yaşanmayacağını garanti eder.

PMON İşlem Simülasyonu
Recover Process (RECO):
Dağınık bir veritabanı yapısı var ise bu yapı ile birlikte çalışır ve riskli transactionların çözümlemesini yapar. Sonrasında ise bu transactionlara uygun kayıtları siler.

Archiver Process (ARCn):

Veritabanında yapılan INSERT, UPDATE ve DELETE vb. işlemler ile yapılan değişiklikler anında datafile’lere yazılmaz. DML komutları ile yapılan değişiklikler ilk olarak SGA içindeki Log Buffer Cache’e kaydedilirler. Sonrasında diskteki Online Redo Log dosyalarına yazılırlar.
Online Redo Log dosyalarının yedeklenemeyeceğini, ancak birçok farklı bir yerde çoğaltılarak garantiye alınabilir.

Redo Log dosyaları 3 adettir. Varsayılan olarak %ORACLE_BASE%/Oradata klasörü altında saklanır. LGWR işlemi ile SGA altındaki Log Buffer’da yer alan veriler ilk Redo Log dosyasından yazmaya başlar ve son dosya dolduğunda ki dosya boyutları varsayılan olarak 50 MB’dir, ilk dosyanın üzerine yazmaya başlar. Bu da ilk dosyadaki verilerin silinmesi anlamına gelir. Yazma işlemi ilk dosyaya geçmeden yedeklenmesi gerekmektedir. Online Redo Log yazma işlemleri bittiği an yedeği bir başka konuma kopyalanır ve bu işleme Archiving (Arşivleme) denir. Bu yedeklenen dosyalar artık Archivelog olarak adlandırılır. Ancak bu işlemlerin yani yedeklemelerin olabilmesi için Oracle 11g’nin ARCHIVELOG modunda çalışması gerekmektedir.

Arşivleme işlemini gerçekleştiren işlem Archiver Process (ARCn)’dir. ARCn aynı anda 9 tane arşivleme işlemi gerçekleşebilir.

ARCn İşlem Simülasyonu


Process Startup Sequence
Veritabanının Windows ortamında çalışmasıyla, Linux ortamında çalışması arasında birçok fark vardır. Oracle 11g R2’ ye kadar Linux de işletim sistemini başlattığımızda bazı önemli servisleri otomatik olarak başlatılmazdı(ASM instance, Listener, DB Instance vb.). Bu servisleri manuel olarak başlatmamız gerekirdi.








Bir sonraki yazımda görüşmek üzere... 



sentiment_satisfied Emoticon