
Ercan Yazgan
Oracle Technologies Specialist
Website bağlantısı: E-posta: Bu e-Posta adresi istek dışı postalardan korunmaktadır, görüntülüyebilmek için JavaScript etkinleştirilmelidir
ORACLE ‘IN BAŞLATILMASI VE DURDURULMASI
Sayın site sakinleri, yeni başlayan arkadaşlarda şöyle bir soru olabilir? “Ya ben oracle servisini başlatınca o başlıyo zaten ne lüzum var bunlara?”. Şöyle bir durum söz konusu ki Oracle veritabanları bir server üzerinde olur ve her türlü operasyon için veritabanı yöneticileri bazı controller veya gereksinimler doğrultusunda bu aşamaları adım adım takip etmek veya kısıtlı şekilde yönetmek ihtiyacı duyabilirler. Böyle durumlarda kabaca aşağıdaki adımlar takip edilir.
Oracle ‘ın başlatılması ve durdurulması çeşitli adımlarla gerçekleşmektedir.
Database’in bu aşaması Database ve Control file oluşturmak için vardır.
Nomount : SPFILE veya PFILE dosyadan okunarak, instance bu parametrelere gore başlatılır. Database ve control file oluşturmak için bu aşamaya ihtiyaç duyulur.
Mount : Burada Control file ilgili dosyadan okunarak instance’ ın veritabanı yapısı hakkında bilgi sahibi olması sağlanır.
Open : Tüm dosyalar ilgili lokasyonlardan okunur ve veritabanı tümüyle başlamış olur. Eğer bir kurtama işlemi gerçekleşecekse SMON bu aşamada devreye girerek otomotik kurtarmayı başlatır.
Komut satırından bu işlemler şu şekilde olmaktadır.
Kapalı bir Database de ;
CMD > sqlplus / as sysdba;
SQL > startup nomount;
SQL > alter database mount;
SQL > alter database open;
Yada kapalı bir database ‘i direk olarak
CMD > sqlplus / as sysdba;
SQL > startup;
Diyerekte açabiliriz.
Oracle database otomatik olarak SPFILE dosyasından okunarak açılır. Fakat opsiyonel olarak PFILE’dan da başlatılabilir. Database’ i PFILE dosyasından başlatmak için şu komut kullanılır :
SQL > STARTUP PFILE=$ORACLE_HOME/dbs/initdb01.ora
Startup parametreleri aşağıda görüldüğü gibidir.
STARTUP [FORCE] [RESTRICT] [PFILE=filename]
[OPEN [RECOVER][database]
|MOUNT
|NOMOUNT]
FORCE : Mevcut olan instance’i acil olarak kapatıp yeni istance’ı başlatır.
RESTRICT: Kullanıcıların RESTRICTED SESSION hakkı ile database’e erişmeleri sağlanır.
RECOVER : Recover yapmak için başlatılan moddur.
SQL > alter database open read only;
SQL > STARTUP RESTRICT;
SQL > ALTER SYSTEM ENABLE RESTRICTED SESSION;
Read Only modda database üzerinde sorgu çalıştırılabilir,İlgili data file’lar offline yada online yapılabilir.Offline bir datafile recovery yapılabiliriz.
Database’in durdurulması için tek adım : SHUTDOWN komutunu çalıştırmaktır. Bunun için 4 mod vardır :
Shutdown Normal
• Yeni bağlantı açılamaz
• Oracle server shutdown olmadan bağlı olan kullanıcıların disconnect olmalarını bekler.
• Database ve redo buffers diske yazılır
• Background processesleri durdurulur, ve SGA memory’den çıkarılır.
• Oracle İnstance kapatmadan önce database’i dismount ve close eder.
• Gelecek Startup aşamasında recovery’e ihtiyaç yoktur.
Shutdown Transactional
• Yeni bağlantı açılamaz,yeni bir transaction da başlatılamaz.
• Client açtığı transaction’u kaparsa ,bağlantıyı koparmış olur.
• Tüm transactionlar kapandıysa,artık instance kapanabilir.
• Gelecek Startup aşamasında recovery’e ihtiyaç yoktur.
Shutdown Immediate
• Mevcut çalışan Sql statement ların hiçbiri tamamlanamaz.
• Oracle Server kullanıcıların disconnect olmalarını beklemez.
• Oracle Aktif transactionların hepsini rollback yapar.
• Oracle İnstance kapatmadan önce database’i dismount ve close eder.
• Gelecek Startup aşamasında recovery’e ihtiyaç yoktur.
Shutdown Abort
• Mevcut çalışan Sql statement ların hiçbiri tamamlanamaz.
• Oracle Server kullanıcıların disconnect olmalarını beklemez.
• Database ve redo buffers diske yazılmaz.
• Commit edilmeyen transactionların hepsini rollback yapar.
• İlgili dosyalar kapanmadan instance kapatılır.
• Oracle İnstance kapatmadan önce database’i dismount ve close eder.
• Gelecek Startup aşamasında recovery’e ihtiyaç yoktur.
LOGICAL YAPI
Sizlere basit olarak bir oracle veritabanındaki mantıksal yapıyı kısaca özetlemek istedim :
Oracle’ın logical yapısı hiyerarşik olarak Tablespace,bunun altında Segments bunun altında Extents bunun altında Bloklardan oluşur.
Veri blokları, extentler ve segmentlerden oluşan mantıksal saklama yapıları sayesinde Oracle'ın disk alanı üzerinde ayrıntılı bir kontrolü vardır.
Oracle Veri Blokları :
Oracle database üzerinde verinin saklandığı en küçük yapı birimidir. Fiziksel anlamda belirli sayıda byte ile temsil edilir. Standard blok büyüklüğü DB_BLOCK_SIZE başlangıç parametresiyle belirlenir.
Extentler : Mantıksal veritabanında blokların bir üst seviyesidir. Extendler belli sayılardaki ardışık bloklardan oluşur. Tek seferde alınır ve belirli bir tipteki veriyi tutar.
Segmentler : Extend’in bir üst seviyesi segmentlerdir. Bu depolama seviyesi belli bir mantıksal yapı için tahsis edilmiş extend kümesini ifade eder. Eğer bir segment içindeki extendlerin tümü dolarsa, Oracle dinamik olarak yeni yer tahsis eder. Extendler, ihtiyaç halinde tahsis edildiklerinden dolayı ardışık olma gibi bir zorunlulukları yoktur. Segment çeşitleri :
Veri Segmenti : Kümelenmemiş her tablo bir segmente sahiptir. Tablonun bütün verileri veri segmentinin extentlerinde saklanır.
Bölümlenmiş tablolarda, her parça için bir veri segmenti bulunur ve Her küme için bir veri segmenti vardır. Kümedeki her tablonun verisi kümeye ait olan veri segmentinde tutulur.
İndeks Segmenti : Her indeksin kendi verisinin tutulduğu bir indeks segment vardır. Bölümlenmiş bir indeksin her bölümüne ait bir indeks segment vardır.
Temporary segment : Bu alanlar herhangi bir SQL sorgusunun işinin tamamlanması için gerekli olan alan için Oracle tarafından oluşturulur. SQL cümlesinin işi bittiğinde temporary segment tekrar kullanım için sisteme iade edilir.
Rollback Segment : "Automatic Undo Management" modundayken, veritabanı sunucusu tablespaceleri kullanarak undo alanını yönetir. "Manual Undo Management" modundayken, veritabanı yöneticisi tarafından undo bilgisini geçici olarak tutması için rollback segmentler yaratılır. Rollback segmentlerdeki bilgi veritabanının kurtarılması sırasında kullanılır.
Fiziksel Yapı
Control file,data file ve redologlar database’in fiziksel yapısını oluşturmaktadırlar.
Memory Yapısı
SGA ve PGA dediğimiz yani sistem tarafı ve kullancı tarafını oluşturan memory yapısıdır.
SGA instance başlatıldığında oluşmaktadır.PGA ise Kullancı tarafından gelen User Prosesine karşılık oluşturlan Server Prosesi zamanında oluşma
SGA(System Global Area)
Bir tane Oracle Instance’ın ihtiyacı olan control ve veri bilgilerinin tutulduğu bellek alanıdır.Paylaşıma açıktır. Oracle Instance açıldığında açılır ve Instance kapatıldığında sisteme geri verilir. Her Instance’ın bir SGA sı vardır. Sisteme bağlanan kullanıcılar bu SGA’daki bilgiyi paylaşırlar. Optimum performans için SGA’nın oldukça büyük olması gerekir, tabi ana bellek boyutunu aşmamak kaydıyla. Böylelikle bellekte daha fazla veri tutulur, bud a disk okuma yazmasını azaltır. SGA’da ki bilgiler, veri tiplerine gore categorize edilmiş bir şekilde farklı altbellek yapılarında saklanır.
SGA’nın büyüklüğü SGA_MAX_SIZE ile belirlenebilir.
SQL > SHOW SGA;
Total System Global Area 36437964 bytes
Fixed Size 6543794 bytes
Variable Size 19521536 bytes
Database Buffers 16777216 bytes
Redo Buffers 73728 bytes
SGA’nın yapısını ise DB_CACHE_SIZE,LOG_BUFFER,SHARED_POOL_SIZE ve LARGE_POOL_SIZE oluşturmaktadır.
SHARED POOL
Shared Pool, Oracle’da SQL sorgularının ve PLSQL lerin çalıştırılmak için kullandığı bilgileri içermenin yanısıra sorguların ayrıştırılması ve sorgunun çalışması için ihtiyacı olan çalışma planının hazırlandığı yerdir. İşletilen sorgular bu alanda saklanır. Ayni sorgu tekrardan çalıştırılmak istendiğinde bu çalistirma plani dogrudan uygulanabilir. Büyüklüğü SHARED_POOL_SIZE parametresi ile belirlenir.Varsayılan olarak 32 bit sistemler için 8MB, 64 bit sistemler için 64MB’dır.
Paylasilmis SQL Alani, SGA içindeki Paylasilmis Havuz ‘un bir parçasidir.
Paylasilmis Havuz;
SQL ve PL/SQL deyimlerini
SQL ve PL/SQL deyimlerinin ayristirilmis hallerini
SQL ve PL/SQL deyimleri için çalistirma planlarini
veri sözlügü (data dictionary) önbellegini (cache) içerir.
SQL > ALTER SYSTEM SET SHARED_POOL_SIZE = 64M;
Burada dikkat edilmesi gerek ayarlanan bu büyüklük SGA nın büyüklüğünü etkileyeceği için asla toplam SGA değeri SGA_MAX_SIZE’ı aşmamalıdır.
LİBRARY CACHE
Library Cache Shared Pool’un bir parçasıdır.Sık kullanılan SQL ve PL/SQL cümlelerinin durduğu yerdir.
Yönetimi LRU(Last Recently Used) algoritmasına göre olmaktadır.
Shared SQL ve PL / SQL ifadelerini saklamaktadır.
DATA DİCTİONARY CACHE
“Data Dictionary” bilgileri Oracle tarafından çok sık kullanıldığından hafızada tutulması mantıklıdır.İşte bu bilgilerin hafıza da tutulduğu yere “dictionary cache” denir.Bu bilgiler bir de “library cache”’te de tutulmaktadır.Her iki alana tüm kullanıcı işlemleri ulaşmaktadır.
Hem Library Cache hemde Dictionary Cache’in büyüklüğünü değiştirmek için SHARED_POOL_SIZE ile oynanmalıdır.
DATABASE BUFFER CACHE
Burada Datafile’dan okunan veriler tutulur. Kendi içerisinde mantıksal olarak ayrılmıştır. Database’ e bağlanıp işlem yapan kullanıcılar bu alanı kullanırlar. Burada gerçekleşen işlemlerin belirli bir sistematikte olması gerekmektedir. Buffer Cache’ te bunu sağlamak için Write List ve Last Recently Used(LRU) listeleri bulunur.
Write List : Üzerinde değişilik yapılmış fakat henüz Datafile’a yazılmamış tampon alanlar(dirty buffers)ın tutulduğu listedir.
LRU List : Free Buffers(Boş tampon alanları) ve henüz write list’ e gönderilmemiş dirty buffer bilgilerini tutar. Ayrıca o an işlem gören ‘pinned buffer’ alanlarını tutar.
“Write List” , “dirty buffer” olarak adlandırılan üzerinde değişiklik yapılmış ama diske(datafile’a) henüz yazılmamış tampon alanları tutar.LRU listesi ise boş tampon alanları (free buffers) ,henüz “write list”’e gönderilmemiş “dirty buffer” alan bilgilerini ve “pinned buffer” denilen o an işlem gören alanları tutar.
Herhangi bir database kullanıcısının, veriyi okuma isteği olduğunda cache’e bakılır. Eğer veri buradaysa hafızadan direk okunur(cache hit). Eğer yoksa, veri ilgili data bloktan okunur(cache miss). Fakat bunun için evvela hafızada boş alan bulunması lazımdır. Bunun kontrolü için LRU list e bakılır.Arama yapılırken listedeki dirty buffer alanları write list’e alınır. Boş alan bulunduğu taktirde bu alan LRU list’in sonuna atılarak veri bu alanda okunur. Arama işlemi boş alanan bulunana kadar veya tanımlanan bir eşik değere ulaşıncaya kadar surer. Eşik değere ulaşıldığında eğer hala boş alan bulunamamışsa arama sonlandırılır ve DBW0, dirty buffer alanlarının diske yazılması için arka plan prosesine (background prosess) sinyal gönderir.
DB_BLOCK_SIZE parametresi ile blokların büyüklüğü hakkında bilgi edinebiliriz.
Bu parametre sonradan değişmemekte database oluşturulurken ayarlanmaktadır.
Bunun dışında,
DB_CACHE_SIZE = Default olarak cache’in buffer size’ını vermektedir.Sıfır verilmemelidir.
DB_KEEP_CACHE_SIZE = blokların default olarak ne kadar tutulacağını verir.
DB_RECYCLE_CACHE_SIZE = Kullanılamayn blokların boyutunu tutmaktadır.
parametreleri mevcuttur.
SQL > ALTER SYSTEM SET DB_CACHE_SIZE = 96M; ile büyüklük değiştirilebilmektedir.
REDOLOG BUFFER CACHE
Dml ve ddl sorgularından sonra oluşan değişikliklerin hafızada saklandığı alandır. İstenildiğinde bu değişikliklerin geri alınması ve ihtiyaç duyuldugu takdirde recovery işlemleri için kullanılır. Sıralı ve doldugunda başa dönecek şekilde bir yapısı vardir.
Bu alanda tutulan bilgiler “Log Writer Process(LGWR)” ile redo log dosyalarına yazılır.LOG_BUFFER parametresi redo log alanının büyüklüğünü belirler.Büyük değer alması I/O mailiyeti düşürür.
LARGE POOL
Veri yedekleme ve kurtarma, sunucu okuma yazma işlemleri, oturum belleği ve birden fazla veritabanı üzerinde çalışan hareketler(Oracle XA) gibi işlerde kullanmak üzere tahsis edilen opsiyonel bir alandır.
Fakat en önemli görevi database üzerinde yedekleme ve kurtarma operasyonlarına zemin oluşturmasıdır. Boyutu LARGE_POOL_SIZE parametresi ile belirlenir.
SQL > ALTER SYSTEM SET LARGE_POOL_SIZE = 64M;
Oracle üzerinde backup ve recovery operasyonlarında aktif olarak yer alan RMAN(Recovery Manager) Large Pool parametresi ile beraber BACKUP_DISK_IO= n ve BACKUP_TAPE_IO_SLAVE = TRUE parametreleri set edilebilir.
JAVA POOL
Java kodlarının veritabanı içerisinde anlamlandırılması için kullanılmaktadır.PL/SQL kodlarına benzer biçimde database içinde saklanmaktadır.Boyutu JAVA_POOL_SIZE ile belirlenmektedir.
PGA(Program Global Area)
PGA, sunucu işlemleri için gereken veri ve kontrol bilgilerini tutmak için tahsis edilen tampon bellektir. Oracle tarafından bir sunucu işlemi başladığında otomatik olarak tahsis edilir. İçinde tutulacak bilgi Oracle konfigürasyonuna bağlıdır.
Prosesler, PGA tarafında istekte bulunan user proses, buna karşın Server tarafındaki server proses ve Instance başladığı zamanki background proses olmak üzere birbirine paraleldir.
USER PROSESS
User Proses Oracle Server ile iletişim kuran bir program,Oracle Client yada SQL PLUS command’ı olabilir.
****
User Prosess’i Server Prosess’i ile iletişim kurduğunda bir session açılır ve işlemler bunun üzerinden yürür.
SERVER PROSESS
User Proses’ine karşılık gelen prosestir.Gelen istekle beraber Oracle Server tarafı ile bağlantı kurar.
İleride göreceğimiz gibi Dedicated yada Shared olabilmektedir.

BACKGROUND PROSESS
Bu prosesler fiziksel yapı ve memorysel yapı arasında çalışırlar ve çeşitli işler yaparlar.Bunların bikaç tanesine bakacak olursak.
DBWR(Database Writer)
Bu prosessin görevi kullanıcı işlemleri için boş bellek alanı ihtiyacını karşılamak üzere Database Buffer Cache’i yönetmektir. Değişikliğe uğramış tüm verileri veri bloklarına yazar. Yakın zamanda kullanılmış olan veri bloklarının bellekte tutulması için LRU algoritmasını kullanır. I/O işlemlerini iyileştirme amaçlı bazı yazma işlemlerini erteleyebilir.

DBWR şu durumlarda aktif olur:
•Incremental yada normal checkpoint
• Bozuk data bloklar eşik değeri eriştiklerinde
• Bir proses boş blok aradığında ama bulamadığında
• Zaman aşımı gerçekleştiğinde
• RAC kontrolünde
• Tablepsace Online yada Offline olduğunda.
• Tablespace Read Only moduna geldiğinde.
• Tablonun düşürülmesi yada Truncate edilmesinde.
• ALTER TABLESPACE tablespace name BEGIN BACKUP komutu çalıştığında
LGWR(LOG WRİTER)
LGWR ,redo log buffer ‘larini su durumlar olustugunda diske yazar;
commit görüldügünde ,
redo log buffer dolulugu esik degerine ulastigi zaman.
DBWR checkpoint için buffer bloklarin temizlemeye gerek duyarsa ,
time-out görülürse ,
Her Oracle instance ‘i için bir tane LGWR görevi vardir. Herhangi bir transaction redo log ‘a yazılmadan commit edilmiş sayılmaz. Burada DBWR prosesi, veri bloklarını ilgili Alana geri yazmadan once yapılan değişiklikleri muhafaza etmek amaçlı olarak LGWR prosesine, redo log buffer larını boşaltma sinyali gönderir.

SMON (System Monitor)
-Değişen loglar için Rollforward ,commit edilmemiş datalar için Rollback yapar
- Otomatik instance kurtarmayi gerçeklestirir.
- Geçici segment alanini geri elde eder.
- Kontrol kütügünün sürekliligini saglar.
- Sistemde kullanilabilir durumdaki serbest alanin kaydini tutar.
****
PMON (Process Monitor)
- Anormal bir sekilde kesilen baglantilari temizler.
- Commit edilmemis degisiklikleri eski haline getirir (rollback).
- İşletimi kesilen görevin tuttugu kilitleri kaldirir.
- Çakilan görev için ayrilan SGA kaynaklarini serbest birakir.
- Kilitlenmeleri (deadlock) otomatik olarak yakalar ve islemi geri döndürerek (transaction rolling back) çözümler.
****
CHECK POİNT(CKPT)
Checkpoint görevi, LGWR üzerindeki yükü azaltmak için kullanilir.CheckPoint anında DBWn prosesi işaretlenir.Datafile Header Checkpint anında update edilir.Aynı şekilde Control file larda Check Point anında update edilir.
ARCH görevi aslinda seçimlik bir arka plan görevi olmasina ragmen bir çok sistem için özellikle tavsiye edilir. Eger bu görev çalistiriliyorsa veritabani ARCHIVELOG kipinde çalisiyor demektir. Bu seçenek;
tablespace ‘lerin çevrim-içi (on-line) yedeklenmesine
medya failure ‘dan çevrim-içi kurtarmaya ,
günlük kütüklerinin otomatik olarak arsivlenmesine izin verir.
ARCH görevi, günlük kütüklerinin kopyalarini, yerleri daha önce belirlenmis disk ya da teyp birimleri üzerine çikarir.