1 – Oracle Mimarisine Giriş

Oracle Eğitimleri - Oracle Mimarisine giriş

Oracle, birçok işletim sistemi üzerinde çalışabilecek şekilde tasarlanmış bir RDMS’dir (İlişkisel Veritabanı Yönetim Sistemi). Farklı işletim sistemlerinde çalışabilmesi için fiziksel mimarisi işletim sistemine göre farklılaşır. Örneğin Unix, Linux gibi işletim sistemlerinde birçok işletim sistemi uygulaması (process) görülmektedir ki neredeyse her temel fonksiyon için bir uygulama kullanılmaktadır. Windows üzerinde ise bu mimari farklılaşmaktadır doğal olarak, zaten aksi halde verimsiz ve oldukça yavaş bir sistem olarak kalabilirdi, bu yüzden de Windows üzerinde tek bir uygulama (process) ve birden fazla iş parçacığı (thread) kullanmaktadır.

Database ve Instance Kavramları

Oracle mimarisi anlatılırken karışıklığa neden olan, bazen de yanlış anlaşılan iki kavramdır “Database” ve “Instance” kavramları. Bu sebeple Oracle terminolojisinde bu kavramların nasıl geçtiğine bakalım:


Resim Kaynak: HUEBER, D (2010). Oracle Basics (1): Oracle Database vs Oracle Instance içinde. https://blog.dbi-services.com/wp-insides/uploads/images/stories/blog/Oracle%20basis/database_instance.gif
Database: İşletim sisteminin fiziksel dosya veya disklerinin toplamıdır. Oracle ASM (Automatic Storage Management – Otomatik Veri Depolama Yönetimi) veya RAW Partition(Fiziksel diskte erişilen en küçük bölümdür. Extent içinde mantıksal olarak tipi belirli olmayan ham bir bölüm oluşturulur. Veri yazıldığında tipi tanımlanmış olur.) kullanıldığında işletim sistemi dosya ve diskleri ayrı ayrı gözükür; ama Oracle terminolojisinde bu ikisinin toplamı Database kavramını ifade eder.

Instance: Bir sunucu üzerinde Oracle uygulamaları (process) veya iş parçacıkları (thread) tarafından oluşturulmuş paylaşımlı bellek alanı veya üzerinde çalıştıkları bellek alanının tümünü ifade eder. Bu alan kalıcı verilerin de tutulmasının sağlanabildiği bir yer durumundadır. Elbette bir instance, sabit diskler olmadan var olamaz; ama her işlem anında kalıcı disklere yazılmazlar, instance üzerinde çalışan yapı sayesinde verilere hızlı erişim sağlanır ve uygun aralıklarla sabit disk üzerindeki dosyalara veriler yazılırlar.

Bu iki kavram sık sık birbirinin yerine kullanılmaktadır; ama aslında iki farklı konsepti anlatmaktadır. Aralarındaki ilişkiyi kısaca özetlemek gerekirse bir database, herhangi bir instance üzerine mount (bağlamak – monte etmek) edilebilir. Instance ise yalnızca bir tek database ile mount olup açılabilir, ikinci bir database yoktur.

Şimdi basit bir örnekle konuyu açıklamaya çalışalım. Örneğimiz Linux üzerinde Oracle 11g R2 kurulumu yapılmış bir bilgisayarda yapacağız. Bu örneğe göre sadece yazılım kurulmuş; ama database oluşturulmamış durumda. Init.ora ve SPFILES da henüz yoktur.

pwd komutu: Linux’ta hangi dizinde çalıştığınızı gösterir, biz orcl dizininde çalışacağız (Windows’ta dir komutuna denk gelir.).

ls komutu: listeleme komutu, -l ise toplam sayı verir

Biz SQL*Plus arabirimini kullanacağız. Bu arabirim DOS ortamına benzer bir arayüz ile Oracle yönetimini yapmamızı sağlar. SQL*Plus’a bağlanırken SYSDBA rolü ile bağlanacağız, bu Oracle’da her şeyi yapmaya yetkili kullanıcı rolüdür.

Görüldüğü gibi bir hata oluştu, çünkü database’e bağlanmak istedik; ama yalnızca yazılım kurulumu yapıldığı için TNS (Transparent Network Substate) servisi bir ORACLE_SID aradı; ama bulamadı.

TNS servisi Listener olarak görev yapmaktadır. Oracle üzerine gelen istekler önce Listener tarafından karşılanır.

ORACLE_SID ise Oracle tarafından sisteme register edilen “Site Identifier” kimlik tanımlayıcısıdır. Bu Instance ulaşmak için tanımlanan kısa bir kelimedir. Şimdi bizde bir SID tanımlayacağız.

Şimdi başarılı bir şekilde idle durumdaki instance’ımıza bağlanabiliriz.

Şimdi instance’ımızı başlatmayı deniyorum.

Hatada initora11g.ora dosyasını bulamadığını söylemektedir. Bu dosya init.ora adındaki parametrelerin tutulduğu dosyada tutulmaktadır. Biz şimdi bir parametre dosyası oluşturacağız ve buna başlangıç için gereken minimum bilgileri ekleyeceğiz (Aslında buraya normalde birçok parametre eklememiz gerekiyor, örneğin db_block_size, control_file_location gibi). Varsayılan olarak bu dosya $ORACLE_HOME/orcl dizininde bulunur ve ismi init${ORACLE_SID}.ora’dır:

Şimdi tekrar SQL*Plus ile instance’ımıza bağlanıyoruz.

Instance’ımızı nomount modunda açtık, database create (oluşturmak) etmediğimiz için bu modda açmak durumundaydık, aksi halde hata alacaktık. Şu anda database’i çalıştırmak için gerekli tüm arka plan hizmetler ayakta. Örneğin Process Monitor (PMON), Log Writer (LGWR) gibi. Şimdi yine basitçe bir database create edeceğiz. Aslında database create ederken epeyce bir işlem yapmak gerekir; ama minimum şartlarda sadece create ediyor olacağız.

Artık database’imiz mevcut. Normalde birden çok parametre ile create edilir; ama yukarıda kullandığımız CREATE DATABASE komutu ile Oracle’a bizim için database’in temel dosyaları olan log files, control files, data files gibi temel dosyaları yaratmasını söylemiş oluyoruz.

Şu anda elimizde işler bir database olduğu halde kullanmamız gereken tüm objeler yaratılmadığı için /$ORACLE_HOME/rdbms/admin/catalog.sql gibi gerekli objeleri create eden katalog scriptlerini (komut dosyaları) çalıştırmamız gerekiyor. Fakat biz basit view dosyalarını kullanıyor olacağız:

Gördüğünüz gibi Oracle üzerinde varsayılan ayarlarla oluşturulması gereken bir database oluşturmuş olduk. Eğer bu database’i kapatıp yeniden bağlanmaya çalışırsanız bunun mümkün olmadığını göreceksiniz:

Bir instance’ın mount veya open (açılması – hizmet vermeye başlaması) edilebilmesi için canlı bir database’e ihtiyaç duyar. Hatırlarsanız instance kavramını açıklarken yalnızca process ve paylaşımlı bellek alanlarından oluştuğunu söylemiştik. Nihayetinde nomount modda instance başlatıldığında ayakta olduğunu görmüştük. Biz database’i close ederek aslında fiziksel dosyaları kapatmış olduk. Bu durumda instance’ı yeniden kapatmak ve açmak zorundayız. Açılırken de yeniden database oluşturmamız gerekir.

Özetlemek gerekirse:

  • Bir instance, arka plan uygulamaları ve paylaşımlı bellektir.
  • Bir database, diskte saklanan veriler topluluğudur.
  • Bir instance her zaman bir tek database’i mount ve open edebilir.
  • Bir veritabanı bir veya birden fazla instance tarafından mount ve open edilebilir (RAC kullanılarak).

SGA (System Global Area) ve Arka Plan Uygulamalar

oracle sga, background processes
Oracle SGA Mimarisi

Resim Kaynak: Fadıl (2018). What Is Oracle Database https://techsoftcenter.com/wp-content/uploads/2018/10/4-768×501.jpg

Yukarıdaki şekilde basit haliyle bir Oracle instance ve database’ini gösteriyor. Oracle, aşağıdaki işlemleri yapmak için SGA (System Global Area) denilen büyük bir bellek yığınını kullanır:

  • Tüm uygulamaların (background process) erişmesi gereken veri yapılarını korur.
  • Diskten çekilen verileri tutar.
  • Redo file üzerinde diske yazılmadan önce veriler cachelenir (Önbelleğe kaydedilir).
  • Execution planları tutar (Veriye erişmek için Oracle tarafından en kısa yoldan nasıl ulaşılabileceğinin haritası çıkarılır. Bu haritaya Execution Plan denmektedir.).
  • Değişiklik yapılırsa Undo file üzerinde değişiklikler saklanır, rollback (Yapılan işlemlerin iptal edilmesi ve değişikliklerin geri alınması) işlemi yapılmak istendiğinde eski veriler yeniden buradan yüklenir.

Oracle, set edilen uygulamaları SGA’e bağlar, böylece farklı işletim sistemlerinde durumu stabil hale getirir. Unix türevlerinde bellek üzerinde allocate işlemi yapabilmek için shmget() ve shmat() kullanılırken Windows üzerinde malloc() kullanılır.

Oracle, okuma ve yazma işlemlerini hızlı olabilmesi için SGA üzerinde gerçekleştirir. Tablolara ait datalar, indexler, temporary (geçici) alan, redo, undo gibi yapılar SGA üzerine tutulur.

Oracle’a Bağlanmak

Bu bölümde biz Oracle’ın kendisine gelen talepleri yönetimi esnasında kullanılan iki bağlantı mekanizmasını inceliyor olacağız: Dedicated Server ve Shared Server.

Dedicated Server

Dedicated Server Bağlantı
Dedicated Server Bağlantı

Resim Kaynak: Oracle® Database Net Services Administrator’s Guide 11g Release 2 (11.2) Part Number E10836-05 https://docs.oracle.com/cd/E18283_01/network.112/e10836/img/netag115.gif

Dedicated Server bağlantıda temelde her bir session (oturum) için ayrı bir process oluşturulur. Client (Kullanıcı) sonlandırmadığı sürece de process açık kalır ve talepler bu process üzerinden işletilir. Unix, Linux gibi yapılarda arkaplanda bir process işletiliyorken, Windows üzerinde bu threadlere dönüşür ve her bir dedicated bağlantı için thread açılır. Varsayılan olarak dedicated bağlantı sayısı 150 belirlenmiştir; ama bu sayı artırılabilir veya azaltılabilir.

Oracle kurulumu esnasında bağlantı modu ayarlandığı için kurulum esnasında bağlantı tipi dedicated olarak seçilmelidir.

Yukarıdaki şekilde görüldüğü gibi client dedicated bağlantı kurmak istediğinde istek listener’a gelir, listener bir process açar ve bunu client’ın hizmetine verir, sonraki isteklerde listener devre dışı kalır ve tüm talepler process üzerinden işletilir. Özellikle RMAN (Recovery Manager) veya batch (yığın işlem veya toplu işlem, eğer veritabanı üzerine gelecek sorgular aynı anda birden fazla iş yapıyorsa toplu işlem olarak adlandırılır.) işleri yapılacak ise dedicated bağlantı şarttır.

Shared Server

Shared Server Bağlantısı
Shared Server Bağlantısı

Resim Kaynak: Oracle® Database Net Services Administrator’s Guide 11g Release 2 (11.2) Part Number E10836-05 https://docs.oracle.com/cd/E18283_01/network.112/e10836/img/netag116.gif

Shared Server bağlantıda açılan her bir shared process’i birden çok client (Kullanıcı)’ın talebine cevap verir. Sistem kaynaklarını kullanmak için verimli görünse de çok fazla client’ın bağlandığı sistemlerde verimli değildir. Sebebi ise çalışma şeklindendir.

Bir client shared modda bir bağlantı açmaya çalışınca talep listener’a gelir. Listener bu durumda Dispatcher process’ine durumu iletir. Bundan sonra Dispatcher talebi request queue (Talep kuyruklama sistemi) ile sıraya yerleştirir. SGA içinde işlemler halledilir ve sonra geri iletilir. İletim sonrası boşa çıkan process yeni talebe yönlendirilir.

Sistematikten de anlaşılacağı üzere çok fazla client işlemi yürütüyorsa ve özellikle yürütülecek transactionların (Veritabanı üzerinde gerçekleştirilen bir işlem) boyutlarının çok yüksek olması durumunda process’lerin yetmemesi, uzun süreli bekletmelerin oluşması kaçınılmazdır. Eğer client sayısı az ise tercih edilebilir; fakat fazla sayıda client ve büyük transaction blokları mevcut ise kaçınılmaz olarak dedicated server mode tercih edilmelidir. Ayrıca batch ve RMAN’in de kullanılamayacağını da göz önüne almak gerekiyor.

0
0

Patreon

üzerinden bize destek olabilirsiniz!

.

Birlikten kuvvet doğar! Sizde #patreon üzerinden bizim yanımızda olabilirsiniz. Yaptığımız gönüllü çalışmaları arttırmak için bize destek olun.

Ücretli ve Ücretsiz Eğitimler

Türkiye'nin en büyük veri bilimi topluluğu ile kariyerinizi inşa edin.

Data Science Earth

Data Science Earth ekibi, üst düzey Veri Bilim çözümleri üretmek amacı ile toplanmış akademisyenler ve uzmanlardan oluşmaktadır. Öncelikli olarak veri bilincini geliştirmeyi ve küreselleşen rekabet ortamında verinin gücünün doğru kullanılmasını sağlamayı amaçlamaktadır.

Sponsor

QuestionPro 35 farklı soru seçim özelliği ile anket çalışmalarımıza güç katmaktadır.