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 o 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...