10 Kasım 2015 Salı

Oracle Database Mimarisi

Oracle Database (Veri Tabanı) :
Oracle “Reletional Database Management System (RDBMS) “ ilişkilendirilmiş veri tabanı yönetim sistemi; büyük miktardaki verilerin saklanabildiği, güvenliğinin sağlanabildiği, hızlı erişim 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 bir sistemdir.
Oracle 11G Server’a bağlantı kurma:
3 şekilde bağlantı kurulabilir.
·         İşletim sistemi komut satırı ile (Windows: command Prompt, Linux: terminal penceresi)
·         Bir uygulama veya tool ile (SQL*plus, SQL Developer gibi programlar)
·         Web browser ile
Kullanıcı SQL*PLUS gibi bir araç veya veri tabanına bağlantı kurmak için kullanılan her hangi bir uygulama ile istemci makinede bir user process başlatılır. Kullanıcı adını, şifresini ve ulaşmak istediği veritabanının ismini girerek OracleSunucusuna bağlanır ve anda sunucu makinede bir server process oluşturulur. Eğer Dedicated Server değil de Shared Server yapısı kullanılıyorsa her user process için ayrı bir server process oluşturulmaz. Her oturum dispatcher (Yönlendirici) tarafından paylaşımlı server process havuzuna yönlendirilerek, user process’in faaliyette olan bir server process ile ilişkilendirilmesi sağlanır. User process isteklerini server process’e iletir. Server process istekleri yerine getirir ve sonucunu user process’e verir. Kullanıcı bağlantıyı kestiğinde server ve user process’ler bitirilir.
Oracle sunucusunda server process dışında, disk Input/Output işlemleri gibi background (arkaplan) işlemlerini gerçekleştiren background process’ler de vardır. Bunlar user process ile doğrudan ilişkili değildirler. 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 DATABASE MİMARİSİ
Oracle Veritabanının yapısını inceleyelim; Oracle veri tabanının kurulumuna geçmeden önce bileşenlerini incelemek daha faydalı olacaktır.
Instance iki process’den oluşur. Memory ve Background. Ve bu işleme Instance denir ki oracle 1 veya 1’den çokinstance’tan oluşabilir.
Veri Tabanına bağlantı kurmak:

Veri tabanına bağlantı kurmak için iki şekil var diye biliriz. Birincisi bir uygulama aracılığıyla bağlantı, ikincisi ise Server’a doğrudan bağlantı. Uygulama aracılığı ile bağlantı dediğimiz kavram şudur, örneğin bir banka ATM’si ile bağlanırken ATM uygulama sunucusuna bağlanırız ve o sunucuda bizi server’a bağlar. Temelde uygulama sunucusu tek bir kullanıcı ile servera bağlantı kurmaktadır ancak biz farklı kullanıcılar ile uygulama sunucusuna bağlanırız. Bağlantı hakları uygulama sunucus ile belirlenir. Doğrudan bağlantı ise developer’ların ya da Admin’lerin bağlandığı gibidir.
DATABASE Nedir:
Bir veya birden fazla instance’ın ve fiziksel dosyaların toplamıdır.
INSTANCE Nedir:
Oracle’ın çalışmasını sağlayan bileşenidir. Ram üzerinde çalışır. Datafile’lara erişmemizi sağlar. Ayrıca RAM üzerinde belirli alanları ayırarak, kullanmamızı sağlar. Çeşitli Background  process (arkaplan işleç)’lerini kullanır ve bu sayede database’in çalışmasını sağlar. Buna göre instance iki bileşenden oluşur. İlki Memory ikincisi ise Background Proess’ler. Oracle Database mimarisini aşağıdaki şemada inceleyebiliriz.

Oracle Database Server yapısını 3 ana başlıkta inceleyebiliriz.
1-      Memory Birimleri (SGA – PGA)
2-      Process Birimleri (BACKGROUND PROCESS)
3-      Storage (Depolama) Birimleri (PHYSICAL FILES)
ORACLE DATABASE’NİN MEMORY (BELLEK) ALTYAPISI:
Oracle RAM üzerinde kullanmak için belirli bir alanı kendine ayırır. Ayrılan bu alanı iki kısımda inceleriz. Bu alanlarSGA (System Global Area) ve PGA (Program Global Area)dır.
Oracle veri tabanının yönetiminin sağlanmasında kullanılan işlemleri ve bellek yapılarını içermektedir. Tüm bellek yapıları veri tabanının oluşturulduğu bilgisayarın RAM’inde yer almaktadır. Bu konu birden fazla kullanıcının aynı anda veri tabanına bağlanıp işlemlerini gerçekleştirmesinin nasıl gerçekleştiğini öğrenmek açısından önemlidir. Oracle, işlemlerini gerçekleştirmek için bellek yapıları oluşturur ve kullanır. Bir oracle veri tabanında 2 adet bellek yapısı bulunmaktadır ve yönetilmektedir. Bu belleklerinde kendi içerisinde bileşenleri bulunmaktadır. Bileşenlerin her birinin farklı amacı var ve farklı amaçlara hizmet etmektedir. Örneğin çalışan program kodlarını ve kullanıcı arasında paylaşılan verileri depolar.
NOT: Bütün verilerimizin durduğu alan disklerimizdir ki buna Storage Area deriz.
Makinemize taktığımız fiziksel bellekten (RAM) Oracle servislerini açtığımızda, bir kısmı veri tabanımız için adreslenir. Bu adreslenen bellek Oracle 11g veri tabanında MEMORY_TARGET parametresi ve üst sınırı daMEMORY_MAX_TARGET parametresi ile kontrol edilir.
Memory iki parçadan oluşur:
1.       SGA : System (Shared) Global Area (Memorynin içteki parçasıdır).
2.       PGA: Program Global Area (Memorynin dıştaki parçasıdır).
System Global Area (SGA) :
SGA, RAM üzerinde ayrılmış belleğin içerisinde kendisine ayırdığı alanın adıdır. Bir başka tanımla SGA bir oracle instance için, veri ve kontrol bilgilerinin tutulduğu, bütün server ve processler tarafından kullanılan paylaşımlı bellek alanıdır.
SGA Bileşenlerini inceleyelim:
1.       Database Buffer Cache (Veritabanı Tamponu) : Temel olarak tanımlamak gerekirse, Database’den query(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 işlemleri yaptıkları zaman, yapılan değişiklikler doğrudan veri tabanına yazılmaz. Yapılan tüm o değişiklikler Buffer Cache üzerinde olur.
Bir select attığımızda Database önce Buffer Cache bakarak sogrularımızı buffer cache üzerinden döndürür. Eğer bu alan boş ise o zaman sorgumuzla ilgili olan tabloları datafileden buffer cache’e kopyalayarak sorgu sonucunu bize döndürür. Bu işlem sırasında datafile üzerinde sorgumuzla ilgili kaç tablo varsa hepsini kopyalayacaktır. Bu esnada disk yazma ve okuma hızlarına bağlı olarak performans kaybı yaşayabiliriz.
NOT: hiçbir database satır bazında taşıma yapmaz.
Bu şekilde Oracle verilere erişimi hızlı bir hale getirmiştir. Çünkü disklerin belirli bir okuma ve yazma hızı vardır. Ki bu okuma yazma hızları sorguların bize dönüşü açısından önemlidir. Tabiki memory’ninde bir kapasitesi var, dolabilir ve dolacaktırda. Dolduğu takdirde Database 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 ilerde detaylı olarak bahsedeceğim undo tablespaceine atar. Ve diğer kullanıcıların sorugları undoüzerinden döner.
Buffer Cache içerisinde segment (tablo ve indexler)’ler bulunmaktadır. Ayrıca mümkün olduğu kadar index ve tablolarımızı memory’de 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’lenen veriler LOG BUFFER’a yazılır.
2.       Redo Log Buffer (Log Tamponu) : Instance çöktüğünde ya da bir sorun olduğunda recover işlemi için gerekli olan bilgiler burada saklanır. Belirli bir süre sonra fiziksel olarak diskte saklanmak için redolog 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 (giriş-çıkış yaparlar), bu alana yazılan Veriler örneğin, bir tabloda değiştirilen bir satırın tamamı değildir. Sadece değişim verisi (delta) log belleğine yazılırlar. 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ırlar ve ROLBACK komutu çalışırsa UNDO tablolarından geriye yani eski haline döner. İlerleyen konularda undo ile ilgili detaylı bilgiler vereceğim.
COMMIT komutunun çalıştırılmasından sonra LGWR (Logwriter –Log Yazıcıbackground process’i işleme girer ve bufferdaki bu değişikliği Online Redo Log dosyasına yazar. Böylece veri tabanında gerçekleştirilmiş olan değişiklikler kalıcı olmuş olur.
3.       Shared Pool (Paylaşım Havuzu) : Database kullanıcıları tarafından paylaşılan çeşitli yapıların tutulduğu alandır.Data dictionarySql Query sonuçlarıPl/Sql block sonuçları, paralel çalışan işlemler için gerekli olan bellek shared pool içinde barındırılır. Kendi içinde alt bileşenlere ayrılır.
Ø  Library Cache (Kitaplık Tamponu): Database bir sorguyu getirmek için birden çok metod üretir. En kısa sürede ve ne az güç tüketimi hangi metod ile gerçekleşecek ise onu seçer. Seçtğ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 (uygulama) planları saklanır “NOT: Executionu bir yol haritası olrak düşünebiliriz”. Database bunu biz farkında olmaksızın kendi gerçekleştirir.
Alternatifler çoğaldığında yani tablo yapısıyla alakalı bir değişiklik olduğunda execution (ugulama) planları yeniden yapılandırılıp Library Cache’in içinde yeniden planlanır.
Örnek olarak;
Biz bir yere gitmek istediğimizde ki bu yere iki farklı vasıta kullanmamız gerektiğini düşünürsek. Ayrıca gideceğimiz yerde birde helikopter pisti olduğunu da düşünürsek. Burada bir plan yapmak gerekecek. En ucuz ve en kısa yolu seçeriz. İşte bu Library Cache bir örnek olabilir.
Ø  Data Dictionary Cache (Veri Sözlük Tamponu) : En son erişilen, eriştiğimiz tanımlamaların bellek alanıdır. Oracle bir objelere erişirken tanımlamaya ihtiyaç duyar ve bu tanımlama Data Dictionary Cache’te tutulur. Data Dictionary Cache veri tabanının metadatasını tutar. Kullanıcıların yetki ve bağlantı bilgilerinin kontrolleri buradan sağlanır. Obje bilgileri ve objelere erişim bilgileri burada tutulur. Biz bir tabloda kaç satır olduğunu, hatta o tablonun bilgilerini data dictionary cacheten öğreniriz.
4.       Large Pool (Geniş Havuz): Geniş bellek alanı gerektiren durumlarda kullanılabilir, backup ve recover gibi işlemlerde. Opsiyoneldir, çünkü çalıştığımız veri tabanında backup ve recovery yoksa large pool gerek yoktur. Backup ve Recover gibi işlemler için Large Pool ayırmaz isek bu işlemleri Shared Pool üzerinden gerçekleştirecektir. Paralel işlemlerde large pool önem teşkil eder. Shared mantığı ile çalışılıyor ise, bağlantılara ait olan bilgilere erişim large pool üzerinden gerçekleşir.
5.       Java Pool (Java Havuzu): JVM (Java Virtual Machine)’deki verilerin ya da Sessionlara ait java kodlarının tutulduğu alandır.
6.       Streams Pool: Kullanılan bir yapı değildir. Replikasyon için kullanılır. Streems pool yerine data guard gibi yapılar kullanılıyor. Uzak lokasyonlar arasında iletişimi sağlar.
7.       Keep Buffer Pool: Veri tabanının buffer cacheinden ayrı bi alandır. Buffer cacheteki mantıkla aynıdır. Hatırlayalım buffer cache dolduğunda en ez kullanılan veri dışarı atılmaktaydı. Belirleyeceğimiz sık kullanılan verileri keep buffer pool alanına çekeriz ve mümkün olduğu kadar uzun tutmasını sağlayabiliriz. Opsiyoneldir.
8.       Recycle buffer pool: Az kullanılan verileri recycle buffer alanına çekerek burada saklanmasını sağlayabiliriz. Opsiyoneldir.
9.       nK Buffer Cache: Bizler veri tabanlarımızda 8kblık bloklar kullanıırız. Ancak bazı özel tablespace’lerimizi için başka blok boyutu belirleriz ve bu amaçla nk buffer cache alanını kullanırız.
Program Global Area  PGA : 
Kısa bir tanım yapmak gerekirse, kullanıcıların yapmış olduğu SQL sorgularının sonuçları private area üzerinde saklanır. Oracle veri tabanının bu bölgede kullandığı alan ise PGA (Program Global Area) olarak adlandırılır. PGAiç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ıprocesslar var. Şimdi bunları inceleyelim.
Çalışan bir Oracle veri tabanının PGA yapısını görüntülemek istersek aşağıdaki sorguyu çalıştırmak yeterlidir.
                Select * From V$PGASTAT;
PGA Process Yapısı:
Process’ler, UserDatabase ve Daemon/Aplication processes olmak üzere üçe ayrılır.

User Process:
Oracle veri tabanına bir tool ya da bir uygulama ile bağlanıldığı anda kullanıcı tarafında açılan processin kendisidir.
Database Process:
Oracle tarafından oluşturulan bağlantıdır. Bu processlerin bir kısmı Background Process bir kısmı da Server Process’lerdir.
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ığı program sonuç dönmek istediğinde server process’ler oluşturulur.
Memory’nin son kısmıdır, ne zaman bir sorgu atarsak ve o sorguyu bir düzen dahilinde görmek istersek memory tarafında bu işlem PGA (Program Global Area) tarafından gerçekleştirilir.
PGA alanına ayrılan bellek yetmediğinde sıralama ya da verinin düzenlenme işlemi database tarafında storage alanında bulunan Temp File’ında yapılır.
Diğer taraftan Database çalışma güvenliği, performansı, multi user desteği vs. gibi oracle özelliğini kullanabilmemiz için Background Processler vardır.
Background Process’ler: Oracle açıldığı andan kapatıldığı zamana kadar ki süre içerisinde bir takım process’ler veritabanının işlevlerini yapmasını sağlamaktadır. Bu processler SGA ve PGA bellek yapılarıyla bir araya gelerek Oracle veritabanı instance olarak bilinen yapıyı oluşturmaktalar. Oracle 11G veri tabanı açık ve çalışıyorsa arka planda mutlaka process’ler çalışıyor olacaktır. Windows işletim sisteminde process olarak sadece oracle.exe olarak görünmektedir. Ancak diğer işletim sistemlerinde bir den çok process görünmektedir ve Windows hariç diğer bütün işletim sistemlerinde birkaç processi kapatabiliriz ancak windowsta kapatılamaz. Background Process’lerini inceleyelim;
Database Writer Process (DBWn):
Database Buffer Cache içeriğini diske yazan process’dir. DBWn update, insert, delete gibi işlemlerle değişiklik olan alanları alıp ilgili database alanlarına yazar. Ancak bu yazma işlemi buffer 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 Process’i değişmiş olan veriyi son haliyle Datafiledosyalarına yazar.
NOT: Oracle Buffer Cache alanında tablolardan okunup kopyalandıkları haliyle bulunan veri blokları Clean (temiz) Bloklar olarak adlandırılır. Eğer bir tablodaki verilerde değişiklik meydana gelirse, buffer memoryde ilgili tablodaki verilere ait bloklar dirty hale gelirler. Dirty blokların belirli aralıklarla fiziksel disk üzerindeki datafile dosyalarına yazılarak clean hale getirilmesi görevi DBWn Process’ine aittir.
NOT: DBWn process’inin sonundaki n harfi, birden çok Database Writer Process’inin aynı anda çalışabileceğine işaret eder. UNIX, Linux altında ps –f | grep oracle komutunu kullanarak process isimlerini bulabiliriz. İsimler 1-9, a-j arasında olabilir. DBW1, DBWA,DBW2 gibi. Ancak kaç tane process çalışırsa çalışsın windowsta sadeceoracle.exe çalışır görünecektir.

Log Writer Process (LGWR):
Redo Log Buffer’daki verileri Redo Log File’lara yazar. Verinin kendisini değil sadece log bilgilerini yazar. 3 dosyadan oluşur, bir dosya dolduktan sonra diğerine yazmaya devam eder. 3. Dosya da dolduktan sonra 1. Dosyanın üzerine yazmaya başlar. Yazma işlemlerini Commit yapıldıktan sonra, Redo Log Buffer’lardan biri dolduğunda, DBWn process’i çalışmadan önce yapar.
Checkpoint Process (CKPT):

Databasedeki tutarlılığın göstergesi olan process’dir. Checkpoint bir tür sistem değiştirme numaraları saklayan veri birimleridir. Control File’lere ve Data File’lere yazılır. System bir checkpointoluşturduğunda control file’lerin içeriğini ve Data File headerların güncelleme işlemini Checkpoint process üstlenir. Diske yazım işlemi yapmaz, Receover için kritik öneme sahiptir.
System Monitor Process (SMON):

Kullanılmayan geçici segmentleri temizleme işi yapar. Tutarsızlığı önler ve receovery gerekirse yapar. Eğer gerekirse instance başlamsı sırsında başka bir processin çalışması gibi işlemler SMON tarafından gerçekleştirilir. Oracle 11g başlatılırken SMON Process’i devreye girer, açılış sırasında öncelikle instancebaşlatılır (SGA-PGA memory alanları ve background process’leriOracle veritabanı açılışında oluşan bu ilk duruma NOMOUNT modu denmektedir. Sonrasında veritabanına ait control file dosyasına erişir ve buradaki bilgileri geçerli olup olmadığını denetler. Control file kontrolü başarılı ise MOUNT moduna geçer. Sonrasında bütün datafile’ları var olup olmadığını denetler. Redo Log dosyalarının konum ve içeriklerini denetler. Ve son olarak OPEN moduna gaçer ve hizmete başlar.
Process Monitor Process (PMON):
User Session açtığında, user process ve server process bir bağlantı kuracaktır. Kullanıcı eğer kullandığı programı çıkış komutunu ya da sql developerda dosya ve çıkış alanını kullanarak yaptıysa user session sona erecektir.
Peki istek dışı bir çıkma olursa yani forced quit durumu olursa ne olacak? İşte burada PMON devreye gerer. PMON tüm kullanıcı oturumlarını denetler ve askıda kalan bir session farkettiğinde o session’a aitserver process’i bitirir. Eğer ki INSERT, UPDATE, DELETE gibi DML sorguları yazılmış fakat COMMITedilmemişse, PMON commit edimemiş bütün DML işlemlerini ROLLBACK edecektir. Bütün bu süreç sonunda askıda kalan user sessionları kapatılır, ROLLBACK gereken durumlarda ROLLBACK eder ve PGAbelleği boşaltılır.
NOT: RDBWS (Relational Database Management System – İlişkisel Veri Tabanı Yönetim Sistemi)’lerin tümüCommit işlemi yapılmış veriler için asla kaybolmayacağına garanti eder.

Recover Process (RECO):


Dağınık bir database yapısı var ise bu yapı ile birlikte çalışır ve riskli transaction(işlem)ların çözümleme- sini yapar. Sonrsında ise bu transaction(işlem)lara uygun kayıtları siler.
Archiver Process (ARCn):

Veri tabanında yapılan insertupdate ve delete işlemleri ile yapılan değişiklikler anında datafile’lere yazılmadığından bahsetmiştik. 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 tanedir. Varsayılan olarak %ORACLE_BASE%\Oradata klasörü altında saklanır. LGWR işlemi ile SGA altındaki Log Bufferda yer alan veriler 1’nci Redo Log Dosyasından yazmaya başlar, 3’ncü dosya dolduğunda ki dosya boyutları varsayılan olarak 50 mb’dir, 1’nci dosyanın üzerine yazmaya başlar. Buda 1’nci dosyadaki verilerin silinmesi anlamına gelir ki biz bunu istemeyiz. Yazma işlemi 1’nci dosyaya geçmeden yedeklenmesi gerekmektedir. Online Redo Log yazılma işlemleri biter bitmez yedeği bir başka konuma kopyalanır bu işlem Archiving (Arşivleme) işlemidir. 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 process Archiver Process (ARCn)’dir. ARCn’nin sonundaki ne aynı anda birden fazla arşivleme işleminin yapılacağı anlamına gelir ki, aynı anda 9 tane arşivleme işlemi gerçekleşebilir
Process Startup Sequence:
11G R2 de olan bir özelliktir, önceki sürümlerinde bulunmamakta. Databasa’in Windows ile çalışmasıyla, Linux’ta çalışması anlamında birçok fark vardır. Oracle 11G R2 sistemlere kadar Linux bir işletim sistemi başlattığımızda bazı önemli servisleri start etmezdi. ASM instanceListenerDB Instance gibi. Bu servisleri kendimiz manuel olarak start etmemiz gerekirdi. Bunun için Grid Insfrasttucture yüklemiş olmamız gerekmekte.
Daemon/Aplication Process: Kendi içinde de ikiye ayrılır.
Network Listeners: uzaktan gelen bağlantıları dinleyecek olan bağlantıları dinler, ve yetki kontrolü yaparak giriş – çıkışlara izin verir. Örneğin uzak bir makineden veri tabanına bağlanmak istediğimizde bu serveris devreye girer.
Grid Infrastructure daemons: Grid olmayan yapılarda veri tabanı yenden başlatıldığında yada kapatılıp açıldığındaASM, Listener gibi servisleri manuel olarak start etmemiz gerekmekteydi, grid yapısı kurulu olan veri tabanlarında bu servisler, high availability servisi tarafından otomatik olarak açılmaktadır.
STORAGE Yapısı :
Oracle 11G Veritabanında RAM üzerinde SGA ve PGA alanlarının çalıştığından bahsetmiştik. Veritabanını kapattığımızda SGA ve PGA alanları disklere kaydedilir. Oracle diskler üzerinde de bu SGA ve PGAverilerini ilgili dosyalara yazar.
Oracle veri tabanı mantıksal ve fiziksel olmak üzere iki yapıdan oluşur.

Veri Tabanının Mantıksal Yapısı:
Mantıksal yapılar tabiki anlaşılabileceği gibi fiziksel yapılar içierisinde bulunur. Oracle veri tabanı yönetilebilmesini kolaylaştırmak amacıyla mantıksal olarak daha küçük parçalara ayrılmıştır. Ve her parça bir sonrakini oluşturur. Mantıksal yapıda bulunan parçalar, tablespace, segment, extent ve blocklardan ve schema(şema)lardan oluşmaktadır. Blocklar extentleri, extentler segmentleri ve segmentler tablespaceleri oluşturmaktadır. Şimdi bu kavramları tek tek inceleyelim.
1.       Tablespace: Tablespace için mantıksal yapıların tamamını gruplandıran mantıksal bir depolama alanıdır tanımlamasını yapabiliriz. Segmentlerin birleşmesi ile oluşur. Bir Oracle Databasede içerisinde objeler bulunan en az iki tane tablespace bulunmaktadır. Tablespaceler açık ya da kapalı olabilir. Kapalı olduğunda içerisindeki bilgilere erişilemeyecektir. Bütün Tablespaceler ayrıca en az bir datafilee sahiptir. Fiziksel olarakdatafilemantıksal olarak tablespace ismini almaktadır diyebiliriz. Buna göre datafilelerin toplam boyututabalespacein boyutunu, tablespacelerin boyutu ise bize databasein toplam boyutunu verir.
Oracle’da olmazsa olmaz iki tane tablespace var. system ve sysauxSystem tablespaceinde data dictionarytutulmaktadır. Ve kesin kez bir kullanıcı objesinin oluşturulması için kullanılmamalıdır.
2.       Schema (Şema) objeleri:
İçerisinde tablolar, viewlar, indexler ve kümeler bulunmaktadır. Kullanıcı tarafından kullanılır ve kullanıcı adı ile bilirir. HR kullanıcısının scheması HRdır. Doğrudan veri ile bağlantılıdır. Ancak schema ile tablespace arasında bir bağlantı yoktur. Aynı tablespace içerisnde birden fazla schemaya ait veri olabileceği gibi, aynı schemadaki objler farklı tablespacede de olabilir. Tablo, view, prosedure, fonksiyon, paket, trigger, index … vs gibi mantıksal database objelerinin tutulduğu, yani database ‘e ait bir yapıdır.
Schema Objeleri:
a.       Table (Tablo): En temel veri saklama yeridir. Kullanıcılar tarafından oluşturulan tüm veriyi barındırırlar.
b.      View: Bir tabloya erişimi kolaylaştırmak için kullanılırlar. İçerisinde veri bulunmaz.
c.       Indexler: Verilere erişim performansını arttırmak için kullanılırlar. Tablolara direkt erişimi sağlamak için kullanılırlar. Indexler bir veya daha çok tablo ve sütun üzerinde oluşturulabilirler.
d.      Cluster (Kümeler): Fiziksel olarak birlikte saklanan bir veya birden fazla tablonun oluşturduğu bruba verilen isimdir. Bu tablolar ortak kolonlar içerebiliric ve genelde birlikte kullanılırlar. Birbiriyle ilişkili sastırlar fiziksel olarak bir arada saklandığı için veriye erişimde performans sağlar.
3.       Data Blokları:
Oracle Databaseinin verileri data bloklarında saklanır. Bir data bloğu en az 8 KB boyutunda olmaktadır, en fazla ise 64MB boyutunda olmaktadır. Oluşturulan tablespace için datablok sayısı belirlenebilir. Database data bloklarını ayırabileceği gibi, kullanabilirde.
4.       Extent:
Extentler birbirlerini takip eden Data blocklar ‘dan meydan gelir. en düşük boyutu 64 KB’dir.
5.       Segments:
Segmentlerde birbirlerini takip eden extentlerden oluşur. Bir segment; veri segmenti İndex segmenti, undo segmetni yada temporary segment olabilir.
Data Segment: Bir tablo oluşturulur oluşturulmaz daha veri girmeden alanı ayrılan yapıdır. Doldugunda otomatik olarak extendler bu data segment için ayrılır.
Index Segment: Her bir index ‘in verisi için oluşturulur.
Temproray Segment: Bir SQL çalıştırıldığında gerek duyulursa Oracle tarafından kullanılır. İşlem bittiğinde bu alan sistemin kullanımı için kullanılır.
Rollback Segment: Rollback işlemlerinde kullanılır.
Tablespace ve Data File Oluşumu: Resimi incelediğimizde in küçükyapımızı extentleri oluşturan blokların olduğunu, extentlerin ise segmentleri oluşturduğunu görmek- teyiz.
Veri Tabanının Fiziksel Yapısı:
Fziksel disk üzerinde bulunan ve işletim sisteminde gördüğümüz dosylardır. Birden fazla datafile, birden fazlalogfile ve birden fazla controlfileden oluşabilir. Şimdi fiziksel yapımızın içerisinde bulunan bu dosyaları tek tek inceleyelim;

1.       Control Files (Kontrol Dosyaları): Control file içerisinde Online Redo Log dosyalarının, Data Fileların veArchive Log dosylarının nerde tutulduğunun bilgisi ve Checkpoint işlemlerine ait bilgiler bulunur. RMAN (Recovery Manager) ile yedek alındıysa, yedekleme bilgileri gibi neyin nerede olduğuna dair veri tabanı bilgileri bulunmaktadır. Ayrıca güncel SCN (System Change Number) de control file içerisinde bulunmaktadır. Database ismi, database archivelog modda çalşıyorsa, archivelog dosyalarının bilgisi gibi bütün fiziksel yapıya ait bilgiler control filede bulunmaktadır. Veri tabanı açık durumdaysa Control File kopyalanamaz. EğerControl File herhangi bir sebepten dolayı bozulur ya da silinirse, Veri Tabanı kapanır ve çalışmaz. Bu yüzden yedek alınmalıdır. Yedekleme işlemi Recovery Manager ile yapılabilmektedir. 3. Party bir yazılım ile de alınabilir ancak bütün 3. Parti yedekleme yazılımları arka planda RMAN kullanmak zorundadırlar. Control File’lar binary değerdedir ve üzerlerinde değişiklik yapılamaz.
Veri tabanında eğer FRA oluşturulmuşsa 2 tane control file bulunmaktadır. Biri +DATA diğeri +FRA içerisinde dir. Ancak biz bu sayıyı istersek yükseltebiliriz. Bunu yapmak istersek bilinmesi gereken başka bir lokasyonda tutulursa daha güvenli olacak ve başka bir lokoasyonda control file yedeğini saklamış olacağız. Eğer +DATAiçerisindeki control file dosyasını kaybedersek +FRA da olmasına rağmen veri tabanı çalışmayacaktır. Bu durumda SPFile içerisinden +DATA ya ait bilgi silinir ya da +FRA daki control file diğeriyle birebir aynı olduğunda +DATA altına kopyalayarak eklenebilir. SPFile üzerinde değişikliğin nasıl olacağı bilgisi SPFilekonusunda inceleyeceğiz. İstersek enterprise manager üzerindende değiştirilebilir ki enterprise managerkonusunuda inceleyeceğiz, istersek RMAN ile +FRA’dan dönüş yapabiliriz. RMAN ile ilgili konuyu ilerki konularda detaylı olarak inceleyeceğiz.
Control File 3 dosyadan oluşur. Varsayılan olarak konumu %ORACLE_HOME%\oradata altındadır. DBA olarak bizler farklı fiziksel ortamlarda mutlaka yedeğini bulundurmalıyız.
Geçerli Control File’leri görüntülemek için,
Select name
From V$CONTROLFILE;
2.       Data Files (Veri Dosyaları): Kullanıcı ve uygulamalara ait verilerin tutulduğu dosyalardır. Bizim için önemli olan 3 tane data file kurulumla beraber gelmektedir. System, undo, sysaux datafileleridir. Ayrıca temp datafile’i de kurulumla beraber gelmektedir ve bu da bizim için önemlidir. Birde users datafilei gelecektir.
Ø  Sysaux: enterprise manager bu dosya ile çalışır. Enterprise manager AVR raporları burada saklanır. Enterprise manager repository’nin tutulduğu yer bu tablespace’dir.
Ø  System: içerisinde Data Dictionary bulunmaktadır.
Ø  Temp: geçici olarak oluşturduğumuz tablolar burada oluşturulur. create temporary table komutuyla bir tablo oluşturduğumuzda yapılmak istenen işlemler yapıldıktan sonra ilk commit ya da rollbackyapıldığında bu tablo silinecektir. Raporlama ağırlıklı sistemlerde analizler gerçekleştirirken veri düzenli bir şekilde (group by gibi) gelmelidir. Server processin aldığı kaynak (PGA) içerisinde sourt area bulunmakta, sourt alanında düzenleme işlemi yapılır ki veri çok büyük olduğunda o alan yetmez. Alanın yetmediği durumlarda o düzenleme işlemini temp üzerinde yapar.
Ø  Undo: Yapılan update, delete, insert işlemleri ile girilen işlemlerin eski halleri burada tutulur. İlerki konularda daha detaylı değineceğiz.
Ø  Users: bu datafile kurulumla gelir ve varsayılan tablespace olarak atanır.
Fiziksel ve mantıksal alanlar arasında kesin bir ayrım yapar.
a.       Mantıksal Alanlar: Mantıksal alanlar tablo, index, view, synonym, PL/SQL prosedürü gibi veri tabanı nesneleri mantıksal alan içerisinde yer alır ve diğer ismi segment’tir.
b.      Fiziksel Alanda: Data File’lar tutulur. Yani işletim sistemi dosyalarının ve oracle dosyalarının bulunduğu alanlar yani disklerimizdir.
Mantıksal objelerle, disklerdeki dosyaları ortak bir noktada buluşturmak için TABLESPACE adı verilen bir yapı kullanılır. Tablespace segmentleri barındırır. Her tablespace disk üzerinde en az bir DataFile ile temsil edilir.
SEGMENT ADI
TABLESPACE ADI
DİSK DOSYASI
Tablo 1
Users
Users01.dbf
Tablo2
Users
Users01.dbf
İndex1
Users
Users01.bdf
İndex2
Users
Users01.bdf
Employees
Example
Example01.bdf
Departments
Example
Example01.bdf
Job_hisitory
Example
Example01.bdf
a.       Segment adı             : Sütununda adı bulunan tablo, index gibi nesnelerin hepsi birer segment’tir ve Oracle için birer mantıksal öğedir.
b.      Tablespace Adı        : segmentlerin sahip olduğu tablespace adını göstermekte
c.       Disk Dosyası              : her bir tablespace’in disk üzerinde yer alan dosya adını gösterir.
 Oraclede kullanılan bazı datafile dosyalarını görüntülemek için bazı view’ler kullanılır. Bunlardan aşağıdaki örnek datafile’ın diskteki konumunu ve dosya adını bize bildirir.
                                               select name
                                               from V$DATAFILE;
Database Admin olarak datafile’lerin durumlarını günlük olarak kontrol etmemiz gerekebilir. Bu amaçlaV$DATAFILE nesnesinin STATUS sütununda datafile’ın durumunu öğrenebiliriz.
                                               select name, STATUS
                                               from V$DATAFILE;
Datafile’lar ONLINE olmalıdır. Eğer Status kısmında RECOVER yazarsa, o datafile’ın recovery işlemi olacaktır. Ayrıca SYSTEM tablespace’i tarafından kullanılan bütün datafile’lerin STATUS sütunundaSYSTEM yazısını görürüz. ENABLE sütunu bize salt okunur ya da okuma/yazma iznine sahip olup olmadığını gösterir. Eğer yedekleme işlemini RMAN (Recovery Manager) ile yapmayacaksak datafile’ları tek tek yedekleyebiliriz ancak yedekleme işlemi yaparken datafile’ın bulunduğu TABLESPACE nesnesinin durumunu OFFLINE yapmamız gereklidir.
                                               ALTER TABLESPACE EXAMPLE OFFLINE;
Yukarıdaki kodlamada example tablespacesini offline moda çektik. Offline moddan çıkarmak için offline yazan yere online yazmak gerekecek.
DBA_DATA_FILES DataFile dosyasının hangi TABLESPACE için kullanıldığı gibi bilgileri bize sunar.
                                               SELECT FILE_NAME, TABLESPACE_NAME
                                               FROM DBA_DATA_FILES;
3.       Online Redo Log Files: Instance recovery dosyalarının tutulduğu dosyalardır. Eğer database çökerse, instance database’i Online Redo Log File’den recovery edebilir. FRA kurulu bir sistemde toplamda 6 tane dosya vardır. Ve 3 tane redo log grubu olur.
Database üzerindeki tablolarda değişiklikler yapılabilir, viewlarupdateinsertdelete işlemleri yapılabilir. Ancak database bu işlemlerin hepsini RAM üzerinde LOG BUFFER alanına yazar, diske hemen yazmaz. Ancak kullanıcı işlemini yaparyapmaz yani bir update işlemi yapıldığını düşünelim, bu işlem yapılır yapılmazOnline Redo Log File’a yazılır. Yazma işleminden sorumlu olan LGWR (Log Writer Process)’dır. Kullanıcı eğer işlemini yaparken COMMIT yapmış ise bu işlem gerçek zamanlı yapılır. SGA Log Buffer alanında ne kadar veri var ise hepsi Online Redo Log File’a yazılır. Online Redo Log File’ler Database çalışır durumdayken kopyalayarak yedeklenemezler. Ancak arşivlenerek, arşivlenmiş Online Redo Log File’ı kopyalayarak yedekleyebiliriz. Ancak LGWR yazma işleminde iken yedekleme yapamaz arşivleyemeyiz. Güvenlik olarak Online Redo Log Dosyalarını birden fazla yerde bulundurmak iyi olacaktır. Redo Log Dosyalarından biri veya birkaçı zarar görse bile ControlFile dosyasından farklı olarak Database çalışmasına devam eder. Hepsi zarar görürse devam etmez. Online Redo Log Dosyalarınında durumunu V$LOG ile görüntüleyebiliriz. STATUS sütununda kullanımda olup olmadığını öğrenebiliriz. Eğer durumu CURRENT ise LGWR işlemi dosyaya yazmakta olduğunu anlarız. Durumu ACTIVE ise LGWR işlemi yazmayı bitirmiş ancak veritabanının kurtarılması gerekirse o dosyaya ihtiyaç olduğunu bize bildirir. Durumu INACTIVE ise LGWR işlemi tarafından kullanılıyor olduğu anlaşılmaktadır. GROUP sütunu bize dosyanın ait olduğu grup numarasını bildirir. BYTES ise disk üzerinde ne kadar alan kapladığını bildirir. Archived sütununda YESyazarsa arşivlenmiş durumda olduğu anlaşılır, eğer arşivleme modunda çalışmıyorsa NO yazacaktır.
                                               SELECT GROUP#, BYTES, STATUS, ARCHIVED
                                               FROUM V$LOG
4.       Paramater File: Oracle instance yapılandırma bilgileri burada tutulur. Ayrıca içerisinde bütün dosyaların bilgisi ve control file’ın bilgisi var. “SPFILE” ve “PFILE” dosya adıdır.
5.       Password File: Database bağlanmak istediğimizde SYSDBASYS gibi kullanıcıların şifrsinin doğruluğu bu dosyadan kontrol edilir ve girişe onay verilir. Diğer kullanıcıların bilgileri data dictionary içerisinde şifrelenmiş olarak saklanır.
6.       Backup File: Database’i recover yapmak için kullanılan alandır. Datafile’ların birebir kopyalarıdır.
7.       Archived Redo Log Files: Online Redo Log File’larının birebir yedeğidir. Bir redolog dosyası dolduğu anda başka bir dizine yedeği alınır.
8.       Trace amd Alert Files: Server ve background processlerin kayıtlarının tutulduğu, hataların yazıldığı dosyalardır. Bu dosyalardan faydalanarak processler izlenebilir, sessionlar görülebilir. Bir DBA olarak her durumda bakıp bilgi alabileceğimiz yerdir.
Database’in açılma senaryosu:
Nomount, Mount, OPEN
v  Database Nomount olması için memory alagasyonu sağlanır background işlemleri start olur,  instancestart olur, SPFILE açılır ve içi okunur.
v  SPFILE içerisinde temel database parametreleri var, ControlFile parametreleri ve Memory bilgileri SPFILEiçerisinde tutulur.
v  SPFILE ile ilgili bir sorun oluşursa Nomount ta kalır. Eğer açılmazsa bu aşamada Nomount işlemine geri döneceğiz.
v  DataFile’lerdeRedolog File’lerde bir problem oluşursa Mount aşamasında kalır.
Ve unutulmamalı ki bir sorun olsun ya da olmasın Trace and Alert Log File’leri mutlaka kontrol etmeliyiz.


Mustafa Temel
Kaynak 
Oracle Eğitimi ve Kitapçıkları


Hiç yorum yok:

Yorum Gönder