Temel Oracle Bilgileri

Veritabanı yapıları
Mantıksal (logical)
Fiziksel (physical)
Oracle Sistem Mimarisi
Dosyalar (files) Bellek yapıları (memory structures)
Sistem genel alanı (System Global Area – SGA)
Program Genel Alanı (Program Global Area – PGA)
Görevler (processes)
Kullanıcı (user) görevleri
Oracle görevleri
Oracle An ‘ı (instance)
Veritabanı Yapıları
Mantıksal Yapılar
Tablespaces


Veritabanı, tablespace olarak adlandırılan mantıksal saklama birimlerine bölünür.
Tablespace, aralarında bir ilişki olan mantıksal yapıların gruplandırılmasında kullanılır.
Bir tablespace online(erişilebilir) ya da offline(erişilemez) olabilir. Normalde tablespace ‘ler üzerlerindeki bilgiye erişimin yapılabilmesi için online konumundadır. Fakat bazı özel amaçlarla tablespace ‘ler offline konumuna alınabilirler.
?ema ve ?ema nesneleri
?ema, nesnelerden oluşan bir derlemdir. ?ema nesneleri doğrudan veritabanının verilerine karşılık gelen mantıksal yapılardır.
Çizelge (Table): Oracle veritabanında verileri saklamak için kullanılan temel birimdir. Çizelgeler satırlar (rows) ve sütunlar (columns) olarak tutulurlar. Her çizelge, adı ve sütun kümesi (nitelik) ile tanımlanır. Her sütunun bir adı, türü ve genişlik ya da duyarlılığı verilir. Çizelge bir kez yaratıldıktan sonra içine geçerli satırlar konulabilir ve daha sonra da bu çizelgenin satırları sorgulanabilir, silinebilir ya da günlenebilir.
Görüntü (view): Bir ya da daha fazla çizelgedeki verilerin özel bir gösterimidir. Bir görüntü, saklanmış bir sorgu (stored query) olarak da düşünülebilir. Görüntüler, gerçekte veri içermezler. Verilerini, temel çizelgeler (base tables) olarak adlandırılan çizelgelerden ya da başka görüntülerden türetirler. Görüntüler, çizelgeler gibi, üzerlerinde bazı sınırlamalarla ekleme, silme, günleme ve sorgulama işlemlerine izin verirler. Görüntü üzerinde gerçekleştirilen tüm işlemler, görüntünün temel tablolarını da etkiler.
Seriler (sequences): Sequence, veritabanı çizelgelerinin numerik sutunları için biricik (unique) numaralar üretir. Çizelge satırları için otomatik olarak biricik numaralar oluşturmaya yarar. Sıra numaraları çizelgelerden bağımsızdır. Bu yüzden aynı sequence faklı çizelgelerce kullanılabilir.
Program birimleri (program units): Bu terim, yordam ve işlev (procedure and function) ile paketler (package) için kullanılır.
Yordam ve işlev: Belirli bir görevin yapılabilmesi için SQL ve PL/SQL deyimlerinin çalıştırılabilir bir birim halinde gruplandırılmasıdır.
paket:(package): ılgili yordamların, işlevlerin ve başka paketlerin veritabanı içinde bir birim olarak saklanması ve kılıflanması için bir yöntem sağlar.
Eşanlamlılar (synonyms): çizelge, görüntü, sequence ya da bir program birimi bir takma addır (alias). synonym ‘in kendisi bir nesne değildir, sadece gerçek nesneye bir referanstır. ?u amaçlarla kullanılır;
– Nesnenin gerçek adını ve sahibini gizlemek amacıyla,
– Nesneye, herkese açık (public) bir erişim sağlamak için,
– Uzak veritabanlarındaki nesnelere şeffaf bir erişim sağlamak için,
– SQL deyimlerini basitleştirmek için.
index, cluster ve hash cluster : çizelgelerle ilgil seçimlik ve veri erişimindeki performansı artırmaya yönelik yapılardır.
index: Aranan bilginin nerede olduğunun anahtar (key) değerinden yararlanılarak hızlıca bulunabilmesini sağlar. Mantıksal ve fiziksel olarak veriden bağımsızdır. Bir index, diğer index ‘leri ya da çizelgeleri etkilemeksizin yok edilebilir ya da yaratılabilir.
cluster: Aralarında ilişki olan verilerin disk ortamın fiziksel olarak ardışık olarak tutulmasını ve bu sayede disk erişim süresinde iyileştirme sağlar.
hash cluster(anahtarlama işlevi): Saklanacak verinin yerinin bir hash işlevi tarafından bulunduğu cluster yapısıdır. Hash işlevinden aynı sonucu veren veriler fiziksel olarak beraber saklanır.
database links: Bir veritabanından diğerine bir yol tanımlayan bir nesnedir.
Data Block, Extent ve Segment
Oracle datablock: Veritabanındaki verilerin saklandığı enküçük birimdir. Bir veri bloğu disk üzerinde belirli bir veritabanı alanına karşılık gelir ve bir bloğun kaç baytdan oluştuğu bilgisi, veritabanı yaratılırken verilir. extent: Ardışık olarak sıralanmış veri bloğu sayısıdır. segment: Belirli bir mantıksal yapı için ayrılmış extent ‘lerin kümesidir (data segment, index segment, rollback segment, temporary segment gibi). Fiziksel Yapılar Oracle veritabanı, bir ya da daha fazla kontrol dosyasından, veri dosyalarından ve adları kontrol dosyalarında bulunan redo log dosyalarından oluşur. Fiziksel Yapı Tanımı Veri Dosyaları (Data Files) Tüm veritabanı verilerini içerir. Mantıksal yapılar (table, index..) veri dosyaları içinde fiziksel olarak saklanır. Redo Log Dosyaları (Redo Log Files): Kurtarma amacıyla kullanılmak üzere, veritabanına yapılan tüm değişiklikleri tutar. Kontrol Dosyaları (Control Files): Veritabanının fiziksel yapısını ve durumunu kaydede
Dosyalar (files)
Veri Dosyaları (Data Files)
Oracle veritabanı bir ya da daha fazla veri kütüğünden oluşur. Veri dosyaları;
Veritabanının kendisi hakkındaki bilgiyi saklayan veri sözlüğünü (data dictionary) ve kullanıcı verilerini içerir. Sql*Plus ya da Sql*DBA kullanılarak SQL deyimleri yardımıyla yaratılabilir ve mantıksal Oracle bloklarına bölünebilir.
Oracle, gerekli alanı işletim sistemi tarafından yaratılırken ayırılan büyük ve sabit boylu dosyalar kullanır. Her dosya, çizelge (table) ya da dizin (index) gibi bir çok nesne içerir. Dosya alanlarının yönetimi, veritabanı yöneticisinin (Database Administrator-DBA) başlıca görevlerinden biridir.
Günlük Dosyaları (Redo Log Files) Günlük dosyaları; veritabanında yapılan değişiklerin tutulduğu dosyalardır. Döngüsel bir biçimde yazılır gruplar halinde yapılandırılır. normal olamayan bir kapanış (abnormal shutdown) ya da sonra medya arızasından (media failure) sonra kurtarma (recovery) amaçlı kullanılır. Kullanıcı tarafından doğrudan okunamaz. SQL deyimleri ile oluşturulur.
Çoklanmış (multiplexed) Günlük Dosyaları Enaz iki tane redo log grubu olmalıdır. Redo log dosyaları için önerilen konfigürasyon her grup için herbiri farklı disklerde olan enaz iki üye gerektirir. Grup üyeleri aynı zamanda günlenir ve her grupta aynı sayıda üye vardır. Bir grubun tüm üyeleri aynı bilgiyi taşır.
Kontrol Dosyaları (Control Files)
Kontrol dosyası, veritabanının yapısını tarif eden küçük bir ikili (binary) dosyadır. Bu dosya;
– veritabanının açılması ve ona erişilmesi için gereklidir.
– veritabanı açıldığında Oracle ‘ın üzerine yazabilmesi sağlanmalıdır.
– tüm veri ve günlük dosyalarını tanımlar.
– veritabanının adını saklar.
– kurtarma için gerekli olan zamanuyumlama bilgisini sağlar.
– veritabanının yaratılması esnasında yaratılır.
Güvenlik için her biri farklı diskler üzerinde olan en az iki tane kontrol dosyası olmalıdır. Tüm kontrol dosyaları aynı bilgiyi içerir. Eğer biri kaybolacak olursa diğerleri kullanılır durumda kalacaktır. Kontrol dosyasının öngörülen ismi işletim sistemine bağlıdır.
Bellek Yapıları (memory structures)
Sistem Genel Alanı (System Global Area – SGA)
SGA ‘nın üç tane bileşeni vardır;
Database Buffer Cache Veritabanının yakın zamanlarda kullanılan veri bloklarının tutulduğu buffer ‘ların kümesidir. Bu buffer ‘lar, değişikliğe uğramış fakat diske henüz yazılmamış verilere sahip olabilirler. Sık kullanılan verileri tuttukları için de diske erişimi azaltıp performansı artırırlar.
Redo Log Buffer Veritabanında yapılan değişikliklerin tutulduğu buffer ‘lardır. redo log buffer ‘larında tutulan redo girişleri kurtarma gerekli olduğu anda kullanılmak üzere redo log dosyalarına yazılırlar.
Paylaşılmış SQL Alanı (Shared SQL Area) ve Paylaşılmış Havuz (Shared Pool) Paylaşılmış SQL Alanı, Oracle ‘ın özel SQL deyimlerini çalıştırmak için kullandığı bilgileri içerir. Bir SQL sorgusu işletilmeden önce ayrıştırılır ve bu sorgunun çalıştırılması için bir çalışma planı hazırlanır. ışletilen sorgular bu alanda saklanır. Aynı sorgu birkez daha işletilmek istenirse bu çalıştırma planı doğrudan uygulanabilir. Paylaşılmış SQL Alanı, SGA içindeki Paylaşılmış Havuz ‘un bir parçasıdır.
Paylaşılmış Havuz;
– SQL ve PL/SQL deyimlerini
– SQL ve PL/SQL deyimlerinin ayrıştırılmış hallerini
– SQL ve PL/SQL deyimleri için çalıştırma planlarını
– Veri sözlüğü (data dictionary) önbelleğini (cache) içerir.
Program Genel Alanı (Program Global Area – PGA) PGA, tek bir kullanıcı yada sunumcu görevi hakkındaki verileri yada kontrol bilgisini içeren yazılabilir fakat paylaşılmamış bir bellek alanıdır. Kullanıcı görevi Oracle veritabanına bağlandığı ve bir oturum (session) başlatığı zaman bu alan bellekte ayrılır (allocate). PGA yığıt alanı (stack space) oturum değişkenlerini ve dizileri tutmak için ayrılan bellek alanıdır. Kullanıcı oturum verileri (user session data) oturum için fazladan bellek alanıdır.
Görevler (processes) Kullanıcı ve Sunumcu Görevleri (User and Server Processes) UNIX sistemlerinde, kullanıcı bir uygulama programı çalıştırdığında Oracle bir kullanıcı görevi yaratır. Oracle ayrıca bağlanacak kullanıcı görevlerine hizmet verebilmesi için bir sunumcu görev yaratır. Sunumcu görev kullanıcı görevleri ile iletişim kurar.
Sunumcu Görev;
– SQL deyimlerini ayrıştırır ve çalıştırır.
– diskten veri bloklarını okur ve SGA ‘nın paylaşılmış alanına getirir.
– SQL deyiminin sonuçlarını kullanıcı görevine döndürür.
– Görevin Adı Tanımı ,Ayrıştırma (Parse) Sözdizim doğruluğu, erişim gizliliği, nesne çözünürlüğü ve eniyileme kontrolünü yapar. Ayrıştırım ağacını (Parse Tree) oluşturur.
– Çalıştırma (Execute) Ayrıştırım ağacını veriye uygular ve gereken fiziksel okuma ve yazmaları gerçekleştirir.
– Getirme (Fetch) SELECT deyiminin işletimi sırasında veriyi kullanıcıya geçirir.
DBWR Görevi
– DBWR görevi, kullanıcı görevlerinin her zaman boş bellek alanu bulabilmeleri için database buffer cache ‘i yönetir.
DBWR Görevi;
– Değişikliğe uğramış tüm verileri veri dosyalarına yazar.
– Yakın zamanda kullanılan veri bloklarını bellekte tutmak için LRU (Least Recently Used) algoritmasını kullanılır.
– Giriş/çıkış işlemlerini eniyileştirebilmek için bazı yazma işlerini erteler.
Veri, erişilmeden önce sunumcu (server) görev tarafından mutlaka database buffer cache içine getirilmelidir. Sunumcu görev sorguları işlemek için SGA içindeki paylaşılmış belleği kullanır.
Transactionların Günlüğe ışlenmesi (Log Transactions)
Oracle veritabanında yapılan tüm değişiklikleri redo log buffer içine kaydeder. LGWR (Log Writer) arka plan görevi redo log buffer içindeki bilgiyi diske yazar.
LGWR Görevi
LGWR, redo log buffer ‘larını şu durumlar oluştuğunda diske yazar;
– Commit görüldüğünde
– Redo log buffer doluluğu eşik değerine ulaştığı zaman.
– DBWR checkpoint için buffer blokların temizlemeye gerek duyarsa
– Time-out görülürse
Her Oracle instance ‘ı için bir tane LGWR görevi vardır. Bir transaction redo log dosyasına işlenmeden commit edilmiş sayılmaz.
DBWR görevi, veri bloklarını veritabanına geri yazmadan önce yapılan değişiklikleri korumak amacıyla LGWR görevine redo log buffer ‘larını boşaltması sinyalini gönderir.
Arch Görevi (arşivleyici) ARCH (archive – arşiv) görevi aslında seçimlik bir arka plan görevi olmasına rağmen bir çok sistem için özellikle tavsiye edilir. Eğer bu görev çalıştırılıyorsa veritabanı ARCHIVELOG kipinde çalışıyor demektir. Bu seçenek;
– Tablespace ‘lerin çevrim-içi (on-line) yedeklenmesine
– Medya failure ‘dan çevrim-içi kurtarmaya
– Günlük dosyalarının otomatik olarak arşivlenmesine izin verir.
– ARCH görevi, günlük dosyalarının kopyalarını, yerleri daha önce belirlenmiş disk yada teyp birimleri üzerine çıkarır.
PMon (Process Monitor) ve SMon (System Monitor) Görevleri
PMON
– Anormal bir şekilde kesilen bağlantıları temizler.
– Commit edilmemiş değişiklikleri eski haline getirir (rollback).
– ışletimi kesilen görevin tuttuğu kilitleri kaldırır.
– Çakılan görev için ayrılan SGA kaynaklarını serbest bırakır.
– Kilitlenmeleri (deadlock) otomatik olarak yakalar ve işlemi geri döndürerek (transaction rolling back) çözümler.
SMON
– Otomatic instance kurtarmayı gerçekleştirir.
– Geçici segment alanını geri elde eder.
– Kontrol dosyasının sürekliliğini sağlar.
– Sistemde kullanılabilir durumdaki serbest alanın kaydını tutar.
DBA bu görevlerin hızı ya da uyarılma aralığı üzerinde bir kontrole sahip değildir. DBWR ve LGWR gibi bu iki görev de instance çalıştırıldığında hazır olmalıdır.
Diğer Arka Plan Görevleri
– CKPT checkpoint görevi, LGWR üzerindeki yükü azaltmak için kullanılır.
– RECO kurtarıcı (recoverer) görev, çakılmış dağıtık transaction ‘ları çözümler.
– Snnn multi-threaded sunumcuda kullanılan paylaşılmış sunumcu görevleri.
– Dnnn multi-threaded sunumcuda kullanılan dispatcher görevleri.
– SNPn ?ip-şak (snapshot) tazeleyici görevler.
– LCKn parallel server seçimliği kullanıldığında instance ‘lar arası kilitlemeyi kontrol eden görev.
– Oracle An ‘ı (Oracle Instance)
Oracle her başlatıldığında;,
– Sistem Genel Alanı (System Global Area – SGA) olarak adlandırılan paylaşılmış bir bellek alanı bellekte ayrılır.
– Oracle arka plan görevleri başlatılır.
– Bellek alanları ve arka plan görevlerinden oluşan bu bileşim Oracle instance olarak adlandırılır.
– Mutlaka olması gereken dört tane arka plan görevi vardır (DBWR, LGWR, PMON and SMON). Bunlardan başka görevler de vardır fakat kullanımları seçimliktir.
– Bir instance sadece bir veritabanını açabilir.
– Bir instance ‘ın başlatılabilmesi için mutlaka bir veritabanı olması gerekmez.
– Eğer Parallel Server seçeneği kullanılırsa, veritabanı birden fazla instance tarafından açılabilir.
– Kullanıcı ve sunumcu görevleri Oracle instance ‘ın bir parçası olarak tanımlanmazlar.
Parametre Dosyası (Parameter File) ınstance karakteristiklerini belirleyen dosyadır. Parametre dosyası;
– Gerektiğinde DBA tarafından serbestçe düzenlenebilen küçük bir metin dosyadır.
– ınstance başlatıldığında salt-okunurdur.
– Sık sık init.ora dosyasına karşılık gelir.
– Parametre dosyası kontrol dosyasının adını ve yerini belirler.
– Eğer parametre dosyasında herhangi bir değer belirtilmemişse öngörülen (default) değerler kullanılır.
Parametre Tanımı
– SHARED_POOL_SIZE Paylaşılmış SQL ve PL/SQL deyimleri için kullanılacak alanın bayt olarak boyu
– DB_BLOCK_SIZE Tek bir veri bloğu ve veritabanı buffer ‘ının bayt olarak boyu.
– DB_BLOCK_BUFFERS Herbiri DB_BLOCK_SIZE boyundaki veritabanı buffer ‘larının sayısı. (database buffer cache için ayrılan toplam alan :
– DB_BLOCK_SIZE * DB_BLOCK_BUFFERS)
– LOG_BUFFERS Redo log buffer ‘ı için ayrılan baytların sayısı
# Example INIT.ORA file
# $Header: init.ora 7020100.1.1120.4 95/07/07 09:54:09 rdhoopar Generic….
#—————————————————————————————–
# ——-Installation/Database Size——
# SMALL MEDIUM LARGE
# Block 2K 4500K 6800K 17000K
# Size 4K 5500K 8800K 21000K
#—————————————————————————————–
db_name = Oracle72
rollback_segments = (rbs01, rbs02, rbs03)
db_block_buffers = 200 # SMALL
# db_block_buffers = 550 # MEDIUM
# db_block_buffers = 3200 # LARGE
shared_pool_size = 3500000 # SMALL
# shared_pool_size = 6000000 # MEDIUM
# shared_pool_size = 9000000 # LARGE
log_checkpoint_interval = 10000
processes = 50 # SMALL
# processes = 100 # MEDIUM
# processes = 200 # LARGE
log_buffer = 8192 # SMALL
# log_buffer = 32768 # MEDIUM
# log_buffer = 163840 # LARGE
control_files = (/disk6/oracle/dbs/ctrl1oracle72.ctl,
/disk6/oracle/dbs/ctrl2oracle72.ctl,
/disk6/oracle/dbs/ctrl3oracle72.ctl)
background_dump_dest = /disk6/oracle/rdbms/log
core_dump_dest = /disk6/oracle/dbs
user_dump_dest = /disk6/oracle/rdbms/log
#log_archive_dest = /disk6/oracle/dbs/arch/arch.log
#db_block_size =
Database Buffer Cache Diskten okunan veri bloklarının kopyalarını tutar.
Notlar:
ınstance ‘a bağlanan tüm Oracle kullanıcıları Database Buffer Cache içindeki bellek alanını kullanırlar.
blok boyu parametre dosyasındaki DB_BLOCK-SIZE parametresi ile belirlenir. Bellekte tutulacak yastık alan (buffer) sayısı ise DB_BLOCK_BUFFERS ‘dır.
Kontrol Noktaları (Checkpoints) Checkpoint sırasında DBWR, database buffer cache içindeki tüm dirty buffer ‘ları diske yazar.
(dirty buffer : Değişikliğe uğramış fakat diske yazılmamış)
Checkpoint şu durumlarda görülür;
– Her günlük anahtarlanmasında (Log Switch)
– Belirlenmiş bir zaman aralığı sonunda
– Belirlenmiş sayıda işletim sistemi bloğu redo log dosyalarına yazılmasından sonra
– DBA tarafından zorlanması durumunda
– Normal yada immediate shutdown sırasında
– Ablespace, çevrim-dışı (off-line) konuma getirildiğinde
Bir veri bloğu database buffer cache içinde çok uzun süre kalabilir ve bu süre zarfında birçok değişikliklere mazur kalabilir. Yani commit edilen bir kayıt hala diske yazılmamış olabilir. Fakat tüm commit edilmiş işlemler güvendedir çünkü LGWR onların kaydını redo log dosyalarında tutar.
Checkpoint sırasında DBWR bir önceki checkpoint ‘ten sonra değişikliğe uğramış verileri diske yazar.
Eğer instance kurtarmaya ihtiyaç duyarsa Oracle sadece son checkpoint ‘ten sonra yazılan redo log kayıtlarını dikkate alacaktır. Çünkü checkpoint, daha önceki değişiklerin veri dosyalarına yazıldığını garanti eder.
Trace ve Alert Dosyaları Oracle instance çalışıyorken bir hata oluştuğu zaman, bu hata ile ilgili mesajlar alert dosyasına yazılır. Eğer hata sunumcu ya da arka plan görevlerince yakalanırsa, hata ile ilgili bilgiler trace dosyasına boşaltılır.
Alert dosyası mesaj ve hataların kronolojik olarak tutluduğu bir dosyadır. ?unları içerir;
– Tüm içsel (internal), block bozulma (corruption) ve kilitlenme (deadlock) hatalarını
– Yönetim türü işlemleri (DML) ve sunumcu yönetici deyimlerini (startup, shutdown…)
– Veritabanı ve instance başlatıldığı andaki parametre değerlerini
– Alert dosyası BACKGROUND_DUMP_DEST parametresi ile belirtilen konumda bulunur.
Bu dosyanın günlük olarak kontrol edilmesi problerin daha da ciddileşmeden çözülebilmesi açısından çok önemlidir.
Trace dosyaları eğer bilgi arka plan görevi tarafından yazılmışsa BACKGROUND_DUMP_DEST, sunumcu görevi tarafından yazılmışsa USER_DUMP_DEST ile belirtilen konumlarda bulunur.
Trace günlükleme SQL_TRACE parametresinin TRUE ya da FALSE olmasına göre yapılır ya da yapılmaz Aşağıdaki deyim trace dosyalarının yazılmasını sağlar.
SQL> alter session set sql_trace true;
SQL*Plus, SQL komutları ve PL/SQL bloklarını işletmeyi ve bunun yanında veritabanı üzerinde birçok
işlemin yapılmasını sağlayan bir programdır.
SQL*Plus ‘ı kullanarak yapılabilecek işlemler;
SQL komutlarını ve PL/SQL bloklarını girme, düzenleme, saklama, geri getirme ve çalıştırma
Sorgu sonuçlarını bir rapor düzeninde formatlayabilme
Herhangi bir tablo için sutun tanımlarını listeleyebilme
Veritabanındaki verilere ulaşıp bunları kopyalayabilme
Uç kullanıcılara mesajlar gönderip bunlardan gelen cevapları kabul edebilme
Temel Kavramlar Komut (command) SQL*Plus yada Oracle ‘dan yapması istenen
Blok (block) Yordamsal bir mantık içinde birbiriyle ilişkili SQL ya da PL/SQL komutlar grubu
Çizelge (table) Oracle ‘daki temel saklama birimi
Sorgu (query) Bir ya da daha fazla çizelgeden bilgi getiren SQL komut (Select)
Sorgu sonucu Sorgu sonucu getirilen veri (query result)
Rapor (report) SQL*Plus komutları yardımıyla biçimlenmiş sorgu sonuçları
SQL*Plus ‘ın Başlatılması
UNIX sisteme girdikten sonra komut iletisinden aşağıdaki komutu girerseniz, sizden kullanıcı kodunuz
ve parolanız istenecektir.
$ sqlplus
SQL*Plus: Release 3.2.3.0.0 – Production on Wed Aug 13 10:25:37 1997
Copyright © Oracle Corporation 1979, 1994. All rights reserved.
Enter user-name: scott
Enter password:
Connected to:
Oracle7 Server Release 7.2.3.0.0 – Production Release
SQL> _
Artık sisteme girdiniz (logging on). “SQL>” komut iletisi SQL*Plus ‘ın sizin komutlarınızı kabul edip
işletmeye hazır olduğunu gösterir. ?imdi bu komut satırından SQL komutlarını ya da PL/SQL bloklarını
işletebilirsiniz. SQL*Plus ‘ı daha çabuk başlatmak için şu komutu kullanabilirsiniz;
$ sqlplus scott/tiger
Connected to:
Oracle7 Server Release 7.2.3.0.0 – Production Release
SQL> _
SQL*Plus ile işinizi bitirdikten sonra işletim sistemine geri dönmek için exit komutunu kullanabilirsiniz.
SQL> exit
Disconnected from Oracle7 Server Release 7.2.3.0.0 – Production Release
$ _
Komutların Girilmesi ve Çalıştırılması
Komutların girilmesi
Bilgisayarınızın imleci (cursor) komut iletisinden sonra görünür. ımleç, sizin klavyeden gireceğiniz
karakterin ekranda görüneceği konumu gösterir. SQL*Plus ‘dan yapmasını istediğiniz şeye karşı gelen
komutu yazmanız gerekir. Genellikle komutlarla diğer kelimeler arasında boşluk ya da tab karakterleri
olur.Bunların sayısı önemsizdir. Komut iletisinden girebileceğiniz üç tip komut vardır;
SQL komutları
PL/SQL blokları özel amaçlı SQL*Plus komutları (sorgu sonuçlarını formatlama, seçenekleri kurma) yardım
sağlama. Herhangi bir SQL*Plus komutu hakkında yardım bilgisi almak için komut iletisinden HELP komutu
ve ardından hakkındayardım istenen komutun adını girmeniz gerekir.
SQL> help komut_adı
Not : Eğer 2 “HELP not accessible” mesajını aldıysanız bu konuyu sistem yöneticinize bildiriniz.
SQL komutlarının çalıştırılması
Örnek veri tabanımızda yer alan tabloları kullanarak bir sorgu yazmaya çalışalım. Kazancı 2500$ ‘dan
az olan çalışanları bulmaya çalışalım. Komut iletisinden komutun ilk satırını girdikten sonra return tuşuna
basılırsa, SQL*Plus ikinci satır anlamına gelen 2 uyarısını gösterecektir. ; noktalı virgül komutun bittiğini
gösterir. Bundan sonra SQL*Plus, komutu işletmeye başlayacaktır.
SQL> select empno, ename, job, sal /* seçilecek olan nitelikler */
2 from emp where sal
<2500; >Komutlarınıza eklemek istediğiniz açıklamaları (comment) “/* … */” şeklinde yazabilirsiniz.
Sonuçların ve getirilen komutların sayısının gösterilmesinden sonra SQL*Plus tekrar komut iletisini gösterir.
SQL*Plus Komut Sözdizimini (Syntax) Anlama
SQL komutlarınızı istediğiniz sayıda satıra bölebilirsiniz. Fakat en anlamlısı satırlarınızı mantıksal bütünlük
içeren gruplar halinde düzenlemenizdir. (Select, Where, Group By satırı gibi…). Aşağıdaki tüm sterimlerdeki
sorgular özdeştir.
SQL> select empno, ename, job, sal from emp where sal
select empno, ename, job, sal
2 from emp where sal
select empno, ename, job, sal
2 from emp
3 where sal
SQL komut satırı üç şekilde sonlanabilir;
Noktalı virgül (semicolon “;”) ile. SQL*Plus ‘a sizin komutu çalıştırmak istediğinizi söyler.
Bölme işaret (slash “/”) ile. Son girilen komutu çalıştırmak istediğinizi söyler.
Boş satır (blank line) ile. Komuta bir sonraki satırdan devam etmek istediğinizi söyler.
PL/SQL bloklarının çalıştırılması
SQL*Plus içerisinden PL/SQL bloklarını da çalıştırabilirsiniz. SQL*Plus, PL/SQL yordamlarını sanki SQL
deyimlerini işletiyormuş gibi düşünür. PL/SQL bloklarını bitirmek için en son satır olarak nokta “.”kullanılır.
Aşağıda örnek bir PL/SQL bloğu biçimsel olarak verilmiştir.
SQL> declare
2 değişken_adı değişken_türü ;
3 begin
4 SQL _komutları ;
5 end;
6 .
ışletim sistemi komutlarının çalıştırılması
Üzerinde çalıştığınız işletim sisteminin komutlarını SQL*Plus komut iletisinden çalıştırabilir ya da geçici bir
süre için işletim sisteminin kabuğuna (shell) çıkabilirsiniz.
SQL> host [komut]
Aşağıda pwd (print working directory) komutunun iki şekilde nasıl çalıştırılabileceği gösterilmiştir.
SQL> host pwd ; komut doğrudan SQL*Plus ‘ın içinden çalıştırılıyor.
/disk6/oracle/ogrenci
SQL> host ; işletim sistemi kabuğuna çıkılıyor.
$ pwd ;komut uygulanıyor.
/disk6/oracle/ogrenci
$ exit ;SQL*Plus ‘a geri dönülüyor.
SQL> _ ;tekrar SQL*Plus ‘tayız.
ışletim sistemi kabuğuna çıkmak, çalıştırılacak komut sayısı birden fazlaysa daha anlamlı olmaktadır. Ayrıca kabuğa çıktıktan sonra geri dönmek için SQL*Plus tekrar çalıştırılmamalı, bunun yerine exit komutu
kullanılmalıdır.
Çizelge Tanımlarının Listelenmesi
Verilen bir çizelgedeki niteliklerin tanımlarını SQL*Plus ‘ın describe komutunu kullanarak görebilirsiniz
(Kısaca desc olarak kullanılabilir.).
SQL> desc dept
Name Null? Type
——————————- ——– —-
DEPTNO NOT NULL NUMBER(2)
DNAME VARCHAR2(14)
LOC VARCHAR2(13)
Varolan Çizelgelerin ve Görüntülerin Listelenmesi
Bunun için sistemde hazır olarak bulunan tab adlı çizelge kullanılır.
SQL> select * from tab;
TNAME TABTYPE CLUSTERID
—————————— ——- ———-
CUSTOMER TABLE
DEPT TABLE
EMP TABLE
SALES VIEW
SALGRADE TABLE
5 rows selected.
Hata mesajlarının yorumlanması
SQL*Plus bir hata yakaladığı zaman sizi uygun bir hata mesajı ile uyaracaktır. Mesela olmayan bir çizelgeden sorgulama yapmak isterseniz;
SQL> select * from ta;
select * from ta
*
ERROR at line 1:
ORA-00942: table or view does not exist
mesajını alırsınız. ORA hatanın türü, 00942 ise numarasıdır.
Hata ile ilgili ayrıntılı açıklamaları Messages and Codes elkitabında bulabilebileceginiz gibi oerr
programını da kullanabilirsiniz.
$ oerr hata_türü numarası
Komutlar Üzerinde Yapılabilen ışlemler
SQL Buffer
Son girilen SQL komutunun saklandığı bellek alanıdır. Girilen komut, bir yenisi girilene dek burada saklanır. Yani eğer son komut üzerinde bir başka işlem yapmak istiyorsanız, komutun tamamını yeni-
den girmeniz gerekmeyebilir.
komut kısaltma amacı APPEND metin A metin satırın sonuna metini ekler
CHANGE /eski/yeni C /eski/yeni eskiyi yeni ile değiştirir
CHANGE /metin C /metin satırdan metini siler
CLEAR BUFFER CL BUFF tüm satırları siler
DEL yok satırı siler
INPUT I bir ya da daha fazla satır ekler
INPUT metin I metin metini içeren bir satır ekler
LIST L SQL buffer ‘ındaki tüm satırları listeler
LIST n L n ya da n n numaralı satırı listeler
LIST * L * aktif satırı listeler
LIST LAST L LAST son satırı görüntüler
LIST m n L m n m ve n arasındaki satırları listeler
Çalışanlar tablosundan 10 numaralı bölümde çalışan kişilerin adlarını ve maaşlarını sorgulamak isteyelim.
SQL> select deptno,ename, sal
2 from emp
3 where deptno = 10;
DEPTNO ENAME SAL
———- ———- ——-
10 KING 5000
10 CLARK 2450
10 MILLER 1300
En son girdiğimiz SQL deyimi SQL buffer içinde tutulmaktadır. Bu deyimi list komutu ile görebiliriz.
SQL> list
1 select deptno,ename, sal
2 from emp
3* where deptno = 10
Karakteri aktif olan satırı göstermektedir. ıstediğimiz bir satırı görmek için list komutundan sonra
ilgili satırın numarasını vermemiz yeterli olacaktır. Bu sayede istediğimiz satırı aktif satır haline getirebiliriz.
?imdi sırasıyla birinci satırdaki bir değişikliği nasıl yaptığımıza bakalım. Sorgumuzu yanlış girdiğimizi
varsayalım.
SQL> select deptno,enm, sal
2 from emp
3 where deptno = 10;
1 select deptno,enm, sal
2 from emp 3* where deptno = 10
select deptno,enm, sal
*
ERROR at line 1:
ORA-00904: invalid column name /* tablomuzda enm diye bir nitelik yok */
Sorgumuzda yer alan enm nitelik değerini ename olarak değiştirelim. Ve sorgumuzu tekrar çalıştıralım.
Bunun için önce ilgili satırı aktif hale getirmek gerekmektedir.
SQL> list1
1* select deptno,enm, sal
SQL> change/enm/ename
1* select deptno,ename, sal
SQL> run
1 select deptno,ename, sal
2 from emp
3* where deptno = 10
DEPTNO ENAME SAL
———- ———- ———-
10 KING 5000
10 CLARK 2450
10 MILLER 1300
Çalışanları, aldıkları maaşa göre sıralı listelemek istersek, yazdığımız sorgunun sonuna order by sal
komutunu eklememiz gerekecektir. Bunu yapmak için sorguyu yeniden yazmaya gerek yoktur.
SQL> input /* aktif satırdan sonra yeni bir satır ekler */
4 order by sal;
DEPTNO ENAME SAL
———- ———- ———-
10 MILLER 1300
10 CLARK 2450
10 KING 5000
SQL> list
1 select deptno,ename, sal
2 from emp
3 where deptno = 10
4* order by sal
Sonuçları azalan sırada (descending) görmek istersek order by kalıbının sonuna desc kelimesini
eklememiz gerekir.
SQL> append desc /* aktif satır numarası zaten 4 idi */
4* order by sal desc
SQL> list4
4* order by sal desc
SQL> run
1 select deptno,ename, sal
2 from emp 3 where deptno = 10
4* order by sal desc
DEPTNO ENAME SAL
———- ———- ———-
10 KING 5000
10 CLARK 2450
10 MILLER 1300
?imdi sıralama ile ilgili bu dördüncü satırı silelim.
SQL> list 4 /* satırı aktifleştir */
SQL> del /* sil */
SQL> list
1 select deptno, ename, sal
2 from emp
3* where deptno = 10
SQL buffer ‘daki deyimleri belli bir satır aralığıda da listelemek mümkündür.
SQL> list 1 2 /* 1. ve 2. satırları listele */
1 select deptno, ename, sal
2* from emp
Komutların Saklanması
SQL buffer içindeki deyimleri save komutunu kullanarak bir dosyaya yazdırmak mümkündür. Save
dosya_adı komutu çalıştırıldığında, SQL buffer ‘ın içeriği uzantısı .SQL olan dosya_adı isimli dosyaya
kaydedilir.
SQL> save deptinfo
Created file deptinfo
SQL> host ls -l dep*.*
rw-r—r– 1 oracle dba 55 Agu 14 10:00 deptinfo.sql
SQL buffer ‘ın içeriğinin temizlenmesi
SQL> clear buffer
buffer cleared
SQL> list
No lines in SQL buffer.
Komut dosyalarına açıklama satırlarının eklenmesi
Yazdığınız komut dosyalarına ekleyeceğiniz açıklama satırları, bu dosyaların daha sonra da kolayca
anlaşılmasını sağlayacaktır. Bu işlem üç şekilde gerçekleştirilebilir.
SQL*Plus ‘ın REMARK komutu ile
SQL komut ayıraçları ile, /* … */
ANSI/ISO karakterleri ile,
REMARK SQL*Plus ‘ı öğrenmek için verilen örnekler tekrarlanmalıdır.
/* SQL*Plus ‘ı öğrenmek için verilen örnekler tekrarlanmalıdır. */
— SQL*Plus ‘ı öğrenmek için verilen örnekler tekrarlanmalıdır.
Dosyalardaki komutların yeniden kullanılması
Daha önce save komutu ile sakladığımız ya da herhangi bir editor yardımıyla oluşturduğumuz SQL
deyimlerin get dosya_adı komutunu kullanarak SQL buffer ‘a getirebiliriz.
SQL> get deptinfo
1 select deptno, ename, sal
2 from emp
3* where deptno = 10
SQL deyimlerini toplu işlem (batch) olarak çalıştırmak istersek start dosya_adı komutundan
yararlanabiliriz.
SQL> start deptinfo
DEPTNO ENAME SAL
———- ———- ——–
10 KING 5000
10 CLARK 2450
10 MILLER 1300
ya da @dosya_adı komutu kullanılabilir.
SQL> @deptinfo
DEPTNO ENAME SAL
———- ———- ———-
10 KING 5000
10 CLARK 2450
10 MILLER 1300
Dept tablosunun niteliklerinin neler olduğuna bakalım.
SQL> desc dept
Name Null? Type
——————————- ——– —–
DEPTNO NOT NULL NUMBER(2)
DNAME VARCHAR2(14)
LOC VARCHAR2(13)
Bölüm numaralarını ve adlarını sorgulayalım.
SQL> select deptno, dname
2* from dept
DEPTNO DNAME
———- ————–
10 ACCOUNTING
20 RESEARCH
30 SALES
40 OPERATIONS
SQL buffer içeriğini daha önce var olan bir dosyanın sonuna eklemek için append, üzerine yazmak içinse
replace anahtar kelimesi kullanılır.
SQL> save deptinfo append
Appended file to deptinfo
SQL> host cat deptinfo.sql
select deptno, ename, sal
from emp
where deptno = 10
/
select deptno, dname
from dept
/
Etkileşimli komutların yazılması
SQL*Plus, kullanıcılara değişken tanımlama imkanı verir.
SQL> DEFINE EMPLOYEE = SMITH
SQL> DEFINE EMPLOYEE
DEFINE EMPLOYEE = “SMITH” (CHAR)
SQL> cl buff
buffer cleared
SQL> input
1 select &col1, &col2
2 from &tab
3 ;
Enter value for col1: deptno
Enter value for col2: dname
old 1: select &col1, &col2
new 1: select deptno, dname
Enter value for tab: dept
old 2: from &tab
new 2: from dept
DEPTNO DNAME
———- ————–
10 ACCOUNTING
20 RESEARCH
30 SALES
40 OPERATIONS
SQL> save sel2col
Created file sel2col /* geçerli dizinde sel2col.sql dosyası oluşturuldu */
Bu dosya artık start komutu ya da “@” (at) işareti ile çalıştırılabilir.
SQL> @sel2col
Enter value for col1: deptno
Enter value for col2: dname
old 1: select &col1, &col2
new 1: select deptno, dname
Enter value for tab: dept
old 2: from &tab
new 2: from dept
DEPTNO DNAME
———- ————–
10 ACCOUNTING
20 RESEARCH
30 SALES
40 OPERATIONS
SQL> input
1 prompt Aradiginiz calisanin numarasini giriniz
2 accept enumber number prompt ‘Emp.
No. : ‘
3 select ename, job, sal
4 from emp
5 where empno = &enumber
6
SQL buffer ‘daki deyimi zaten var olan bir dosya adıyla kaydetmek isteyelim.
SQL> save sel2col
File “sel2col.sql” already exists.
Use another name or “SAVE filename REPLACE”.
Eğer olan bir dosyanın adını kullanmak istiyorsak komutu şu şekilde kullanmalıyız:
SQL> save dosya_adı replace /* replace = yerini al */
SQL> save prompt1 /* SQL buffer içeriğini prompt1.sql dosyasına yazalım */
Created file prompt1
SQL> @prompt1 /* ya da start prompt1 */
Aradiginiz calisanin numarasini giriniz
Emp. No. : 7521
old 3: where empno = &enumber
new 3: where empno = 7521
ENAME JOB SAL
———- ——— ———-
WARD SALESMAN 1250
Komut dosyalarında parametre kullanımı
Bu işlem, komutların etkileşimli çalıştırılmasına benzer olarak şu şekilde gerçekleştirilebilir. SelJob.sql
dosyasının içeriği aşağıdaki şekilde olsun;
select empno, ename, sal
from emp
where job = ‘&1’
Komut çalıştırılırken dosya adından sonra girilen parametreler &1, &2 … şeklinde sıralandırılır.
SQL> start SelJob CLERK
old 3: where job = ‘&1’
new 3: where job = ‘CLERK’
EMPNO ENAME SAL
———- ———- ———-
7369 SMITH 800
7876 ADAMS 1100
7900 JAMES 950
7934 MILLER 1300
Yararlı Bazı Komutlar
Spool [dosyaAdı | off] komutunu kullanarak işlettiğiniz komutların ve sonuçlarının uzantısı .LST olan bir
metin dosyasına yazılmasını sağlayabilirsiniz.
SQL> spool oturum.lst
SQL> …
SQL> spool off
Set pause [on | off] “metin” komutunu kullanarak uzun çıktılar üreten sorgularınızın ekranda sayfa sayfa
görüntülenmesini sağlayabilirsiniz.
SQL> set pause on
SQL> set pause “Devam için NL tuşuna basınız…”
Pause [mesaj] komutu kullanıcının enter tuşuna basacağı ana kadar işlemi dondurur.
SQL> pause Devam etmek icin ENTER tusuna basiniz…
Devam etmek icin ENTER tusuna basiniz…
Clear screen komutunu kullanarak çalışma ekranınızı temizleyebilirsiniz.
SQL> clear screen
SQL*Plus ‘ın değişken tanımlayabilme özelliğinden yararlanarak kendiniz için bir metin düzenleyici
öngörebilirsiniz.
SQL> DEFINE_EDITOR = pico
SQL> edit deptinfo
Edit komutunu kullandığınızda pico programı çalıştırılacak ve size bir belge yaratma imkanı verilecektir.
Belgeniz üzerindeki işleminiz bitip pico programından çıktığınızda tekrar SQL*Plus ‘a dönersiniz.
Veritabanı ve ınstance ‘ın Çalıştırılıp Kapatılması (startup and shutdown)
Veritabanı sistem yöneticisi, veritabanının açılıp kapatılmasından sorumuludur. Oracle veritabanının
herzaman kullanıcıların erişimine açuk olmasI gerekmez. VeritabanI yöneticisi onu istediği zaman açabilir.
eritabanı açıkken, kullanıcılar veritabanının içerdiği bilgilere erişebilirler. Kapalıyken bu işlem yapılamaz.
Veritabanı ve instance ‘ın yönetimi için screen ve line kiplerinde çalıştırılabilen iki tane program vardır.
Bunlar;
SQL*DBA (Örneklerimizde kullanacağımız araç)
Server Manager (Sadece grafik kullanıcı arabirimi ortamında – Graphic User Interface GUI)
Startup Adımları
SQL*DBA ‘nın çalıştırılması
Internal olarak bağlanma
Start up
Instance ‘ın başlatılması
Veritabanının mount edilmesi
Veritabanının açılması (open)
ShutDown Adımları
SQL*DBA ‘nın çalıştırılması
internal olarak bağlanma
instance ‘ın kapatılması
SQL*DBA ‘nın çalıştırılması
$ sqldba mode = line
$ sqldba lmode = y — line mode, yes
$ sqldba mode = screen
$ sqldba lmode = n — line mode, no
Ya da ORA_SQLDBA_MODE çevre değişkeni line ya da screen olarak kurularak kullanılabilir.

Aşağıda SQL*DBA line modunda çalıştırılmıştır.
$ sqldba lmode = y
SQL*DBA: Release 7.2.3.0.0 – Production on Fri Aug 15 11:45:50 1997
Copyright (c) Oracle Corporation 1979, 1994. All rights reserved.
Oracle7 Server Release 7.2.3.0.0 – Production Release
Veritabanına Internal Olarak Bağlanmak
Veritabanının açılıp kapanma işlemleri önemli işlemlerdir ve Oracle ‘a internal olarak
bağlanmayı gerektirir. Eğer internal olarak bağlandıysanız, artık sistemde en yetkili
kullanıcı olan SYS olarak tanınırsınız.
SQLDBA> connect internal
Connected.
Instance ‘ın başlatılması
Veritabanı başlatılmadan önce veritabanının hangi durumda başlatılacağının seçilmesi gerekir.
Veritabanı üç şekilde başlatılabilir.
Başlangıç Durumu Kullanımı
NOMOUNT veritabanını yaratmak için kullanılır
MOUNT veritabanında bakım ya da kurtarma gerektiğinde kullanılır.
OPEN veritabanını tüm kullanıcılara açmak için kullanılır.
Start Up Işlemi;
instance ‘ın başlatılması
veritabanının mount edilmesi
veritabanının açılması (open)
NOMOUNT, MOUNT ve OPEN seçenekleri birarada kullanılamaz (mutually exclusive).
Yani STARTUP MOUNT OPEN şeklinde bir komut olamaz. SHUTDOWN durumundan açık konuma
geçmek için sadece STARTUP komutu kullanılmalıdır.
SQLDBA> startup
ORACLE instance started.
Database mounted.
Database opened.
Total System Global Area 4451660 bytes
Fixed Size 55648 bytes
Variable Size 3978220 bytes
Database Buffers 409600 bytes
Redo Buffers 8192 bytes
SQLDBA> _
Eğer veritabanı adım adım açılmak istenirse;
SQLDBA> startup nomount
ORACLE instance started.
SQLDBA> alter database mount;
Statement processed.
SQLDBA> alter database open;
Statement processed.
SQLDBA> _
ya da;
SQLDBA> startup mount
ORACLE instance started.
Database mounted.
SQLDBA> alter database open;
Statement processed.
STARTUP [RESTRICT] [FORCE] [PFILE=fname]
[NOMOUNT
| MOUNT [EXCLUSIVE | {PARALLEL | SHARED} [RETRY]]
| OPEN [RECOVER] [dbname]
[EXCLUSIVE | {PARALLEL | SHARED} [RETRY]]]
dbname : veritabanının adıdır.
EXCLUSIVE : sadece geçerli instance ‘ın veritabanına erişmesine izin verir.
SHARED ya da
PARALLEL : birden fazla instance ‘ın veritabanına erişmesine izin verir.
RETRY : paralel instance, 5 saniyelik aralıklarda tekrar başlatulmaya çalışılır.
PFILE=fname : instance ‘ın karakteristiklerini belirleyen bir parametre dosyası belirlenir.
FORCE : normal bir startup uygulanmadan once çalışan instance durdurulur.
RESTRICT : kullanıcılara sınırlı bir erişim sağlar.
RECOVER : veritabanı başlatıldığında medya kurtarma ‘yı uygular.
Veritabanının kapatılması
SHUTDOWN [NORMAL | IMMEDIATE | ABORT ]
NORMAL : diğer kullanıcıların oturumlarını terketmelerini bekler.
IMMEDIATE : o an işletilmekte olan SQL deyimlerini keserek commit edilmemiş
değişiklikleri geri alır.
ABORT : en hızlı kapatma biçimidir. Ne diğer kullanıcıların sistemden çıkmalarını
bekler ne de commit edilmemiş değişiklikleri geri alır.
SQL*DBA komut satırında shutdown komutunu girerseniz sırasıyla ; veritabanı kapatılacak,
dismount edilecek ve son olarak da instance sonlandırılacaktır.
SQLDBA> shutdown
Database closed.
Database dismounted.
ORACLE instance shut down.

Önceki İçerikSQL SERVER 2005
Sonraki İçerikAkıllı ASUS M530w
PAYLAŞ
CEVAP VER
Lütfen yazınızı giriniz.
Lütfen adınızı buraya giriniz.