Merhaba arkadaşlar bu yazımda Oracle ‘ın üzerine kurulu olduğu yapı fiziksel yapı ve mantıksal yapıyı anlatmaya çalışacağım.

Oracle mantıksal yapıyı ve fiziksel yapıyı birbirinden ayrı şekilde yönetir.Bende bu yazımda bu nedenle mantıksal yapıyı ve fiziksel yapıyı ayrı ayrı anlatmaya çalışacağım.

NOT : Mantıksal yapı ile fiziksel dosyalar arasında ki bağlantı bilgilerini saklamak için SYSTEM schema‘sının bir parçası olan Data Dictionary bölgesi kullanılır.Böylece hangi tablonun hangi tablespace içinde yer aldığını ve disk üzerinde bu tablespace için hangi dosyanın var olduğunu bilir.

ORACLE FİZİKSEL YAPI

Veritabanı tablolarında ki verileri ve veritabanına ait gerekli yapılandırma dosyalarını saklamak üzere fiziksel diskler üzerinde depolanan dosyalar kullanılır.

Fiziksel yapıyı oluşturan bileşenler ;

  • Data files
  • Control files
  • Redo log files
  • Archive log files
  • Parameter files
  • Alert log ve Trace log files
  • Backup files

DATA FILES

Bu dosyalar  veritabanında ki tüm verilerin saklandığı dosyalardır.Oracle ‘da en az bir olmak üzere bir veya daha fazla datafile bulunabilir.

Her bir data file sadece bir tane tablespace ile ilişkilendirilebilir ama bir tablespace birden fazla data file içerebilir.

Data file ‘lerin gerektiginde kendini otamatikman büyütme(extendlerden dolayı) özelliği vardır.

Datafile ‘ın çalışma mantığını anlatmak gerkirse örn. Bir tablodan veri çekmek istediğimizde bu veri hafızada aranır önce hafızada yoksa ise gider datafile ‘den çekilir.Ve veriler üzerinde değişiklik yapıldığında ise hemen datafile ‘a bu değişiklikler yansıtılmaz.I/O miktarını düşük tutmak için bu işlem Database Writer Process adı verilen bir arkaplan prosesi tarafından karar verilir.

Çalışmakta olan data file’lerle ilgili bilgiye aşağıda ki view ‘den ulaşabiliriz.

* SQL> Select * from v$datafile ;

Data file dosyasının hangi table space için kullanıldığı bilgisi de dahil olmak üzere bir çok bilgiye de aşağıda ki view ‘den  de ulaşabiliriz.

* SQL> Select * from DBA_DATA_FILES ;

CONTROL FILES

Kullanılmakta olan database ‘in ismini,oluşturuldugu tarihi ,data file dosyalarının ,redo log dosyalarının ,archivelog dosyalarının disk üzerinde ki konumlarını ,isimlerini içinde barındırır.

Oracle veritabanın çalışması için en az bir adet Control file dosyasına ihtiyaç vardır bu yüzden de varolan control files ‘ımızın başına birşey gelme ihtimaline karşı her zaman mutlaka yedegini bulundurmalıyız  çünkü controlfile ‘mize zarar gelirse Oracle hemen kapanır ve eger elinizde ki tek control file dosyasını kaybetmişseniz açamassınız.Oracle kurulurken zaten 3 adet control file dosyası oluşturuyo ama 3 ‘ünün de yeri aynıdır bu yüzden de varolan control filelerimizi farklı disklere taşımalıyız ve riski minimize etmeliyiz.

Varolan Control filerimizle ilgili bilgiye aşagıda ki view ‘den ulaşabiliriz.

* SQL> Select * from v$controlfile ;

NOT : Oracle Instance başladıgında bilgiler control file dosyasından okunur , yeni data file ya da redo log dosyası oluşturuldugu zaman da Control file otamatikman güncellenir.

REDO LOG FILES

Bu dosyalara verilerde yapılan her türlü degişiklik kaydedilir ve eger veri dosyalarına yapılan degişiklikler yazılmadan sistem de bir hata oluşursa bu durumda redo log dosyalarına yazılan veriler kullanılarak yapılan degişikliklerin kaybolması önlenmiş olur.

Oracle veritanında en az iki adet(Oracle ‘da 2 ’den fazla redo log dosyası oluşturabiliriz) redo log dosyası olmak zorundadır.Çünkü Oracle bu dosyalara yazarken dairesel bir şekilde yazar .Mesela iki tane redo log dosyasının oldugunu varsayarsak birinci redo log dosyası dolunca ikinciye ,ikinci redo log dosyası olunca tekrardan birinci redo log dosyasına yazarak dairesel bir şekilde devam eder.

Control file dosyalarından farklı olarak redo log dosyalarından biri veya bir kaçı zarar görse bile ,Oracle veritabanı çalışmaya devam edecektir.Ancak redo log dosyaları iki ‘den az olursa veya hepsi kapanır ise veritabanı kapanır ve veri kaybetme ihtimaliyle karşılaşırız.

Çalışmakta olan redo log dosyalarına ait bilgilere aşagıda ki viewlerden ulaşabiliriz.

* SQL> Select * from v$log ;
* SQL> Select * from v$logfile ;

ARCHIVE LOG FILES

Oracle veritabanı ARCHIVELOG modda ise redo log dosyaları bu dosyalara otomatikman arşivlenir.

ARCHIVELOG  modunda çalışmanın avantajları ;

  • Instance ya da medya arızaları durumunda veritabanı tamamen kurtarılabilir.
  • Online yedek almak mümkündür.
  • Arşivlenmiş redo log dosyalarını yedek veritabanına uygulayabilir ve böylece yedek veritabanı ile aktif veritabanı ,veri bakımından aynı düzeye gelmiş olurlar.

Oracle ‘ın ARCHIVELOG modda mı NOARCHIVELOG modda mı oldugu ogrenmek için aşagıda ki komut satırını kullanırız.

* SQL> Select log_mode from v$database ;

Oracle NOARCHIVELOG modda ise ARCHIVELOG moda geçmek için aşagıda ki adımları sırasıyla yapmalıyız.

  1. shutdown ;
  2. startup mount;
  3. alter database archivelog ;
  4. alter database open ;

PARAMATER FILES

Oracle iki çeşit parameter files vardır bunlar pfile ve spfile dosyalarıdır ve varsayılan olarak Oracle kuruldugunda iki parameter file çeşidi de olur.

Oracle database server Instance başlatılırken ,parameter dosyasında ki bilgileri okuyarak Instance yapılanmasını gerçekleştirir.Yani rezerve edilecek olan SGA ve PGA bellek miktarları ,arka plan işlemlerine ait ayarlar ,veritabanının adı ,datafile dosyaları için varsayılan disk konumu gibi bilgiler bu dosyadan okunur.Oracle Instance de bu degerlere uygun olarak başlatılır.

Oracle ‘da varsayılan olarak pfile ‘ın yeri ;

ORACLE_HOME –> DBS –> init.ora

SPFİLE : Oracle 9i sürümü ile birlikte gelmiştir kullanım amacı pfile dosyalarına benzemektedir.

Oracle ‘da varsayılan olarak spfile ‘ın yeri ;

ORACLE_HOME –> Database –> spfileorcl.ora

NOT : spfile binary türde dosya tipinde saklanılır bu yüzden spfile dosyasını açıp içini degiştiremeyiz(spfile dosyalarının içini ancak  “alter system set ……..” komutuyla degiştirebiliriz) ama pfile text dosyası ile açılabilir ve gerektiginde pfile dosyalarına buradan da degişiklikler yapabiliriz.

NOT : pfile silindiginde spfile ile pfile oluşturabiliriz , spfile silindiginde de pfile ile spfile oluşturabiliriz.

spfile oluşturmak için

* SQL> Create spfile=’…spfile’in yeri…’ from pfile=’…pfile’in yeri…’ ;

pfile oluşturmak için

* SQL> Create pfile=’…pfile’in yeri…’ from spfile=’…spfile’in yeri…’ ;

NOT : spfile kullanmak pfile kullanmaktan daha avntajlıdır ;

  • RMAN ile backup otamatikman alınabilir.
  • Text dosyası gibi açılıpiçinde ki veriler degiştirilemediginden insan kaynaklı hataların önüne geçer.
  • Uzaktan veritabanını başlatmak için lokal makinede bir dosya tutulmasına gerek kalmaz .

NOT : Oracle veritabanının pfile ‘denmi spfile ‘denmi başladıgını ögrenmek için aşagıda ki komut satırını kullanabiliriz.(Oracle varsayılan olarak spfile ile başlar)

* SQL> Select decode(value,NULL,’pfile’,spfile) from v_$parameter where name=’spfile’ ;

Veritabanını pfile ile açmak istersek aşagıda ki komut satırını kullanabiliriz.

* SQL> Startup pfile=’…pfile’in yeri… ’ ;

Parameter files ile ilgili bilgilere de aşagıda ki komut satırından ulaşabiliriz.

* SQL> Select * from v$parameter

ALERT LOG ve TRACE LOG FILES

Veritabanında gerçekleştirilen degişiklikler ve Oracle hataları Alert log adı verilen günlük dosyalara kaydedilirler.

Veritabanının açılması kapatılması ,Instance parameterlerin de degişklik yapılması ,tablespace nesnelerinin offline veya backup moduna alınması gibi işlemlerin bilgileri Alertlog dosyalarında kaydedilir.Ve kaydettigi verileri Alertlog dosyaları kronolojik sırada tutar.

Ancak arkaplan işlemleri tarafından tespit edilen Oracle hatalarına dair genellikle sadece özet bir bilgi Alertlog dosyalarına kaydedilir.Bu tip Oracle hatalarının detaylarını görüntülemek için ilgili Trace log dosyasını okuyarak ögrenmeli ve ardından bu Tracelog dosyasını açarak inceleyebiliriz.

Alert ve Trace log dosyalarının yerini ögrenmek için ;

* SQL> Show parameter background_dump_dest ;

ORACLE MANTIKSAL YAPI

Oracle veritabanını yönetebilmek için mantıksal olarak daha küçük parçalara ayırır.Bunlar ;

  • Tablespace
  • Segment
  • Extent
  • Block

Bu sıralamadan da anlaşılacağı üzere Oracle ‘da bloklar extendleri,extendler segmentleri,segmentler tablespaceleri oluşturur.

BLOCK

Block Oracle ‘daki en küçük depolama birimidir.Bir block genelde birden fazla işletim sistemi blocklarından oluşur.

Blog büyüklüğü Oracle init.ora parametre dosyasında ki DB_BLOCK_SIZE değerinden öğrenilebilir(Varsayılan olarak 4096 bytes yani 4 kb ‘dır).Bu değer veritabanı oluşturulduktan sonra değiştirilemez.

EXTENT

Bir extent ard-arda(sıralı) gelen blocklardan oluşur.Belirli bir tipteki veriyi tutmak için kullanılırlar.

SEGMENT

Bir ya da daha fazla extentin bir araya gelmesiyle oluşur bu extendlerin ardışık(sıralı) olması gerekmiyor.

Oracle ‘da tablo,index vs. oluşturduğumuz zaman oracle bir segment alır.(Bu segment en az bir extent ve bir blockdan oluşur)

Bir segmentin extentleri tamamen dolduğunda Oracle bu segment için yeni bir extent alanı ayırır.

Dört farklı segment çeşidi vardır.Bunlar ;

  • Data segment
  • Index segment
  • Temporary segment
  • Rollback segment

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

Oracle veritabanında en üst seviye de kullanılan mantıksal gruplamadır.Tablespace genelde birbirleriyle ilgili mantıksal yapıları bir arada tutmak için kullanılırlar.

Her oracle veritabanın da SYSTEM ve SYSAUX adında 2 adet tablespace oluşturulur.Data dictionary ‘de zaten özel bir tablespace olan SYSTEM tablespace ‘inde tutulur.

Temprorary Tablespace : Kullanıcı oturumu boyunca data tutar(Sıralama,sort vs.).Data file yerine temp file ‘lerde veriyi tutar.

Undo Tablespace : Veri tutarlılığını sağlamak için kullanılır.

Var olan table spaceleri ve parametrelerini aşağıda ki koddan öğrenebiliriz.

* SQL> select * from dba_tablespaces;

Yazar : Mustafa Bektaş Tepe
Java && Oracle

5,638 total views, 5 views today