|
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.
|