Hurriyet

24 Haziran 2012 Pazar

Linux'ta Veritabani Instance Kontrolu - 2

Veritabanını Başlatma Komutları Nelerdir?

startup --> direk başlatmak için
startup nomount --> nomount modu için
alter database mount --> nomount modundan mount moduna geçmek için
alter database open --> mount modundan open moduna geçmek için

Kapatma Modları Nelerdir?

Abort --> direk kapatmak için.
Immediate -->  yeni bağlantılara izin vermez. Bir checkpoint sinyali verip tutarlı bir kapatma sağlar.
Transactional --> yeni bağlantılara izin vermemesiyle birlikte transaksiyonların bitmesini bekler.
Normal --> yeni bağlantılara izin vermez ama var olan bağlantıları da kapatmaz ve işlemlerin bitmesini bekler.

Alert Log Görüntülenmesi:

Her veritabanının bir alert_.log dosyası bulunur. Bu da $ORACLE_BASE/diag/rdbms/// dizinin içinde yer alır. Bunun dısında bir yerde ise v$diag_info view'ı sorgulanabilinir. Bakılması gerek dosya xml tag'leri olmadan görüntüleyebileceğimiz alert_SID.log dosyasıdır.

Trace File Nedir?

Bütün hata raporları ,processler bu hatalarla karşılaştıkları zaman bir trace file dosyasına yazılır. Bu verilerde ADR (Automatic Diagnostic Repository) kısmında yer alır. ADR dizini Oracle_BASE de bulunur.

Linux'ta Veritabani Instance Kontrolu

Enterprise Manager Nasıl Açılır?

İlk öncelikle buranın açılması için değişken ortamının " . oraenv" komutu çalıştırılır. Sonrasında ise "orcl" şeklinde veritabanımızın ismini vermemiz gerekir. Genelde orcl adı deneme veritabanlarına verilirken adın "orcl" olması zorunlu değildir.

emctl start dbconsole
emctl stop dbconsole
emctl status dbconsole

Sqlplus nasıl başlatılır?

Komut satırında sqlplus yazılarak sqlplus başlatılır. Bundan sonra kullanıcı adı ve şifremizi girerek devam ederiz. Genel syntax'ı "sqlplus hr /hr ;'dir. Programa girdikten sonra ise " connect hr/hr  ;" ifadesiyle kullanıcımızı değiştirebiliriz.

Başlatma (Initialization) Parametre Dosyaları Nelerdir?

Bunlardan 2 tane bulunmaktadır. Birincisi spfile.ora, diğeri de init.ora'dır.
Burada oracle_sid diye bahsettiğimiz şey oracle veritabanımızın adıdır.  Eğer yukarıda bellirttiğimiz gibi veritabanımıza standart orcl adını verirsek spfile(server parameter file) dosyamızın adı spfileorcl.ora olur. Aynısı init dosyamız için de geçerlidr.

Spfile dosyamız ikili(binary) düzende yazılmış bir dosyadır. Manuel olarak düzenlenmemelidir. Veritabanı sunucu tarafından ilk okunan dosyadır.

Pfile dosyamız ise text bazlı bir dosyadır. Veritabanımız spfile dosyamızı bulamazsa pfile dosyamızı okur. Asm kurulmuş bir server'da pfile dosyamız $ORACLE_HOME/dbs dizininin içinde yer alır.

Parametre dosyalarının içindeki verileri ise Sqlplus konsole aracına girip "v$parameter" view'ını sorgulatarak ya da direk "show parameter değişken_adımız" diyerek görebiliriz.

Parametre Değerlerinin Değiştirilmesi Nasıl Olur?

Statik parametreler ancak parametre dosyasından değiştirilebilirler. Etkisinin görülebilmesi için veritabanının tekrardan başlatılması gerekir. Dinamik parametreler ise veritabanı açık iken bile değiştirilirler. 2 seviyede değiştirilirler. Bunlar "system" seviyesinde veya " session" seviyesinde olabilir. "Scope " anahtar kelimesine göre uzunluğu belirtilir. 3 tane scope  seçeneğimiz vardır.  Both ,Spfile ve Memory olmak üzere değiştirilen parametrelerin ne zaman ve ne kadar süre kayıtlı kalcağını gösteren seçeneklerdir. Memory de yapılan değişiklik session bazında iken Spfile değişikliği kalıcıdır ancak veritabanının yeniden başlatılmasını gerektirir. Both ifadesi ise şu andan itabaren etkili olmak üzere değişikliği hayata geçirir.

Örnek:
Alter session set NLS_DATE_FORMAT =' mon dd yyyy' scope=spfile;

ORACLE Veritabanı İnstance'ının Başlatılması

Veritabanı başlatılırken 3 seviye bulunmaktadır. Nomount ,Mount ve Open modları sistemin hangi durumda olduğunu bize gösterir.

Nomount : Parametre dosyaları aranıp bulunduktan sonra bu moda geçilmiştir. SGA alanı ayrılmıştır. alert_SID.log ve trace dosyalarına yazılmaya başlanılmıştır. Control File dosyalarının yaratılması için, bazı kurtarma operasyonları için veya veritabanını yaratmak için bu modda başlatılabilinir.


Mount: Veritabanını instance ile eşleştirir. Control Files dosyaları parametre dosyalarındaki yerlerinden bakılarak bulunur ve bu dosyalar okunur. Bazı bakım işlemlerinin yapılması ,instance başlatılması ve veritabanının açılmaması için bu moda geçilir. Örneğin data file dosyalarının isminin değiştirilmesi ve full kurtarma yapılması veya veritabanını arşiv moduna geçirilmesi uygun örnekler olabilir.



Veritabanı Process'leri

Veritabanı Process'leri nelerdir?


Önemli veritabanı process'leri arasında Database Writer Process(DBWn), Log Writer Process(LGWR), Checkpoint process (CKPT), System Monitor Process(SMON), Process Monitor Process(PMON),Recoverer Process(RECO) ve Archiver Process(ARCn) bulunur.

Diğer process'ler v$bgprocess view'ı görüntülenerek bulunabilinir. Performans view'ı olduğu için veritabanı açılmadan görüntülenemez. Bazıları sistem açılınca başlatılırken, diğerlerinin açılması tetiklenebilinir. Şimdi bu önemli veritabanı process'lerini tanıyalım.

DBWn: Bu işlem kirli olarak tabir ettiğimiz data bloklarının veritabanının buffer cache'ine yazılmasını sağlar. Senkronize olarak çalışmaz. Ne zaman ihtiyaç olursa çalıştırılır. Birden fazla bulunabilinir. Sistem performansını artırmak için 36'ya kadar çıkartılabilinir ancak normalde 1 tane yeterlidir. Checkpoint ilerletmek için veya yer kalmadığında buffer'da o zaman çalıştırılır.

LGWR: Redo log buffer'ını redo log dosyasına geçirir. Çalışması için 4 koşul vardır. Her 3 saniyede bir, bir user process bir işlem(transaction) commit'lediğinde veya DBWn çalıştığında LGWR'ye sinyal gönderilip çalıştırılır.

CKPT: Checkpoint bilgisini kontrol dosyasına ve her datafile dosyasının başlığına yazar.

SMON: Instance başlatıldığında kurtarma operasyonu başlatır (gerekirse). Temizlenmemiş geçici segment'leri temizler.

PMON: Bir işlem kapandığında işlem kurtarma operasyonu başlatır. Database Buffer Cache'ini temizler ve gereksiz kullanılan kaynakları boşaltır.

RECO: Otomatik olarak commit'lenmemiş(kaydedilmemiş) değişikliklerin durumunu çözer. Bunu da rollback(geri döndürerek) yapar.

ARCn: Redo log dosyalarını belirlenen noktalarda kaydederek saklar.

SGA ve PGA

SGA (System Global Area)

SGA kısmı hafızadaki yapının büyük bir kısmını oluşturur. O yüzden bu kısmı ciddi bir şekilde incelememiz lazım.SGA içinde 8 kısım bulunmaktadır. Bunlar sırasıyla:

1-Shared Pool: İçinde data dictionary cache,library cache ve sql ve pl/sql result cache  bulundurmaktadır. Buradaki data dictionary veritabanında bulunan veritabanı referans bilgisini içeren tablo ve view bir birleşimidir. Oracle sql ifadelerini çözümlerken bu tablolara o kadar çok erişim yapmaktadır ki bununla birlikte bir de library cache ve Data Dictionary cache bulunur. Bu  da yukarıda belirttiğimiz tabloların verilerini içermektedir. Shared Pool içerisinde bulunan başka bir yapı da Result Cache'dir burada da SQL sorguları ve PL\SQL fonksiyonları yer almaktadırç

2- Database Buffer Cache: Veritabanından okunan bilgilerin, daha doğrusu data bloklarının kopyalarını tutar. Bir bilgi arandığı zaman ilk olarak bu bilgi database buffer cache içinde aranır. Eğer orada bulunuyorsa ordan direk çekilir. Bulunamadıysa da veritabanından data bloğu çekildikten sonra kopyalanıp  database buffer cache'e kopyalanır. Eğer process veriyi burada buluyorsa "cache hit" olur. Bulunamaz ise "cache miss" olur. Data'ya cache hit ile ulaşmak daha hızlıdır. Buffer Cache LRU yapısınına göre çalışır. En geç hangi veri kullanıldıysa o silinir. Bu cache'in yönetiminde DBWn process'leri yer alır. DBWn process'leri buffer cache'deki dirty(değiştirilmiş) buffer'ları disk'e yazar.

3- Keep Buffer Pool: Database buffer cache içinde bazı bilgilerin normal algoritmanın izin verdiğinden daha uzun tutulmasını sağlayan buffer cache'dir.

4- Recycle  Buffer Pool: Silinen veya kaybedilen verilerin daha çabuk geri getirilmesini sağlayan  buffer cache'dir.

5- Redo Log Buffer : Veritabanında yapılan değişikliklerle ilgili verilerin tutulduğu yerdir. Bu bilgiler DML,DDL veya iç operasyonlar sonucunda gerçekleşmiş değişikliklerle ilgilidir.(Bu operasyonlar Insert,Update,Delete,Create,Alter,Drop). Bunlar sayesinde veritabanında geri dönüşler, zamanda başka başka bir pozisyon veya zaman aralığına dönüşler sağlanır.  Değişiklikler Redo Log Buffer'ında toplandıktan sonra Redo Log dosyalarına asenkron olarak yazılırlar. LGWR Process'i bu işlerle ilgilidir.

6- Large Pool: Opsiyonel bir hafıza alanıdır. Bu alan sayesinde büyük hafıza alanı gerektiren işlemler için yer ayrılır. Bu işlemler ise Oracle veri yedekleme ve kurtarma  veya büyük veri giriş ve çıkış işlemleri olabilir.

7- Java Pool: Java işlemleri için gereken hafıza alanın tahsis edildiği yerdir.

8- Streams Pool: Oracle Streams için gereken hafıza alanın tahsis edildiği yerdir.


PGA (Program Global Area)

  PGA ise server processleriyle ilgili bilgilerin tutulduğu hafıza alanıdır. Başka hiçbir mekanizmanın buraya erişimi yoktur. İçinde cursor area depolama bilgileri , kullanıcının session'u ile ilgili veriler ve sql ifadelerinin çözümlemeleriyle ilgili çalışma alanları bulunur.
  PGA'de UGA diye adlandırılan User Global Area bulunur. UGA hafıza kısmı  paylaşımlı bir server ortamında SGA alanına kaydırılır. Bu durumda PGA'de sadece stack space kalır.

22 Haziran 2012 Cuma

Oracle Veritabanı Yapısı - 2

İlk önce Oracle veritabanı hakında  bir hatırlatma yaparsak , veritabanımız ünite halinde tutulan verinin şekillendirilip, düzenlenmiş halidir. Amacı verinin saklanıp, gerektiğinde geri getirilmesidir. Oracle veritabanı yönetim sistemi büyük miktarlardaki verileri tutmasıyla bilinir.

Oracle Veritabanı Mimarisi 3 parçadan oluşur. Bunlar:

1-Hafıza(Memory) yapıları
2-"Process" yapıları
3-Saklama(Storage) yapıları

Oracle veritabanı sistemi ise 2 yapıdan oluşur. O da tahmin edebilceğiniz üzere Oracle veritabanı ve bu Oracle veritabanı "instance"'ıdır. Her bir instance'I açılışında bir SGA (System Global Area)  hafıza alanı ayrılır ve arkaplanda process'ler başlatılır. Bu process'ler sga alanında çalışırlar. Bu instance'ın veritabanıyla ilişkilendirilmesine "mounting the database" denir. Veritabanı açılmaya hazırlanmış olur.

RAC Nedir?

Eğer her bir "database instance" 'ı sadece bir veritabanıyla eşleştirilirse kümelenmemiş bir yapı oluşturulmuş olur. Ancak aynı veritabanı için birden fazla instance bulunursa RAC sistemi oluşturulmuş olur. (RAC -->Real Application Cluster)

Veritabanına bağlanıldığında ilk önce bir bağlantı oluşturulur. Bu bağlantı gerekli ilişkilerin kurulmasını sağladıktan sonra bir session'a dönüşür.  Bu ilişkilerle demek istediğimiz durum ise kullanıcının veritabanına bağlanması olarak belirtebiliriz.(Login olması)

Hafıza Yapıları Nelerdir? 


Oracle'da 2 tane hafıza yapısı vardır. Bunlar da PGA ve SGA'dir.

PGA: Hafızadaki process ve arkaplandaki işlemlerle ilgili veri ve kontrol bilgisini bulunduğu yerdir.
SGA: Hafızanın veritabanı instance'ı ile ilgili veri ve kontrol bilgisinin bulunduğu yerdir.

Oracle Veritabanı: ASM - Automatic Storage Management

ASM Nedir?

Asm veritabanındaki verileri bütün disk üzerine dağıtan, veri şebekesini yaratıp bunun düzenlemesiyle ilgilenen yapıdır. Asm verinin otomatik düzenlemesiyle ilgilenir ve disklerin ayarlanmasını sağlar.

ASM Oracle database'inde 10g sürümüyle gelen bir özelliktir. ASM database datafile'larının, controlfiles'larının ve logfile'larının yönetimini kolaylaştırır. Bunu yapmak için de komutları sql benzeri bir yapıda kurar. Bu şekilde dba'lere kolaylık sağlar.

ASM sistemi disklerin kontrolünü alır ve bunları dba'lere logical partitionlar halinde ayırma kolaylığını sağlar. Dba'ler bu şekilde  daha fazla sistem bilgisi edinmeye gerek duymazlar.

Diskler daha rahat bir şekilde eklenebilir. Tek bir komutla yeni eklene diskler sistemde gözükür ve bu diskler üzerinde mirroring ve striping işlemleri yapılır.

Yine ASM sayesinde I/O'lar bütün diskler üzerine eşit dağıtılır. Bu işlem "Striping" olarak tabir edilir. Bir data birden fazla diskte parçalı olarak saklanabilir.

Yukarıda anlattığımız striping konusunu tamamlayan bir başka özellikte "Mirroring"'dir. Her türlü bilgi kaybolma ihtimaline karşı başka disklerde mirror edilir; yani kopyalanır ve bu kopya  başka disklere dağıtılır. Bu şekilde disklerden bir tanesi bozulursa; bu bozukluktan dönme şansı doğar.

Veriler diskler arasında değiştirilebilir, dizinler başka yerlere taşınabilirler.

Aynı diskler birden fazla veritabanı tarafından paylaşılabilir.

ASM Nereye Kurulmalıdır?

ASM best practice olarak kurulumların başka bir Oracle Home'a mümkünse farklı bir diske yapılmasını tavsiye eder. Böylece "Upgrade" işlemleri veritabanını etkilemez.

ASM Kurulu Bir Database'de Instance Nasıl Başlatılır?

İlk önce +ASM instance'ı açılır. Aşağıdaki gibi giriş yapıldıktan sonra sysasm yani asm yöneticisi  veya sysdba, database yönetcisi olarak giriş yapılabilinir.


 export ORACLE_SID=+ASM  
 $ sqlplus "/ as sysdba"  




ASM'de Diskgroup Nasıl Yaratılır?

ASM'e diskgroup'ları aşağıdaki "create diskgroup" syntax'ı şeklinde eklenebilinir. Diskgroup'u önce bir tane diskten oluşturup sonra bu disk grubuna başka diskler ekleriz ve bu disk gruplarının elemanlarını arttırırız.

Bu örneğimizde oluşturduğumuz disk grubunun adı disk5'tir. External Redundancy diyerek yedekleme işini engelleriz.

ASM yedekleme seviyeleri:

  • High  : 2 kere yedeklenir.
  • Normal : 1 bir kere yedeklenir.
  • External : 0, hiç yedeklenmez.

ORCL:VOL5 diskin adıdır.


 SQL> create diskgroup disk5 external redundancy disk 'ORCL:VOL5';  
 Diskgroup created.  
 SQL> select group_number,disk_number,mode_status,name from v$asm_disk;  
 GROUP_NUMBER DISK_NUMBER MODE_STATUS  NAME  
 ------------ ----------- -------------- -------------------------------------  
       0      5 ONLINE  
       1      0 ONLINE     VOL1  
       1      1 ONLINE     VOL2  
       1      2 ONLINE     VOL3  
       1      3 ONLINE     VOL4  
       2      0 ONLINE     VOL5 

Genel olarak Oracle 2 tane disk grubunun olmasını tavsiye eder. Bir tanesi datafile'ların yönetimi için kullanılacak olandır. Diğeri de backupların bulunacağı ayrıca datafile'ların yedekleneceği bir disk grubudur. Aşağıda bununla ilgili bir örnek vardır.

 CREATE DISKGROUP data  EXTERNAL REDUNDANCY DISK '/dev/d1', '/dev/d2', '/dev/d3', ....;  
   
 CREATE DISKGROUP recover EXTERNAL REDUNDANCY DISK '/dev/d10', '/dev/d11', '/dev/d12', ....;  

Diskgroup'lara Disk Nasıl Eklenir?

Yukarıdaki örneğimizden yola çıkarak data disk grubumuza diskimizi aşağıdaki ifadeyle ekleyebiliriz. Disk'i ekledikten sonra bu disk'i isimlendirirsek bizim için kullanımı daha kolay olur. Bu /dev/d15 ismi disk Linux sistemi tarafından atanan isimdir. Bu ismi kullanırız disk'i atarken.


ALTER DISKGROUP data ADD DISK
     '/dev/d15' NAME VOL15;

Diskgroup'lardan Disk Nasıl Drop Edilir?

Disk'ler aşağıdaki ifadeyle drop edilir. Logical olarak yarattığımız, diskimize referans olarak kullandığımız VOL15 ismini silmek için kullanabiliriz.


 ALTER DISKGROUP data DROP DISK VOL15;  

ASM'deki Disk Kullanım Miktarı Nasıl Bulunur?

Aşağıdaki sorguyu kullanabilmemiz için +ASM instance'ına girmemiz gerekir.


 export ORACLE_SID=+ASM  
 $ sqlplus "/ as sysdba" 

Bu şekilde ASM tablolarına erişim sağlarız. Sonra aşağıdaki komutu gireriz.


 SQL> SELECT name, free_mb, total_mb, free_mb/total_mb*100 "%" FROM v$asm_diskgroup;   
   
 NAME               FREE_MB  TOTAL_MB     %  
 --------------------          ----------------  --------------------- -----------  
 DATA                219314  1638400 13.3858643  
 REDOLOG1            86178   102400 84.1582031  
 REDOLOG2            86178   102400 84.1582031  

Bir başka yöntemde hazır ASM instance'ındayken asmcmd command line'ına girip orada lsdg komutunu çalıştırmaktır.

 ASMCMD> lsdg  
 State  Type  Rebal Unbal Sector Block    AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Name  
 MOUNTED EXTERN N   N     512  4096 1048576   11264   9885        0      9885       0 DATA/  
 MOUNTED EXTERN N   N     512  4096 1048576   10240   9906        0      9906       0 RECOVER/  

Automatic File Management Nasıl Sağlanır?

Automatic File Management'ı db_create_file_dest,db_recovery_file_dest ve db_recovery_file_dest_size parametrelerini ekleriz. Bu şekilde database file'ları artık ASM diskgruplarımızda yaratılmaya başlanır.


ALTER SYSTEM SET db_create_file_dest = '+DATA' scope=SPFILE;
ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE = 100G scope=SPFILE;
ALTER SYSTEM SET db_recovery_file_dest = '+RECOVER' scope=SPFILE;


ASM ile İlgili Tablo ve View'lar


 V$ASM_DISK - ASM diskleri  
 V$ASM_DISK_STAT  
 V$ASM_DISKGROUP - ASM diskgroupları  
 V$ASM_DISKGROUP_STAT
 V$ASM_OPERATION  



Referans:
http://www.dba-oracle.com/t_asm_external_redundancy.htm
http://docs.oracle.com/cd/B28359_01/server.111/b31107/asmdiskgrps.htm#OSTMG137
http://www.orafaq.com/wiki/ASM_FAQ
http://www.oracle-base.com/articles/10g/automatic-storage-management-10g.php


Berke Öz

     Berke Öz

      Doğum tarihi: 26.10.1989
      Email: berkeoz1@hotmail.com
      Linkedin:Berke ÖZ






Kariyer Hedefi


Bilişim Teknolojileri konusunda kariyer edinebilmek ve kendimi geliştirebileceğim zorlayıcı, bilgimi ve yeteneklerimi geliştirebileceğim ve aynı zamanda katkıda bulunabileceğim bir organizasyonda kararlı, istekli ve motive bir şekilde çalışabilmek.

Eğitim Durumu

  • Galatasaray Üniversitesi - Mühendislik ve Teknoloji Fakültesi:   2007- 2012                         
    Bilgisayar Mühendisliği
  • Université de François Rabelais - Ecole Polytechnique(Grande Ecole):   2010-2011                
    Erasmus öğrenci değişim programı
  • Kadıköy Anadolu Lisesi :   2003-2007


Eğitimler

  • Bilginç IT Akademi - Oracle OCP - 96 saat :  (18.06.2011 - 25.09.2011)
          Amaç: Oracle veritabanı ürününün yönetimi konusunda kişiye
          gerekli yetkinliklerin kazandırılması.

  • Bilginç IT Academi - Oracle PL/SQL - 8 saat : (19.11.2011 - 20.11.2011)
          Amaç: Oracle veritabanı ürününün script programlama dili konusunda
          eğitim.

  • Istanbul Institute - MIS(Yönetim Bilişim Sistemleri) - 72 saat : (15.10.2011 - 04.12.2011)
         Amaç: Yönetim Bilişim Sistemleri konusunda önemli konu ve bilgilerin
         gösterilmesi, öğretilmesi ve geliştirilmesi.


        Diğer katılınmış olan kurslar: Oracle Database 11g : SQL Tuning Workshop,  
        Oracle Database 11g: RAC Administration Release 2, Oracle Database :
        Advanced Programming with PL/SQL, Oracle BI Publisher


 
Sertifikalar
  •   MIS Başarı Sertifikası
  •  Oracle Certified Associate(OCA) - Sertifikası 
  •  Oracle Certified Professional (OCP) - Sertifikası
  •  Oracle Certified Tuning Expert - Sertifikası



Profesyonel Deneyim


   Profesyonel Tecrübe:

      Softtech A.Ş.: ( 04.03.2103 - ...)
       Burada Oracle Application ve Database Administrator olarak İşbankasında
       Database ve Application  Maintenance,Module Installation, Patching
       gibi konularla ilgilenmekteyim.    

      Inspirit Teknoloji:  ( 17.12.2012 - 15.02.2013 )
       Oracle DBA olarak remote DBA'lik hizmeti verdim. Bir sürü farklı ticari alanda
       faaliyet gösteren firmanın veritabanını kontrol edip gerekli
       operasyonel işlemleri gerçekleştirdim. Dataguard kurulumları,
       Rac kurulumları, backup alımı ve performans işleri yapılmıştır.
     
      Planera Teknoloji: ( 15.10.2012 - 16.12.2012 )
        Proje Danışmanı olarak Yapı Kredinin bankacılık projelerinde görev aldım.

       Bilginç IT Academy : ( 20.01.2012 - 15.10.2012 )
        Oracle DBA Junior olarak staj faaliyetinde bulunulması ve
        tecrübe edinilmesi

       OBSS (Open Business Software Solutions):  ( 15.08.2011 - 16.09.2011 )
        Java bilgi teknolojileri hakkındaki bilgilerin pekiştirilmesi
        ve uygulama yapılması.

   Stajlar:

       Pozitron: (Yazılım Stajı) (18.06.2011- 12.08.2011)
        Mobil teknolojiler hakkında bilgi edinilmesi.Nokia Symbian
        Platformunda bankacılık uygulaması geliştirilmesi.
   
      IBM: (Donanım Stajı) (05.06.2010 - 02.08.2010)
       IBM donanım ürünleri üzerine staj. Aynı zamanda DB2 ile il-
       Işkili bir java dilinde yazılmış restoran programı yazılması.


 Yetkinlikler:


   Yabancı Diller:
  •        İngilizce (İleri Düzeyde) - Advanced
  •        Fransızca (İleri Düzeyde) - Delf B2 Sertifikalı




   Bilgisayar Bilgisi:

      İşletim Sistemleri: Windows OS(Windows 7,Xp,Vista ,2008 Server), Linux(Fedora,Ubuntu,Oracle Redhat, Redhat Entreprise)

     Programlama Dilleri: C,C++,Pascal,Java,C#,Xhtml,Html,Javascript,Css,Xml,PL\SQL,T-SQL,SQL

     Yazılımlar ve Paket Programlar: Ms Office 2010/2007,AutoCad 2009-2003,Visual Studio
      2010, Netbeans,Eclipse,Oracle Database 11g R2 ,Microsoft Sql Server 2008,Postgre Sql, MySql

Referanslar:

Tamer Sezgin - IBM Banking Solutions Manager
Can Elmas - Pozitron Software Development Team Leader
Burak Uysal - Bilginç IT Academy Eğitmen
Eren Güleryüz - Bilginç IT Academy Eğitmen

Kulüpler ve İlgi Alanları


 Öğrenci Kulüp Üyelikleri:


·         Bilgisayar Kulübü (2007-2011)

·         Mühendislik ve Teknoloji Kulübü (2007 -2011)

·         Gsu Linux Kulübü (2007-2009)

·         Gsu Müzik Kulübü (2008-2009)



İlgi Alanları:
               
       Kitap okumak(Bilimkurgu), Film izlemek, Müzik dinlemek(Chillout,Jazz),

Gezmek, Yüzmek, Futbol oynamak.

İlişkili Alt İfadeler (Correlated Subqueries)

İlişkili alt sorgular özel bir sorgu bir biçimidir. 2 sorgunun birbirleriyle ilişkili hale getirilmesidir. 2 veya daha fazla tablo arasında karşılaştırma yapmak istediğimizde yararlı olabilir.

Örneğin:

select <kolon1>,<kolon2>
from <tablo1> Outer_table
where <kolon1> operator (select  <kolon1>,<kolon2> from <tablo2>
                                            where <ifade1>=Outer_table.<ifade2>);

Burada outer_table ifadesi aslında bir alias (takma ad)'dır.

Bu sorgularda ayrıca inceleyeceğimiz 1 tane operatör vardır. Bu da "exists" operatörüdür. "Exists" operatörü sorgumuzun sonucunda herhangi bir cevap alıp alamadığımızı kontrol eder. Eğer bir cevap bulunursa alt sorgu çalıştırılmaya devam edilmez ve üst sorgunun sonucu döndürülür. Eğer ki cevap bulunamazsa  alt sorgunun sonuna kadar ilerleme devam ettirilir ve bulunmadığı takdirde de üst sorgu çalıştırılmaz ve hiçbir sonuç bulunamadığına dair bir ifade döndürülür.

Select first_name from departments d
where exists( Select 'Berke' from employees where first_name=d.first_name);

Üstteki ifadede Oracle "Berke" ismini veri tabanında arayacak. Bulamaması halinde üstteki sorguyu çalıştıramayıp , sonuç döndüremeyecek. Halbuki "exists" operatörü yerine "not exists" operatörü bulunsaydı; o zaman da direk üst ifade çalıştırılıp, bellirli bir sonuç döndürülecekti. Bu haldeki ifade de aşağıdaki sorguya benzeyecekti.

"Select first_name from departments;"

21 Haziran 2012 Perşembe

İletişim

"Date" Yönetimi


Oracle'da date zaman zaman karıştırılabilen biraz kompleks bir yapıdır. Bunu çözmenin en kolay yolu hepsini detaylı bir şekilde yazıp görmektir. Hepsini incelersek:

Current_date : date tipindedir. Session zamanını gösterir.
Current_timestamp: timestamp with time zone tipindedir.Session zamanını gösterir.
Localtimestamp: timestamp tipindedir. Session zamanını ve tarihini gösterir.
DBtimezone : Veritabanının bulunduğu server'ın zamanını gösterir.

-Mevcut tarih durumunu nasıl görebiliriz?

Select sysdate from dual;

select snap_id, begin_interval_time, end_interval_time from dba_hist_snapshot where  begin_interval_time> sysdate-(2/24) order by 1;
#Son 2 saat içinde alınan snapshotlar. Sysdate'den saat yukarıdaki gibi çıkartılır.



-Mevcut tarih formatını nasıl değiştirebiliriz? 


Alter session set nls_date_format ='DD-MON-YYYY HH24:MI:SS';

-Yukarıda belirttiğimiz tipler tam olarak neyi simgeliyor?

Timestamp --> Yıl , ay, gün, saat, dakika, saniye ve saliseleri gösterir.
Timestamp with time zone --> Yıl , ay, gün, saat, dakika, saniye ve saliseleri gösterir. Ayrıca bulunan zaman bölgesinin saatini ,dakikasını ve bölgesini gösterir.

 -Başka hangi zaman tipleri bulunmaktadır?

interval year to month -->Yıl , ay
interval day to second -->Gün, saat, dakika, saniye

  -Hangi zamanla ilgili fonksiyonlar bulunmaktadır?

İlk fonksiyonumuz "extract "'dır. Bu fonksiyonda herhangi bir zaman tipli kolon veya veri tipli bir değerden değişken çıkartabiliriz.

select extract(month from hire_date) from employees;

İkinci göstereceğimiz fonksiyon ise "to_timestamp"'dir. Bu da bizim belirleyeceğimiz bir zaman bilgisini veri tipine çevirmemizi sağlar.

Select to_timestamp('2012-06-18 11:00:00','YYYY-MON-DD HH:MI:SS') from dual;

Diğer 2 fonksiyon ise to_yminterval ve to_dsinterval 'dır. Bunlar içlerine konan bir karakter dizisini ilk fonksiyonda interval year to month tipine , diğerinde ise interval day to second tipine dönüştürürler.


Insert İfadeleri

Insert ifadeleri genellikle ETL processlerinde çok kullanılan ifadelerdir. Tek bir dml ifadesinden daha kullanışlı ve fonksiyonel olduğu için kullanılırlar. Bu ifadelerde 4 tarz durum bulunmaktadır.

1- Unconditional insert
2- Conditional insert first
3- Pivoting insert
4- Conditional insert all

Conditional insert first:

Oracle veritabanı böyle bir ifadeyle karşılaştığında ilk önce şartları gözden geçirir. Bu şartları gözden geçirirken de "when" koşullarına bakar.  Buna göre de yapılacak kayıt ekleme işlemi gerçekleştirilir. Bu işlem değerlendirilirken de karşılaşılan ilk doğru şarta bakılır.

insert first
         when  salary <5000 then
                  into sal_low --tablo adı--  values (employee_id,last_name,salary)
         else
                  into sal_high --tablo adı--  values (employee_id,last_name,salary)
select employee_id,first_name,salary  from employees;

Conditional insert all:

Bu şartlı ifadede ise farklı şartların farklı  durumlara  yol açması nedeniyle farklı tablolara kaydın yapılması sağlanmaktadır.

insert first
         when  salary <5000 then
                  into sal_low --tablo adı--  values (employee_id,last_name,salary)
          when job_id is not null then
                  into sal_high --tablo adı--  values (employee_id,last_name,salary)
select employee_id,first_name,salary  from employees;

UnConditional insert all:

Bu ifade de hiçbir şart yoktur. Alınan değerler direk tablolara nakledilirler. Bu tarz bir ifadeyi bilgilerin çoğaltılması gerekirken veya aynı bilgiyi içeren tablolar bulunup da bunlara bilgi aktarmamız gerektiğinde kullanabiliriz.

insert all
               into --tablo_adı-- values(employee_id,last_name,salary)
               into --tablo_adı2-- values(employee_id,last_name,salary)
select employee_id,first_name,salary  from employees; 

 Pivoting insert :

Pivotlama insert'ü bir tablonun bir boyutta pivotlanıp çevrilmesi demektir. Yukarıdaki örnekten farkı ise bilgilerin hep aynı tabloya kaydedilmesidir. Bu şekilde farklı bir bakış açısı getirilir.




insert all
               into --tablo_adı-- values(employee_id,last_name,salary)
               into --tablo_adı-- values(employee_id,last_name,salary)
select employee_id,first_name,salary  from employees;

Data Dictionary - 2

Data dictionary ile önce bir hatırlatma yaparak başlayalım. Data dictionary  sadece okuma izinli olup (read - only) sql ifadeleriyle sorgulanırlar. Bu tablolar üzerine dml ifadeleri uygulanmaz çünkü veritabanının bütünlüğünü tehlikeye atabilir. Veritabanının kendisi, bir sorgu geldiğinde bu data dictionary tablolarına bakar.

-Bu sorgularla bulunmak istenen nedir?

Bu sorgular ile genel veritabanıyla ilgili bilgiler bulunur. Kullanıcılara verilen yetkiler ,tablo bilgileri vs gibi önemli durumlar hakkında bilgi sahibi olunabilinir.

Bu tabloların adlandırılması ile ilgili bir standart vardır. Bu da herkesin kendine ait tabloları sorgulayabilmesini sağlar. Örneğin;

User_***  : kullanıcı view'ları
All_***     : kullanıcının giriş izni olduğu bütün view'lar;
DBA_*** : Database yöneticisinin sahip olduğu bütün view'lar.
V$_***    : Performans ile ilgili data

-Bu dictionary tablosunun yapısı nedir?

"Describe Dictionary" bu ifade bize data dictionary'nin yapısını gösterir. Bu tabloda sadece iki tane kolon vardır. Bir tanesi tablo adı , diğeri de yorumlardır.

Bu tablodan istediğimizi bulabiliriz. Aşağıdaki ifadede bize bunu göstermeketedir.

Select * from dictionary where table_name like '%USER%';

Dikkat edilmesi gereken bir durumda tablo adlarının case sensitive olması yani büyük küçük harf'ın bir değişiklik yaratıyor olmasıdır. Bize kolaylık sağlayan başka bir yapıda CAT view'ıdur. Bize bütün objetlerimizi gösterir.

select * from cat;

-Tablolara yorum(comment) nasıl eklenir?

Tablolara belirli anlamlar yüklemek veya karışık gibi gözüken durumları açıklamak için yorumlar yüklenebilir. Bu durum sütunlar içinde geçerlidir.

Comment on table employees is 'Employee_information';



Comment on column employees.first_name is 'First name';

Bu yorumları sonra da görmek için bakılması gereken tablolar ALL_COL_COMMENTS, ALL_TAB_COMMENTS veya USER_COL_COMMENTS,USER_TAB_COMMENTS 'dir.








20 Haziran 2012 Çarşamba

Oracle Veritabanı Yapısı

   Oracle Veritabanı, birim olarak kabul edilen verilerin bir araya toplanmasından oluşur. Veritabanının amacı birbiriyle ilişkili bilgilerin depolanması ve sorgulanmasıdır. Bir veritabanı sunucusu bilgi yönetimiyle ilgili problemleri çözmede anahtar roldedir. Genel olarak bir sunucu, büyük miktardaki veriye çok kullanıcılı bir ortamda, bir çok kullanıcının aynı anda aynı veriye ulaşabilmelerini güvenilir bir şekilde saglar ve bunu aynı zamanda yüksek bir performansla gerçekleştirir. Bir veritabanı sunucusu aynı zamanda izinsiz erişimi engeller ve hata durumundan kurtulmak için gereken en uygun çözümleri saglar. Veritabanı fiziksel ve mantıksal olmak üzere iki yapıdan oluşur. Fiziksel ve mantıksal yapı biribirinden ayrı oldugu için verinin fiziksel olarak saklanma şekli mantıksal yapıya erişimi etkilemez.


Fiziksel veritabani yapisi:
Fiziksel yapiyi olusturan 5 temel olmazsa olmaz bilesenleri su sekilde siralayabiliriz:
1.Datafiles
2. Control Files
3. Redo Log Files
4. Archive Log Files
5. Parameter Files
Simdi bunlara kisaca goz atalim.

DATA FİLES : Veritabanindaki tablolar, indeksler gibi tum mantiksal yapilarin , fiziksel olarak saklandigi dosyalardir. Her Oracle Veritabani bir ya da daha fazla sayida datafile icerebilir. Tablo, indeks gibi matiksal yapilarin barindirdigi fiziksel bilgileri tutar.Belli basli ozelliklerini soyle siralayabiliriz :
• Bir datafile sadece bir veritabani ile iliskilidir.
• Bir ya da daha fazla datafile mantiksal yapilardan olan tablesace’leri olustururlar.
• Gerektiginde kendilerini otomatik olarak buyutme (extend) ozellikleri vardir.
    Ornegin bir tablodan veri okunmak istediginde bu hafizada(memory) yoksa ilgili datafile’dan okunarak hafizaya cekilir ve okunur.Datalar uzerinde degisiklik yapildiginda ise hemen datafile’a bu degisiksik yansitilmaz. İ/O miktarini dusuk tutmak amaciyla bu islem “Database Writer Process(DBWn)” adi verilen bir arkaplan islemi (background process) tarafindan karar verilen anlarda yapilir.
Bir veri tabaninin performansli calisabilmesi icin fiziksel olarak ayri disklere yerlestirilecek minimum 5 datafile olmalidir. Bunlar:
       1. Oracle’in arka plandaki islemleri icin kullandigi sistem dosyasi,
       2. Sadece tablo kayitlarinin tutuldugu indeks dosyasi,
       3. Tablolarin indekslerinin tutuldugu indeks dosyasi ,
       4. Siralama islemleri icin veri tabaninin gecici olarak kullanildigi “temporary” dosyasi,
       5. Geri alma islemlerinin tutuldugu “rollback” dosyasi
Eger bu dosyalar fiziksel olarak ayri disk uzerinde tutulmaz ise parallel olarak okuma ve veri tabanina yazma yapilamayacagi icin performansi negatif olarak etkiler.

CONTROL FİLES : Controlfile , database kurulumu ile otomatik gelir ve database in fiziksel yapisini tutan ufak bir binary dosyasidir. Database adi , yaratilma zamani , datafile ve redo log gibi dosyalarin isletim sistemi uzerinde nerede oldugu ,guncel log sequence numarasi ve chechkpoint gibi bilgileri tutar.Database acikken controlfile var ve uzerine yazilabilir durumda olmalidir.Bu dosya olmadan database calismaz.Database open moda (acilmadan) gecmeden once mount moda gecer.Mount modda controlfile okunur ve controlfile in icindeki bilgiler ile database iliskilendirilir. Eger controlfile yok ise database mount olamayacaktir dolayisi ile acilmayacaktir.O yuzden bu dosyanin kaybolmamasi cok onemlidir.Dolayisi ile disklerde sorun olma ihtimaline karsi farkli disklerde yedek controlfile larin olmasi yararli olur.
         Dedigimiz gibi her veritabani oturumu acildiginda Oracle bu dosyayi kontrol ederek gerekli bilgileri alir. Eger veritabaninda fiziksel bir degisme olursa (yeni bir log dosyasi ya da veri dosyasi olusturulmasi gibi), yapilan degisiklikler Oracle tarafindan otomatik olarak kontrol dosyalarina yansitilir.
         Controlfile veritabaninin en onemli dosyalarindan biridir hatta en onemlisidir, veri tabaninin kimligi olarak tanimlayabiliriz. Her instance’in en az bir adet controlfile’i vardir. Guncel 11g kurulumlarinda 3 adet controlfile otomatik olusur.Kurulum esnasinda bunlari farkli disklerde olusturmak sizin icin cok avantajli olur.Bir controlfile kayip olsa bile diger yedeklerden kopyalayabilirsiniz. Sqlplus a girdikten sonra show parameter controlfiles komutu ile kendi controlfile larini ve hangi disklerde olduklarini gorebilirsiniz.

REDOLOG FİLES :  Yedekleme, kurtarma, geri getirme, eskiye gidebilme gibi veritabani uzerinde yapilan hangi islem olursa olsun, her zaman onemli olan verilerin ve veri butunlugunun kaybedilmemesidir. Bunun icin tam guvenlik vaad eden her veritabani ACİD (Atomicity Consistency İsolation Durability) denilen standarta uymak zorundadir. Bu standarti kisaca aciklarsak;
         Atomicity : Ya hep ya hic kuralidir. Bir islem ya tam olarak yapilip,
sonuclanir;  ya da hic yapilmaz. Yarida kalan islemler geri alinir. Yapilan islemler ise belirsizlige yer birakmayacak sekilde tamamlanmistir.
         Consistency : Veritabaninda tutarlilik esastir. Bir islemden once veritabani
tutarliysa, islem sonrasi da tutarli kalir. Eger veritabani tutarliligini bozan bir islem gerceklesiyorsa, islem geriye alinir.
         İsolation : Bir operasyon tarafindan yapilan degisikliklerin, diger islemler
tarafindan nasil goruntulenmesi gerektigini belirler. Ornek olarak iki kullanici ayni katalog nesnesini guncelliyorsa, ortamda sadece kendileri varmis gibi (izole) calisabilmeleri gerekir. Bir kullanici digerinin degisikliklerini etkilememelidir,
baskasinin degisikliklerinden de etkilenmemelidir.
         Durability : Commit edilen islemlerin veritabanina yazildiginin ve
kaybolmayacaginin garantisidir.
           Tum bu ozelliklerin saglanmasi oldukca guctur. Bunlari yapabilmek icin Write Ahead Logging (Transactional Log) ve Shadow Paging isimli yontemler kullanilmaktadir. Shadow Paging, veritabanina gercek girisin yapilmasindan once, kopyaya girisin yapilip, ardindan gercek degisiklige gidilmesi olarak dusunulebilir. Write Ahead Logging (WAL) ise yapilacak islemlerin oncelikli olarak bir log dosyasina yazilmasi ardindan, veritabanina ait dosyalara aktarilmasidir. WAL kavrami, Oracle’da online redo log olarak gecmektedir. Veri guvenligi icin yapilan her islem oncelikle online redo log diye isimlendirilen dosyalarin icerisine yazilir. Daha sonra ara ara bu redo log’lar Oracle’a ait veritabani dosyalarina yazilir.
       Oracle redolog dosyalarinin nereden geldigine kisaca degindikten sonra simdi detayli bir sekilde inceleyelim. Redolog dosyalari, veritabanindaki tum “commit” olmus degisikliklerin , kurtarma yapilirken kullanilmak uzere kaydedildigi dosyalardir. En az iki redo log grubu tanimlanir. Bu dosyalarin boyu ve grup sayisi veri tabani yaratilirken sisteme tanimlanir. Sonradan bu tanimlar degistirilebilmektedir. Redo log dosyalarinin cok kucuk olmasi , sistemde beklemelere neden olur. Cok buyuk olmasi da veri tabani acilirken yapilan otomatik kurtarma isleminin cok uzun surmesine yol acar ve aktif redo log dosyalarinin silinmesi yada bozulmasi durumunda da daha fazla veri kaybi olmasina neden olur.        
      Online redolog dosyalari veriye yapilan tum degisiklik islemlerini tutmakla yukumludur. Datafile’lara (bir sekilde) degisen bilgi yazilamadigi durumlarda redo loglardan bu islemler gorulebilir ve yapilan islemin kaybi onlenir. Bu dosyanin amaci ozetle sistem ya da donanim kaynakli (harddisk gocmesi vs.) olasi hatalarda datafile’lara kalici sekilde yazilamayan bilgileri kurtarmaktir. Ornegin bir elektrik kesintisinde henuz datafile’lara yazilmayan ve memory de bulunan bilgiler kaybedilir.Sistem tekrar ayaga kalktiginda Oracle ilk once redo log ‘lara bakar. Kalici olarak datafile’a yazilamayan bilgi oldugunu gorur ve yarim kalan islemi sonlandirir.Bu sayede veritabani elektrik kesintisi olmadan evvelki konuma gelinmis olur.
       Sistemin guvenligi acisindan her gruptaki redo log’u iki kopya olarak veri tabani farkli disklerde olusturmak mantikli olandir. Redo log’lar kesinlikle raid disk uzerine konulmamalidir. Cunku redo log dosyalari uzerine surekli yazma yapilmaktadir ve raid diskler yazma isleminin yavaslatir.
           Redo log dosyalari bir dongu icersindedir. Bir gruptaki redo log doldugunda otomatik olarak diger gruba gecer ve islem bu sekilde devam eder. Eger veri tabani arsiv modda ise bu dolan redo log dosyasinin bir kopyasi arsiv.log olarak kopyalanir ve kurtarma amacli saklanir. 
    
Oracle, Redo Log’lara ve Veritabani Dosyalarina Nasil Yazar?
           Bir veritabani iki veya daha fazla redo log dosyasindan olusur. En az iki olmasinin nedeni, archivelog seklinde calisiyorsaniz, redo log dosyalarindan bir tanesi kullanilirken digeri arsive cikilabilsin diyedir. Boylece her zaman calisabilir olmayi saglar. Gerci asiri yogun bir sistemde sadece iki adet redo log kullaniyorsaniz, "Thread 1 cannot allocate new log, sequence #" seklinde sik sik hata alirsiniz. Cunku redo log’larin arsive cikmasi icin yeterli zaman olmayacaktir. Online redo log’lar arasindaki gecis, sirkuler sekilde asagidaki gibi gerceklesmektedir.
    Yukarida verilen islemler LogWriter tarafindan saglanmaktadir. LGWR, log buffer’daki redo bilgilerini, redo log dosyalarina aktarmaktan sorumludur. Herhangi bir zaman diliminde, Oracle redo log dosyalarindan sadece bir tanesini kullanir. Kullandigi redo log dosyasi doldugunda, bir sonraki redo log dosyasina gecilir. Fakat bu gecis yapilirken, siradaki online redo log iceriginin datafile’lara yazilip yazilmadigi ve bu dosyadan arsiv uretilip uretilmedigi kontrol edilir. Her iki islemde bitene kadar bu redo log dosyasi kullanilmayacaktir. LGWR, bir sonraki redo log dosyasina gectiginde, bir onceki redo log dosyasinin durumunu controlfile icinde CURRENT’ten ACTİVE’e cevirir. Akabinde DBWR (Database Writer) islemini durumdan haberdar ederek, bir onceki redo log dosyasinda checkpoint islemi yapmasini gerektigini belirtir. DBWR tarafindan checkpoint islemi tamamlanip, redo log’daki degisiklikler veritabani dosyalarina yazildiginda CKPT process’i cagrilir. CKPT islemi veritabani dosyalarinin header bilgilerini ve check point bilgisini (sadece) controlfile icerisinde gunceller.
       Burada dikkat edilmesi gereken, CKPT’in redo log bilgisine dair bir guncelleme yapmamasidir, isminden de belli olacagi gibi sadece checkpoint islemiyle ilgilenir.CKPT islemi tamamlandiginda, LGWR islemi cagrilarak controlfile icerisinde redo log bilgisini ACTİVE’den İNACTİVE’e ceker. (Bu guncelleme, v$log.status bilgisini saglar.) Bu degisiklik dusuk onceliklidir, cunku bu konuyla tek ilgilenen process LGWR’in kendisidir. Buradaki status bilgisine gore, LGWR redo log dosyasinin tekrar kullanilip kullanilmayacagina karar verir. Eger yeterli sayida redo log dosyasi varsa, herhangi bir is bloklanmaz. Ancak yogun bir ortamda az sayida redo log dosyasi varsa, daha once belirtildigi gibi "Thread 1 cannot allocate new log, sequence #" seklinde sik sik hata alinacaktir.


Redo Log Dosyalarinin Durumlari
Redo log dosyalarinin bulunabilecegi bazi durumlar su sekildedir :
     - CURRENT : Redo log dosyasinin kullanimda oldugunu gosterir.
     - ACTİVE : Current redo log dosyasi degismistir. Ancak daha once kullanimda olan redo log dosyasinin icerigi henuz veritabanina aktarilmamistir. Yazma islemi devam etmektedir. LGWR tarafindan active’lik durumu bir sure sonra, İNACTİVE’e cekilir. Checkpoint komutuyla, yazma isleminin yapilmasini tetiklemek mumkundur.
     - İNACTİVE : Kullanimda olmayan redo log dosyalarini ifade eder.
     - UNUSED : Đlgili redo log dosyasinin henuz hic kullanmadigini gosterir. Yeni eklenen redo log dosyalarini, unused olarak gorursunuz.
     - İNVALİD : Dosyanin erisilemez (ya da bozuk) oldugunu isaret eder.
     - STALE : Dosya tamamlanmamistir. ABORT ile ya da beklenmeyen ani veritabani kapanmalarindan kaynaklanmaktadir.

ARCHİVELOG FİLES : Adindan da anlisilacagi uzere arsiv dosyalarina verilen isimdir. Oracle veritabani ARCHİVELOG modunda ise redo log dosyalari bu dosyalara otomatik olarak arsivlenir.


PARAMETER FİLES : Hemen hemen her sistem gibi Oracle da calismaya baslayabilmek icin bir takim parametrelere ihtiyac duyar ve bu parametreler belirli dosyalardan okunur. Bu paramtreler bir Oracle İnstance’in hangi ayarlarla calisacagini belirleyen parametrelerdir. Kullanilan tum parametreler SQL*PLUS a baglanilip SHOW PARAMETERS komutuyla goruntulenebilir.
      Oracle ilk basladiginda parametre dosyalarini okur ve sisteme dair bircok ayara buradan ulasir. Ayni anda calisabilecek islem adedi; arsiv dosyalarinin lokasyonunun neresi olacagi; kac dakikada bir arsive cikilacagi ; control file’larin lokasyonlari ; backgroud dump, user dump gibi klasorlerin nerelerde
konumlandirildigi vb. bilgiler parameter dosyalari icinde saklanir. Bu degiskenlere parametre denmektedir ve hep birlikte parametre dosyasini olustururlar. Ancak parametre dosyasi okunup gerekli bilgiler alindiktan sonra, control file’lara erisilip, Oracle datafile’lar (veritabani dosyalari) kullanilmaya baslanir.
     Oracle’da iki cesit parametre dosyasi vardir; bunlardan birisi bizim uzerinde degisiklik yapabilecegimiz metin tabanli olan PFİLE ( Parameter File )’dir. Digeri ise binary bicimde oldugu icin uzerinde degisiklik yapamayacagimiz SPFİLE ( Server Parameter File )’dir. SPFİLE, Oracle 9i ile beraber gelmistir. PFİLE  ise ilk surumden beri kullanilmaktadir.
     
Simdi bu dosyalari biraz daha yakindan taniyalim :
   1-    Oracle PFİLE (Parameter File):
      Kullanicilarin uzerinde degisiklik yapabildigi, metin tabanli dosyalardir. Genellikle isimleri init.ora dir. Pfile dosyasi, icerisinde parametre olarak nitelendirilen veritabani ayarlarinin bulundugu dosyadir. Bu parametreler, veritabaninin hangi ayarlarla baslatilacagini belirler. Ornegin, “control_files” parametresi, kontrol dosyalarinin dizinlerini tutarken;  “audit_file_dest” parametresi audit dosyalarinin dizinlerini tutmaktadir; “open_cursors” parametresi ayni anda acik olabilecek maksimum cursor sayisini tutarken “processes”  parametresi ise ayni anda calisabilecek islem sayisini tutmaktadir.

     2-    Oracle SPFİLE (Server Parameter File):                                                                         Oracle 9i ile gelen parametre dosyasi tipidir. PFİLE, text-based yapidayken ve uzerinde herhangi bir metin editoru ile degisiklik yapabilirken; SPFİLE, binary yapiya sahiptir ve degisiklikler sadece ALTER SYSTEM SET komutlariyla gerceklestirilebilir. SPFİLE kullanimi , automatic performance tuning tarafindan tavsiye edilmektedir cunku getirdigi pek cok avantaj vardir.

  • SPFİLE, dosyadaki veya veritabanindaki herhangi  bir yapisal degisiklik durumunda RMAN tarafindan otomatik olarak yedegi alinabilir duruma getirilmistir. Boylece her degisiklikte tekrar tekrar yedek almak durumunda kalmayiz.
  • Veritabanini kapatip acmaya gerek duymadan kalici parametrelerin degerlerini degistirebiliriz. Boylece veritabani gercek zamanli olarak yeni parametrelere gore davranabilir. Ayrica veritabani kapatilip acildiktan sonra da ayni sekilde korunmaya devam eder. PFİLE dosyalarindaki degisiklikler, sistem yeninden baslatilinca siliniyordu.
  • SPFİLE sayesinde automatic tuning rahat ve hizli bir sekilde icsel olarak yapilabiliyor. SPFİLE kullanmiyorsaniz automatic tuning yapilamaz.    SPFİLE Degerlerini Degistirmek
       SPFİLE’da parametre degisikligini, PFİLE’da yaptigimiz gibi yapamayacagimizdan bahsetmistik. Cunku SPFİLE binary –ikilik– formatta bir dosya turudur ve bir metin editorunde acip degistirilmesi olanakli degildir. Giris kisminda parametre degistirme konusuna da deginmistik. Simdi biraz daha detaylandiralim.
Oracle veritabani bircok parametrenin online olarak degismesine olanak vermektedir. Bunun anlami,parametre degisikliklerinin gecerli olmasi icin isletim sisteminin yeniden baslatilmasina gerek olmamasidir. Bu oldukca yararli ve gerekli bir ozellik! Yabanci bir siteden aldigim ornek uzerinden gidelim;
        SQL> ALTER SYSTEM SET timed_statistics=TRUE
        COMMENT='Changed by Frank on 1 June 2003' SCOPE=BOTH SİD='*';
     
         Bizi burada en cok ilgilendiren kisimlari koyu harflerle gormek mumkun. ALTER SYSTEM SET dedikten sonra parametre adi belirtip, yeni deger veriyoruz. SCOPE kisminda uc deger verilebilir;
         ‐ MEMORY: Ayarlanan deger sadece gecerli olan Oracle 'instance' icin ayarlanacaktir. Bunun anlami, veritabanini yeniden baslattiginizda girmis oldugunuz degerin kaybolayacagidir. Ancak Oracle kapanana kadar girilen deger kalir.
         ‐ SPFİLE: Girdiginiz deger veritabaninin bir sonraki baslamasinda gecerli olacaktir.


       SPFİLE’i, PFİLE’dan Yararlanarak Yeniden Olusturmak
       Veritabaninda bir karar alindi ve bir takim degisiklikler yapmaniz gerekiyor diye dusunelim. Ornegin arsive cikilacak dosyalari /data2/archive yerine artik, /data5/archive altina kopyalamamiz gereksin.Bu gibi bir durumda spfile’i bir pfile’a donusturmek; ardindan pfile icinde degisiklik yapmak ve son olarak pfile’dan tekrar spfile yaratmak gerekir. Adim adim asagidaki islemleri uygulayalim.
    1-  SPFİLE dosyasindan, metin formatinda bir PFİLE olusturuyoruz:
                SQL> create pfile='/tmp/deneme.text' from spfile;
    2-     PFİLE dosyasini acip, log_archive_dest parametresinde ilgili degisiklikleri yapiyoruz.
      SQL> ! vi /tmp/deneme.text
      ...
    3-     Calismakta olan bir veritabaninin spfile'ini ezemeyecegimiz icin veritabanini kapatiyoruz.
      SQL> shutdown immediate;
    4-     Degisiklik yaptigimiz pfile'i kullanarak yeni bir spfile olusturuyoruz.
      SQL> create spfile from pfile='/tmp/deneme.text';
    5-     Veritabanini aciyoruz.:
      SQL> alter database open;


       SPFİLE’i direkt degistiremedigimiz icin, onu once bir PFİLE’a donusturup, ilgili degisikligi yaptik ve sonrasinda yeni bir SPFİLE yarattik. Biraz zahmetli bir is; ancak her parametre degisiminde boyle bir sey yapilmasi gerekmiyor. Cogu durumda, veritabanini yeniden baslatmadan bircok parametreyi degistirebiliyorsunuz. Ancak veritabanini kapatip, alter system olmaksizin parametre degistirmek isterseniz yukaridaki adimlari izlemeniz gerekiyor. Cok fazla kullanilmayacak, ancak bilmenizin yararli olacagi bir diger konuda, gerek SPFİLE’in gerekse PFİLE’in default olmayan bir lokasyonda bulunmasinda isinize yarayabilir. Asagidaki komutla, /tmp/ altindaki pfile’i kullanarak, /data2/ altinda spfile yedegi olusturabilirsiniz:
SQL> create spfile='/data2/spfile_yedek.ora' from pfile='/tmp/deneme.text';
Mantiksal Veritabani Yapilari:
     Oracle veritabanindaki mantiksal yapilar sema nesneleri, veri bloklari, extentler, segmentler ve tablespacelerdir. Simdi bunlari tek tek inceleyelim :
Semalar ve Sema Nesneleri (users and users’s objects)
     Sema temel olarak veritabani nesnelerinin olusturduğu topluluğa verilen isimdir. Bir semanin sahibi bir veritabani kullanicisidir ve sema da onun ismiyle anilir. Bir baska ifade sekli ile veritabani uzerinde kullanicinin belirli isleri yapabilmesi icin tanimlanan nesneler; tablolar, goruntuler, siralar, esanlamlar, indeksler, kumeler, veritabani bağlantilari, prosedurler, fonksiyonlar ve paketlerden olusur. Bir sema ise bu nesnelerin olusturduğu gruptur.
     Sema nesneleri mantiksal veri depolama yapilari olarak bilinir ve sema nesneleri direk olarak veriyle baglantili olan mantiksal yapilardir. Fakat sema ve tablespace arasinda bir bağlanti yoktur. Ayni semadaki nesneler farkli tablespace’lerde bulunabileceği gibi, ayni tablespace’lerin icinde farkli semalara ait nesneler de bulunabilir.
 Baslica sema nesneleri sunlardir:
     - Tablolar : İliskisel Veri Tabani Yonetim Sistemleri’nde veriler tablolar icerisinde yer alir. Oracle veritabanin da en temel veri saklama birimidir tablolar. Her tablo bir isimle tanimlanir ve her biri  bir “kayit” olarak adlandirilan satirlar ile bu kayitlardaki verilerin ozelliklerini belirleyen sutunlardan olusur. Her tablo bir ya da daha fazla sutuna sahip olabilir. Her sutunun bir adi ve veri tipi vardir.
     - Viewler : Viewler bir veya birden fazla tablo yada view'deki verinin ozellestirilmis bir gosterim seklidir. Bir view ayni zamanda saklanmis bir sorgu olarak da degerlendirilebilir. Viewlar aslinda veri icermezler. Bunun yerine verilerini kendilerine temel teskil eden ve view’in temel tablolari olarak adlandirilan tablolardan cikartirlar. Tablolar gibi viewlerin de bazi kisitlamalar olmakla birlikte verisi sorgulanabilir, degistirilebilir, silinebilir ve yeni veri girilebilir ama view’lerin adi uzerinde goruntu almak icin kullanilmasi asil amacidir. View’ler uzerinde yapilan her islem aslinda view’in temel tablolarini etkiler. Viewler tablonun onceden belirlenmis satir ve kolonlarina erisimi kisitlayarak, tablo guvenliginde ekstra bir seviye saglar.
     - İndeksler : İndeksler tablo ve cluster’lar icin kullanilan veri tabani nesneleridir. Burada amac aranilan bir kayda daha hizli erisimdir. Ozellikle uzerinde cok arama yapilan alan veya alanlar uzerinde indeks olusturmak cok etkilidir.  İndeks olusturulduğunda ilgili tablonun kayitlari yer değistirmez. Sadece ilgili kayitlarin kayit numaralari olarak adlandirilan “rowid” ‘ler alinarak siralama yapilir. Bir tablo uzerinde olusturulabilecek indeks sayisi sutunlarin kombinasyonlari farkli olduğu muddetce sinirsizdir. Bir sutun diğer sutunlarla değisik kombinasyonlarda kullanildiği muddetce birden fazla indeks icerisinde yer alabilir.  Ayni sutun kombinasyonlarinin indeksi, fakli indeks ismi kullanarak olusturulmaya calisilsa bile gerceklestirilemez.
İndeksler mantiksal ve fiziksel olarak olusturulduklari tablodan bağimsizdirlar. Eğer bir indeks silinirse, ilgili tablo zarar gormez, calismaya devam eder. Fakat indeks olmadiği icin veri erisim suresi artacaktir. Oracle, bir indeks olusturulduğunda onu otomatik olarak kullanmaya baslar ve  indeksin olusturulduğu tablodaki silme, guncelleme ve ekleme islemleri indekse otomatik olarak yansitilir.
     - Kumeler : Kumeler, fiziksel olarak birlikte saklanan bir veya birden fazla tablonun olusturdugu gruba denir.Bir baska ifade ile Ayni anda sorgulanan birden fazla tablonun bir arada kaydedilmesidir. Bu yapi, beraber sorgulanan tablolarda hiz kazanmak icin cok onemlidir. 
      Bu tablolar ortak kolonlar icerir ve genelde birlikte kullanilir. Birbiriyle iliskili satirlar fiziksel olarak bir arada saklandigi icin, disk erisim suresinde bir kazanc saglar. İndekslerde oldugu gibi kumeler uygulama dizaynini etkilemez.

Veri Bloklari, Extentler ve Segmentler
     Veri bloklari, extentler ve segmentlerden olusan mantiksal saklama yapilari sayesinde Oracle'in disk alani uzerinde ayrintili bir kontrolu vardir.
     - Oracle Veri Bloklari : Veri bloklari, Oracle veritabaninda verinin saklandigi en kucuk yapidir. Bir veri blogu, fiziksel veritabani alaninda belirli sayidaki byte'a karsilik gelir. Standard blok buyuklugu DB_BLOCK_SİZE baslangic parametresiyle belirlenir. Bunun disinda en cok 5 adet blok buyuklugu belirtilebilir.
     - Extentler : Mantiksal veritabani alanindaki bir sonraki seviye extentlerdir. Bir extent, belirli sayidaki ardisik veritabani blogundan olusur, bir seferde alinir ve belirli bir tipteki bilgiyi tutmak icin kullanilir.
     - Segmentler : Extentlerin uzerindeki mantiksal veritabani depolama seviyesi segmentlerdir. Segment, belirli bir mantiksal yapi icin tahsis edilmis extentler kumesidir. Bir segmentin icindeki tum extentler doldugunda, Oracle dinamik olarak yeni yer tahsis eder. Baska bir deyisle, bir segmente ait butun extentler doldugunda, Oracle bu segment icin yeni bir extent tahsis eder. Extentler gerek duyuldugunda tahsis edildiginden, segmente ait extentlerin ardisik olma zorunluluklari yoktur. Dort cesit segment tipi vardir:
     1- Veri Segmenti : Her kumelenmemis tablonun bir segmenti vardir. Tablonun butun verisi, veri segmentinin extentlerinde tutulur. Bolumlenmis tablolarda, her parca icin bir veri segmenti bulunur. Her kume icin bir veri segmenti vardir. Kumedeki her tablonun verisi kumeye ait olan veri segmentinde tutulur.
     2- İndeks Segmenti : Her indeksin kendi verisinin tutuldugu bir indeks segment vardir. Bolumlenmis bir indeksin her bolumune ait bir indeks segment vardir.
     3- Temporary segment : Temporary segmentler bir SQL cumlesinin isini tamamlamak icin gecici bir alana ihtiyac duyuldugunda Oracle tarafindan yaratilir. SQL cumlesinin calistirilmasi tamamlandiginda temporary segment yeniden kullanilabilmesi icin sisteme geri verilir.
     4- Rollback Segment : Oracle veritabaninin guvenliği acisindan “Select”, “İnsert”, “Update” ve “Delete” gibi islemlerin yedeğini almaktadir. Alinan bu yedeklerin konulduğu yerlere geri alma parcasi denir. Kullanici bu tip islemleri yaptiktan sonra “Rollback” komutunu uygularsa, yaptiği değisiklikler geri alma parcalarindan getirilir ve boylece kayitlar eski haline donmus olur. Kullanici “Commit” komutunu kullandiktan sonra yaptiği değisiklikler geri alma parcalarindan geri getirilemez.

Asağida veri bloklari, extentler ve segment iliskisini gosteren bir sekil yer almaktadir.
 Tablespace’ler
      Her veritabani, tablespace adi verilen ve biribiriyle iliskili mantiksal yapilari gruplayan mantiksal depolama birimlerine bolunmustur. Ornegin, tablespaceler genelde yonetimsel isleri kolaylastirmak icin butun uygulama nesnelerini birlikte gruplar. Tablespace icindeki tum mantiksal yapilari fiziksel olarak tutmasi icin bir veya birden fazla datafile yaratilir. Datafilelarin toplam buyuklugu, tablespace'in toplam depolama kapasitesini verir. Tablespacelerin toplam depolama kapasitesi, database'in toplam depolama kapasitesini verir. Bir tablespace online yada offline olabilir. Tablespaceler, kullanicilarin icindeki veriye ulasabilmesi icin, genelde online durumdadir. Fakat bazi durumlarda veritabaninin bir kismini erisilemez hale getirmek icin tablespacelerin bir kismi offline hale getirilir. Bu bircok yonetimsel islerin yapilmasini kolaylastirir.
Asagidaki sekil veritabani, tablespace ve veri dosyalari arasindaki iliskiyi aciklamaktadir.

Oracle Data Dictionary

Her Oracle veritabaninin bir veri sozlugu vardir. Veri sozlugu, Oracle veritabani ile ilgili bilgilerin yine Oracle veritabaninda tablolar ve goruntuler halinde saklanmasiyla olusur. Veritabani ile ilgili bu bilgiler kullanicilar, haklar, veritabani nesneleri, tablo kisitlamalari vb. bilgilerinden olusur. Veri sozlugu Oracle veritabanin en onemli bolumudur. Veritabani hakkindaki tum bilgiler veri sozlugunden SQL komutlari yazarak ogrenilebilir. Veri sozlugu, veritabani kurulurken standart olarak olusturulur ve yapilan degisiklikler otomatik olarak veri sozlugune yansitilir. Ornegin bir kullanici bir tabloya bir alan eklerse, veri sozlugunde o tabloya iliskin yapi, kullanici farketmeden degistirilir boylece veri sozlugunden veritabani hakkinda surekli olarak guncel ve saglikli bilgi almak mumkun olur. Veri sozlugu icerisindeki bilgiler SQL komutlariyla sorgulanip gorulebilir. Fakat hicbir kullanici veri sozlugunu degistiremez, ekleme yapamaz ve kayit silemez. Veritabani olusturulurken olusturulan veri sozlugu tablolari SYS adli kullaniciya aittir. Veri sozlugu tablolari icin goruntuler olusturulmustur. Tum kullanicilar haklari oldugu muddetce bu goruntulerden bir ya da birkacini sorgulayabilirler. Veri sozlugu goruntuleri, baslarindaki on eklerine gore uc gruba ayrilir :
  • USER_xxx : Veritabanina o an bagli olan kullanicinin sahip oldugu nesneler ile ilgili goruntulerdir.
  • ALL_xxx : Veritabanina o an bagli olan kullanicinin sahip oldugu ve baskalarina ait olan ve kendisine kullanma hakki verilmis olan tum nesnelerle ilgili goruntulerdir.
  • DBA_xxx : DBA (veritabani yoneticisi) veya DBA hakkina sahip kullanicilarin gorebilecegi goruntulerdir.
Sik kullanilan bazi data dictionary objeleri ve aciklamalari :
USER_TABLES :Kullanicilarin sahip oldugu tablolarin yapisini gosteren goruntudur.
USER_SEQUENCES : Kullanicinin sahip oldugu siralar hakkinda bilgi iceren goruntudur.
USER_VİEWS
: Kullanicinin sahip oldugu goruntuler hakkinda bilgi iceren goruntudur.
ALL_OBJECTS
: Kullanicinin erisebilecegi butun nesneler hakkinda bilgi iceren goruntudur.
DBA_USERS
: Veritabanindaki butun kullanicilar hakkinda bilgi iceren goruntudur.
DBA_TABLESPACES
: Veritabanindaki butun tablo uzaylari hakkinda bilgi iceren goruntudur.

Data Dictionary Kullanimi :
   1) Oracle; kullanicilar, sema ve objeler hakkinda bilgi almak icin kullanir.
   2) Oracle; gerceklesen her DDL(Data Definition Language) islemi sonunda Data Dictionary’i duzenler.
   3) Kullanicilar; sadece bilgi amacli olarak kullanirlar.
     Bunu bir ornek ile aciklamak gerekirse bir tablo olusturdugumuzu dusunelim.Bu tablonun hangi kolonlardan olustugu, kolonlarin tipleri, tablonun segment, extents ve kullanici haklari gibi bilgileri Oracle tarafindan bilinmeliki olusturma asamasindan sonra gerceklesecek tabloyu ilgilendiren operasyonlar saglikli bicimde gerceklestirilsin.Bu amacla ornekte gecen tum bilgiler ve fazlasi Data Dictionary e yazilir ve olusturma yapildiktan hemen sonra dictionary sorgulandiginda bu bilgiler gorulebilir.Bu bilgiler sadece Oracle a degil kullanicilara da lazim(dir) olabilir.Bu amacla genel olarak data dictionary bilgileri kullanicilara aciktir bazilari ise ozel kullanici hakki ister.
Bu kadar sik kullanilan bir yapinin memory de tutulmasi mantikli olcaktir, nitekim Oracle bu bilgileri SGA(System Global Area)’da “dictionary cache” denilen yerde tutar. Data Dictionary bilgilerine klasik SQL sorgulariyla ulasilir.Yukarida da bahsedildigi uzere bazisina tum kullanicilar erisebilirken bazisi icin ozel kullanim haklari tanimlanmalidir.
Dynamic Performans Tables and Views:
      Oracle’in islemler gerceklestirirken gerekli bilgileri ve o anki veritabani aktivitelerini tutmak icin kullandigi tablolardir. ”Fixed Views” da denir ve DBA tarafindan bile degistirilemez ya da silinemezler. SYS altinda bulunurlar ve isimleri “V_$” ile baslar. Bunlara verilen es anlamli isimler ise “V$” ile baslar. Ornegin V$DATAFİLE veritabaninin datafile’lari hakkinda bilgileri  icerir ve ornegin V$FİXED_TABLE veritabaninin kullandigi “Dynamic Performans” tablolari  ve View’lari hakkinda bilgi verir.

DATA DİCTİONARY İSTATİSTİGİNİN ALİNMASİ
    Data dictionary'nin istatistigini iki farkli metodla alabiliriz. Asagidaki PL/SQL kodlarini kullanarak veya direkt Sqlplus'dan begin/end satirlarini silip basina “exec” ibaresini ekleyerek calistirabilirsiniz. İstatistik alirken dikkat etmeniz gereken konu istatistik sonucunda bir histogram olusturulmasidir. Bu histogram‘in olusturulmasi icin komut icersinde mutlaka “Gather Auto” opsiyonu verilmelidir.

begin
dbms_stats.gather_dictionary_stats(options=> 'GATHER AUTO');
end;

veya

begin
dbms_stats.gather_schema_stats (ownname=> 'SYS' ,options=> 'GATHER AUTO');
end;

ya da
exec dbms_stats.gather_dictionary_stats(options=> 'GATHER AUTO');