Google
 

8 Ekim 2007 Pazartesi

Temel Oracle Bilgileri

Temel Oracle Bilgileri

Veritabanı yapıları Mantıksal (logical) Fiziksel (physical) Oracle Sistem MimarisiDosyalar (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 kaydedeDosyalar (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 1300En 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 = 10Karakteri 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

Hiç yorum yok:

webuzmani.blogspot.com

HTML KODLARI SEÇ BEĞEN