Oracle Veritabanına Kuşbakışı – 3.Ders

@ 16 Ocak 2010 tarihinde yazdı. 3 Yorum yapıldı.

ORACLE’DA BELLEK YAPISI(MEMORY STRUCTURE) VE ARKA PLAN İŞLEMLERİ(BACKGROUND PROCESSES)

Bu bölüm Oracle veritabanının yönetiminin sağlanmasında kullanılan işlemleri ve bellek yapılarını içermektedir. Tüm bellek yapıları veritabanının oluşturulduğu bilgisayarın ana belleğinde yer almaktadır. Bu bölüm birden fazla kullanıcının aynı anda veritabanına erişip işlemlerini gerçekleştirmesinin nasıl olduğunu anlamak açısından önemlidir. Aşağıdaki şekil bu bölüm için temel alınacaktır.

Bellek Yapıları

Oracle işlemlerini gerçekleştirmek için bellek yapıları oluşturur ve bunları kullanır. Örneğin bellek çalışan program kodlarını ve kullanıcılar arasında paylaşılan verileri depolar. Oracle’da birkaç adet bellek yapısı mevcuttur: SGA(System Global Area), veritabanı tamponları(database buffers), redo log tamponları(redo log buffers) ve paylaşım havuzunu(shared pool) içerir.

SGA(System Global Area)

SGA bir oracle veritabanı oturumu için gerekli verileri ve kontrol bilgilerini içeren paylaşımlı bellek bölgesidir. SGA ve Oracle arka plan işlemleri bir Oracle veritabanı oturumunu oluşturur. Veritabanı oturumu başladığında  Oracle SGA’yı oluşturur ve veritabanı kapatıldığında yok eder. Her bir veritabanı oturumunun kendine ait bir SGA ‘sı vardır. Oracle’a bağlanan kullanıcılar SGA içerisinde verileri paylaşımlı olarak kullanırlar. Yüksek performansın sağlanabilmesi için SGA’nın olabildiğince büyük olması gerekir. SGA büyük olursa bu alanda daha fazla bilgi depolanabilir ve sabit diske erişim sayısı azalır.  SGA içerisinde depolanan bilgi veritabanı tamponları, redo log tamponları ve paylaşım havuzunu içeren birkaç tip bellek yapısına bölünmüştür. Bu alanlar sabit büyüklüktedir ve veritabanı açılırken oluşturulurlar.

Veritabanı Tampon Belleği(Database Buffer Cache)

En son kullanılan veri blokları SGA içerisinde veritabanı tamponu denilen yerde depolanır. Bu veritabanı tamponlarının hepsi veritabanı tampon belleğini oluşturur. Veritabanı tampon belleği değiştirilmiş ve değiştirilmemiş bilgileri içerir. Son kullanılan verilerin ya da çok kullanılan verilerin bellekte depolanması sayesinde sabit disk erişim işlemleri azalır.

Redo Log Tamponu(Redo Log Buffer)

SGA’nın redo log tamponu veritabanı verileri üzerinde yapılan son değişiklikleri depolar. Redo log tamponunda depolanan değişiklik bilgileri veritabanı  kurtarma işlemlerinde gerekli olan redo log dosyalarına kaydedilirler.

Paylaşım Havuzu(Shared Pool)

Paylaşım havuzu SGA’nın paylaşımlı SQL alanları gibi bellek yapılarını içeren kısmıdır. Paylaşımlı SQL alanı veritabanına girilen her farklı SQL komutunu işlemek için gerklidir. Her bir paylaşımlı SQL alanı aynı komutu işleyen birden fazla uygulama tarafından kullanılır. Burada amaç diğer kullanıcılar için daha fazla paylaşımlı bellek alanı bırakabilmektir.

Geniş Havuz(Large Pool)

Geniş havuz SGA içerisinde isteğe bağlı bir alandır. Bu alan yedekleme, yapılan işlemleri geri yükleme, sunucunun giriş/çıkış işlemleri vb. işlemlerde daha geniş bellek ihtiyacı için kullanılan alandır.

Program Genel Alanı(PGA)

PGA sunucu işlemleri için veri ve kontrol bilgilerini içeren bellek tamponudur. Bir sunucu işlemi başlatıldığında PGA Oracle tarafından otomatik olarak başlatılır.  Genellikle PGA bir kullanıcı ya da bağlantı için ayrılan belleğe denir. Bu bellek üç bölümü içerir: Birincisi yığın uzayı’dır(Stack Space). Yığın bir her bir bağlantıya ait değişkenleri, dizileri vb. yapıları tutan bellektir. İkincisi bağlantı bilgisi’dir(Session Information). Bağlantı bilgisi, “multitheraeded” sunucu olarak adlandırılan bir bilgisayarda çalışılmıyorsa PGA alanında, aksi halde SGA da depolanır.(“multithreaded” uygulamalar aynı kod ve data segmenti kullanıp, farklı program sayacı, kayıtlık ve yığın kullanan uygulamalar için kullanılır.) Üçüncüsü Özel SQL alanıdır. Bu alanda farklı amaçla kulanılan bazı değişkenleri tutmak için kullanılır.

İşlem Yapısı(Process Architecture)

İşlem, işletim sistemlerinde, belli bir işi yapmak için bir adımlar dizisinin çalıştırılması olarak adlandırılmaktadır. Normalde her işlemin çalışabilmesi için bellekte kendine özel bir yeri vardır. Oracle’da da iki tür işlem vardır. Kullanıcı işlemleri(User Processes) ve Oracle İşlemleri(Oracle Processes).

Kullanıcı İşlemleri(User(Client) Processes)

Bir kullanıcı işlemi bir uygulama ya da yazılımın çalıştırlmasını sağlamak için oluşturulur. Kullanıcı işlemleri program arayüzü(program interface) yoluyla sunucuyla iletişim işlemlerini sağlar.

Program arayüzü bir kullanıcı işlemlerinin sunucu ile ileitişim kurmasında kullanılan mekanizmalar olark bilinir. Program arayüzü veritabanı ile bir Oracle Forms ya da Reports programı arasında iletişim standartlarını sağlar.

Oracle İşlemleri(Oracle Processes)

Oracle işlemleri diğer işlemler tarafından işlemin belli adımlarını gerçekleştirmesi için çağrılırlar. Oracle işlemleri de sunucu işlemleri(Server Processes) ve arka plan işlemleri(Background Processes) olarak ikiye ayrılır.

Sunucu İşlemleri(Server Processes)

Oracle, veritabanına bağlanan bir kullanıcının isteklerini gerçekleştirebilmek için sunucu işlemlerini başlatır. Örneğin bir kullanıcının, o an SGA’nın veritabanı belleği’nde yer almayan bir bilgiyi sorgulaması, veri bloklarının veri dosyalarından okunup SGA’ya getirilmesini sağlayan sunucu işlemini başlatır. İstemci/Sunucu mimarili sistemlerde kullanıcı işlemleri ve sunucu işlemleri ayrı bilgisayarlarda çalıştırılır.

Arka Plan İşlemleri(Background Processes)

Oracle her veritabanı için ayrı olarak bir dizi arka plan işlemleri oluşturur.  Oracle veritabanına bir anda birden fazla kullanıcının bağlandığını ve belli programları çalıştırdığını düşünelim. Oracle programlar tarafından oluşturulan bu kullanıcı işlemleri’ni gerçekleştirmek için arka planda bazı işlemler gerçekleştirir. Her bir veritabanı kendi arka plan işlmelerine sahiptir. Şimdi bu arka plan işlmelerinin neler olduğuna bakalım:

Veritabanı Yazıcısı(Database Writer- DBWn)

Veritabanı yazıcısı, veritabanı tampon belleğindeki değiştirilmiş veri bloklarını veri dosyalarına yazmakla görevlidir. Normalde tek bir veritabanı yazım işlemi bir çok sistemde yeterli olmasına rağmen, birden fazla yazım işlemi tanımlanabilir. Bu işlemlere DBW0…DBW9 şeklinde isim verilir. Veritabanı açılırken bu DB_WRITER_PROCESSES parametresi ile veritabına bildirilir.

Bir kullanıcı yaptığı değişiklikleri “commit” komutuyla onayladığında veritabanı yazıcısı bu değişiklikleri hemen veri dosyalarına kaydetmez. Veritabanı yazıcısı veri dosyalarına yazma işlemini kendi belirler ve ya SGA içerisine çok miktarda başka verilerin alınması gerektiği zaman ya da çok az veritabanı tamponu kaldığı zaman yazma işlemini gerçekleştirir. Veri dosyalarına yazım işlemi en son kullanılan verilerden başlanarak gerçekleştirilir.

Log Yazıcısı(Log Writer LGWR)

Log yazıcısı SGA’nın redo log tamponundaki bilgileri diske kaydetmek için kullanılır. LGWR tampondaki bilgileri o an kullanımda olan bir redo log dosyasına sıra ile yazar. Bu yazma işlemi veritabanının sahip olduğu birden fazla redo log dosyasına da yapılabilir.

Değişme Noktası(Checkpoint- CKPT)

Belirli zamanlarda SGA içerisindeki değişikliğe uğramış veritabanı tamponları DBWn tarafından belleğe yazılır. Bu işlem değişme noktası işlemi olarak adlandırılır. Değişme noktası işlemi DBWn’e değişme anlarını haber vermekten ve veritabanındaki bütün veri dosyalarını ve kontrol dosyalarını yeni değişme noktasından haberdar etmek için güncellemekten sorumludur.

Sistem Analizi(System Monitor-SMON)

Sistem Analizi veritabanı oturumu açılırken oturum için kurtarma yapar, yani kontrol dosyalarını kontrol ederek geri alınması gereken bir işlemin olup olmadığına bakar, eğer varsa geri allma işlemini gerçekleştirir. Birden fazla veritabanı oturumunun olduğu ortamlarda SMON aynı zamanda bozulan sistemler içinde ayrı ayrı kurtarma yapar. SMON aynı zamanda kullanılmayan geçici parçaları(temporary segment) temizlemekte ve herhangi bir problemden dolayı bozulan işlemleri kurtarmaktadır. Bozulan işlemlerin sorgu komutları SMON tarafından tablo uzayı ve veri dosyası tekrar aktif hale getirildikten sonra kurtarılır. Son olarak SMON veritabanında daha fazla boş yer açılsın diye boş genişlemeleri birleştirmektedir.

İşlem analizi(Process Monitor-PMON)

İşlem Analizi herhangi bir kullanıcı işlemi bozulduğunda o işlemin kurtarılmasını yapmaktadır. PMON işlemin kullandığı belleği ve kaynakları temizlemekten sorumludur. PMON aynı zamanda dispatcher(ileride anlatılıyor) ve sunucu işlemlerini         kontrol eder ve kapandıklarında yeniden çalıştırır.

Yedekleyici(Archiver-ARCn)

Yeekleyici o an kullanılmakta olan redo log dosyalarını, doldukları zaman yedek depolama ünitelerine kopyalar. Tüm sistemler için bir ARC0 işleminin olması yeterli olsa da birden fazla işlem gerçekleştirilebilir. Bu LOG_ARCHIVE_MAX_PROCESSES parametrsei ile belirlenir. ARCn işlemi veritabanı ARCHIVELOG modda çalışırken kullanılır.

Geri Kurtarıcı(Recoverer-RECO)

Geri kurtarıcı dağıtık veritabanında sistem veya ağ hatalarından dolayı bekleyen işlemleri düzenler. Belli aralıklarla, yerel RECO uzaktaki veritabanına bağlanıp yereldeki dağıtık işlemlerle ilgili “commit” ve “rollback” işlemlerini yapmaktadır.

Dispatcer(Dnnn)

Dispatcher’lar çoklu ortamlarda isteğe bağlı olarak çalıştırılmaktadırlar. Her iletişim protokolü için en az bir dispatcher işlemi (D000,….,Dnnn) oluşturulmaktadır. Her dispatcher işlemi kullanıcı işlemlerinden gelen istekleri sunucu işlemlerine yönlendirmekte ve gelen cevapları da uygun kullanıcılara tekrar döndürmekten sorumludur.

Kilit(Lock-LCKO)

Kilit işlemleri birden fazla veritabanı oturumunun çalıştığı sistemlerde veritabanları arasında gereken bir takım kilitleme işlemlerini gerçekleştirir.

İş Kuyruğu(Job Queue-SNPn)

Dağıtık veri tabanı uygulamalarında 38 adetten fazla (SNP0,…,SNP9,SNPA,….SNPZ)   iş kuyruğu işlemi tablo snapshot’larını otomatik olarak güncelleyebilir. Bu işlemler periyodik olarak başlatılır.

Oracle’ın Çalışmasına Bir Örnek

Aşağıdaki örnek bir istemcinin ağ üzerinden sunucudaki veritabanına erişip bir sorgulama yapmasının adımlarını içermektedir.

  1. Oracle veritabanı “host” ya da “database server” olarak adlandırılan bilgisayarda çalışıyor vaziyettedir.
  2. Bir kullanıcı istemci bilgisayarda kullanıcı işlemlerini gerçekleştiren bir uygulama programını çalıştırmaktadır. İstemci bilgisayar sunucu bilgisayar ile bağlantısını uygun Net8 sürücüsünü kullanarak gerçekleştirir.
  3. Sunucu bilgisayarda da uygun bir Net8 sürücüsü çalışıyor vaziyettedir.  Sunucu uygulama programından gelen bağlantı isteğini tespit eder ve kullanıcı işlemine karşılık gelen sunucu işlemini oluşturur.
  4. Kullanıcı bir SQL komutu çalıştırır ve yaptığı değişikliği “commit” eder, yani onaylar.Örneğin kullanıcı bir tablo içerisindeki bir  kaydı değiştirir.
  5. Sunucu işlemi komutu alır ve paylaşım havuzunda bu SQL komutuna benzeyen bir paylaşımlı SQL alanı olup olmadığına bakar. Eğer böyle bir alan bulunursa sunucu işlemi kullanıcının bu SQL cümlesini çalıştırma haklarını kontrol eder. Eğer böyle bir alan yoksa  yeni bir paylaşımlı SQL alanı oluşturulur ve SQL komutu çalıştırılır.
  6. Sunucu işlemi bu SQL komutu için gerekli verilerin SGA’da olup olmadığına bakar. Eğer burada yoksa ilgili veri dosyasından verileri alıp SGA’ya getirir.
  7. Sunucu işlemleri komutun gereklerine göre SGA’daki verileri değiştirir. DBWn değiştirilmiş veri bloklarını gerekli olduğu zaman kalıcı olarak diske kaydeder. SQL komutu onaylandığı için LGWR işlemi yapılan SQL işlemini redo log dosyalarına kaydeder.
  1. Eğer SQL komutunun çalıştırılması başarılı olduysa sunucu işlemi ağ üzerinden istemcideki uygulamaya mesaj gönderir. Eğer başarılı olmadıysa uygun hata mesajını gönderir.
  1. Tüm bu işlemler yapılırken veritabanı sunucusu diğer kullanıcıların aynı ya da farklı veriler üzerindeki işlemlerini de yürütür. Bu işlemlerin yapılabilmesi  ve performansın artırılması için örneğimiz içerisinde anlatılmayan başka arka plan işlemleride gerçekleştirilir.

Veri Tanımlama Dili Komutları

SQL’de veritabanı nesnelerini oluşturma, silme, yapısını değiştirme işlemleri için kullanılan komutlara veri tanımlama dili komutları denir. Bu komutlar “create”, “alter”, “drop”, “grant”, “revoke”, “analyze”, “audit”, “comment” komutlarıdır. Şimdi bu komutları kullanarak veritabanı nesneleri ile işlemler yapacağız.

Veri Sözlüğü

Veri sözlüğü, Oracle veritabanı ile ilgili bilgilerin yine Oracle veritabanında tablolar ve görüntüler halinde saklanmasıyla oluşur. Veritabanı ile ilgili bu bilgiler kullanıcılar, haklar, veritabanı nesneleri, tablo kısıtlamaları vb. bilgilerinden oluşur. Veri sözlüğü Oracle veritabanın en önemli bölümüdür. Veritabanı hakkındaki tüm bilgiler veri sözlüğünden SQL komutları yazarak öğrenilebilir.

Veri sözlüğü, veritabanı kurulurken standart olarak oluşturulur ve yapılan değişiklikler otomatik olarak veri sözlüğüne yansıtılır. Örneğin bir kullanıcı bir tabloya bir alan eklerse, veri sözlüğünde o tabloya ilişkin yapı kullanıcı farketmeden değiştirilir böylece veri sözlüğünden veritabanı hakkında sürekli olarak güncel ve sağlıklı bilgi almak mümkün olur. Veri sözlüğü içerisindeki bilgiler SQL komutlarıyla sorgulanıp görülebilir. Fakat hiçbir kullanıcı veri sözlüğünü değiştiremez, ekleme yapamaz ve kayıt silemez. Veritabanı oluşturulurken oluşturulan veri sözlüğü tabloları SYS adlı kullanıcıya aittir. Veri sözlüğü tabloları için görüntüler oluşturulmuştur. Tüm kullanıcılar hakları olduğu müddetçe bu görüntülerden bir ya da birkaçını sorgulayabilirler. Veri sözlüğü görüntüleri, başlarındaki ön eklerine göre üç gruba ayrılır:

  • USER_xxx : Veritabanına o an bağlı olan kullanıcının sahip olduğu nesneler ile ilgili görüntülerdir.
  • ALL_xxx : Veritabanına o an bağlı olan kullanıcının sahip olduğu ve başkalarına ait olan ve kendisine kullanma hakkı verilmiş olan tüm nesnelerle ilgili görüntülerdir.
  • DBA_xxx : DBA(veritabanı yöneticisi) veya DBA hakkına sahip kullanıcıların görebileceği görüntülerdir.
Görüntü İsimleri Açıklama
USER_TABLES Kullanıcıların sahip olduğu tabloların yapısını gösteren görüntüdür.
USER_SEQUENCES Kullanıcının sahip olduğu sıralar hakkında bilgi içeren görüntüdür.
USER_VİEWS Kullanıcının sahip olduğu görüntüler hakkında bilgi içeren görüntüdür.
ALL_OBJECTS Kullanıcının erişebileceği bütün nesneler hakkında bilgi içeren görüntüdür.
DBA_USERS Veritabanındaki bütün kullanıcılar hakkında bilgi içeren görüntüdür.
DBA_TABLESPACES Veritabanındaki bütün tablo uzayları hakkında bilgi içeren görüntüdür.

SCOTT kullanıcısının bütün nesnelerini görmesi

SELECT * FROM USER_OBJECTS

Bir kullanıcın kendine ait bütün tabloların adlarını listelemesi

SELECT TABLE_NAME FROM USER_TABLES

Bir kullanıcının tüm indeks bilgilerini listelemesi

SELECT INDEX_NAME,TABLE_NAME,TABLESPACE_NAME FROM ALL_INDEXES

YORUMLAR

hayrullah ayan

Rica ederim, devamı gelecek.
Özellikle 9 ve 10. dersler çok faydali olacagına inaniyorum.

Ahmet

Teşekkürler. Çok değerli bilgiler.