21 Temmuz 2007 Cumartesi

LOB Tipi

LOB (Large Object, Büyük Nesne) veritipi olan BFILE, BLOB, CLOB ve NCLOB, yapılandırılmamış (unstructured) veri bloklarının 4GB'a kadar depolanmasını sağlar (örneğin metin, grafik görüntüleri, video klipleri, ses gibi). Ayrıca veriye, etkili, rastgele ve parça parça erişime olanak verir.

LOB tipleri LONG ve LONG RAW tiplerinden şu şekilde farklıdır: NCLOB dışındaki LOB 'lar, nesnelerin bir niteliği olabilir, LONG ' lar olamaz. Bir LOB en fazla 4 GB, LONG ise 2 GB olabilir.
LOB 'lar veriye rastgele (random) erişimi, LONG 'lar ise sıralı (sequential) erişimi destekler.

LOB tipleri, lob yerleştiricilerini (lob locators) depolar, bunlar da dışsal (external) bir dosyadaki büyük nesnelere işaret eder (satır içinde veya satır dışında). BFILE verileri ise veritabanı dışında, işletim sistemi dosyalarında sakalanır.

PL/SQL, LOB 'lar üzerindeki işlemleri yerleştiricileri (locators) kullanarak yapar. Örneğin bir BLOB kolon değeri seçildiğinde sadece bir yerleştirici döndürülür, işlem ID'si (transaction ID) bunun başka bir işlemde güncelleme için kullanılmasını engeller; benzer şekilde başka bir oturumda da kullanılamaz.

Oracle9i'den itibaren CLOB 'lar CHAR ve VARCHAR2 'ye çevrilebilir, bunun tersi de geçerlidir. BLOB 'lar RAW'a, RAW 'lar da BLOB 'a çevrilebilir. LOB' lar üzerinde okuma, yazma ve parça parça işlemler yapmak için DBMS_LOB paketi kullanılabilir.

20 Temmuz 2007 Cuma

SUNUCU

Öncelikle Oracle ile ilgili iki kavramın iyi anlaşılması gerekir: veritabanı ve instance (örnek).
Veritabanı, işletim sistemi dosyalarının oluşturduğu fiziksel topluluğa denir. Instance (örnek) ise bir takım Oracle işleçlerinden (process) ve de bir tür bellek olan SGA ‘den (System Global Area) oluşur. Bir veritabanı birden çok instance tarafından açılabilir. Instance ‘ın açtığı veritabanı günden güne veya birkaç saat içinde değişebilir.

Oracle’a bir kullanıcının bağlanması iki türlü olabilir: atanmış sunucu (dedicated server) veya MTS (Multi-Threaded Server) (Çoklu iş parçacıklı sunucu). Atanmış sunucuda oturum (session) boyunca bir sunucu işleci (process), kullanıcı işlece atanır. Her bir oturum için, birebir eşleme şeklinde yeni bir atanmış sunucu oluşacaktır. Bu atanmış sunucu gönderilen SQL komutlarını işleyecektir.

MTS modunda ise Oracle, paylaşılmış sunuculardan (shared servers) oluşan bir havuz kullanır. Bunda kullanıcılar gruplar halinde sunucuları paylaşırlar, böylece ihiyaç duyulan sunucu sayısı belirgin oranda azalır.

MTS ‘de kullanıcı doğrudan sunucu ile bağlantı kuramaz, bunun yerine dağıtıcı (dispatcher) ile bağlantı kurar. Dağıtıcı kullanıcının isteğini SGA ‘deki bir istek kuyruğuna yerleştirir. Boştaki bir sunucu kuyruktan aldığı komutu işler ve sonucu yanıt kuyruğuna yerleştirir. Dağıtıcı, yanıtı kuyruktan alıp kullanıcıya gönderir.

DOSYALAR

Instance ile ilgili olan dosyalar parametre dosyalarıdır. Veritabanı ile ilgili olan dosyalar ise veri dosyaları, redo log dosyaları, kontrol dosyaları, temp dosyalar ve şifre dosyalarıdır.
Parametre dosyalarında kontrol dosyalarının nerde olduğu ve bazı bellek yapılarının büyüklükleri gibi bilgiler tutulur.

Veri dosyaları en önemli dosyalardır, bunlar tablolar, indeksler ve diğer segmentler gibi veritabanını oluşturan temel bilgileri tutarlar. Redo log dosyaları transaction (işlem) kütüklerini (log) tutarlar.

Kontrol dosyaları, veri dosyalarının yerlerini ve durumları hakkındaki bilgiyi tutar. Temp dosyaları disk tabanlı sortları ve geçici depolamaları tutar. Şifre dosyalarında kullanıcı şifreleri tutulur.

Parametre Dosyaları

Bir veritabanının parametre dosyası, init dosyası veya init.ora dosyası olarak bilinir, UNIX’te default adı init.ora ‘dır, Windows’ta ise init%ORACLE_SID%.ora ‘dır. SID ‘si (Site Identifier) tkyte816 olan bir veritabanının init dosyası inittkyte816.ora olacaktır.

Parametre dosyası veritabanının başlatılmasını sağlayan dosyadır, basit bir metin dosyasıdır, dolayısıyla herhangi bir metin editörü ile yazılabilir. Basit bir parametre dosyasında veritabanının adı, veritabanı blok büyüklüğü ve kontrol dosyasının yeri bulunur.

Parametre dosyasının yeri UNIX ‘te $ORACLE_HOME/dbs , Windows’ta ise %ORACLE_HOME%\DATABASE ‘dir. Bu dosyanın içeriği bazen şu şekilde tek bir satır da olabilir:

IFILE=`C:\oracle\admin\tkyte816\pfile\init.ora`

IFILE komutu C’deki #include komutuna benzer şekilde çalışır. Belirtilen yoldaki dosyayı (init.ora) dahil eder.

Veri Dosyaları

Veri dosyaları redo log dosyaları ile birlikte veritabanındaki en önemli dosyalardır. Veritabanındaki bütün veri, en sonunda veri dosyalarında depolanır. Hemen hemen her veritabanında birden fazla veri dosyası olur, en az iki tane olacaktır: biri sistem verileri için biri de kullanıcı verileri için.

Oracle veritabanında nesneleri tutmak için tablespace (tablo alanı), segment (bölüm), extent (kapsam) ve block (blok) gibi paylaşım birimleri kullanır. Depolama alanında yer kaplayan veritabanı nesnelerine segment denir. Bir tablo yarattığımızda tablo segmenti yaratırız. Bölümlü (partitioned) tablo yarattığımızda her bir bölüm için bir segment yaratırız. Aynı şekilde bir index için gene bir index segmenti yaratılır.

Her bir segment bir veya daha fazla extent’ten (kapsam) oluşur. Extent, bir dosyadaki ayrılmış bitişik boşluklardan oluşur. Bir extent tek bir blokla 2GB arasında bir büyüklükte olabilir. Extent, bloklardan oluşur. Blok, Oracle’daki en küçük boşluk paylaştırma birimidir.

Veri satırları, index girişleri ve geçici sort sonuçları bloklarda depolanır. Blok, Oracle’ın diskten okuduğu veya diske yazdığı şeydir. Bloklar genelde 2KB, 4KB veya 8KB büyüklükte olur (16 KB ve 32 KB’a da izin verilmiştir). Blok büyüklüğü veritabanı oluşturulduktan sonra değiştirilemez, veritabanındaki bütün bloklar aynı büyüklüktedir.

Bir blok şu bölümlerden oluşur: Header (başlık), Table Directory (Tablo Dizini), Row Directory (Satır Dizini), Free Space (Boş Alan), Data (Veri). Bunlardan ilk üçüne Block Overhead (Blok Yükü) denir ve Oracle tarafından bloğun yönetiminde kullanılır, buraya veri yazılamaz.

Tabloalanı (Tablespace), segmentleri içeren bir yüklüktür (container). Her bir segment tek bir tabloalanına aittir. Bir segmentin bütün extentleri, segmentin bulunduğu tabloalanında bulunacaktır. Bir tabloalanındaki herhangi bir segmentin bir extenti bütünüyle tek bir veri dosyasında yer alacaktır, ancak bir segment farklı veri dosyalarında bulunan extentlere sahip olabilir.

Bir veritabanı bir veya daha fazla tabloalanından oluşur. Bir tabloalanı bir veya daha fazla veri dosyası içerir ve de segmentleri içerir.

Temp Dosyalar

Oracle’daki geçici veri dosyaları (temp files), özel bir tip veri dosyasıdır. Oracle RAM’da yeterli yer olmadığında sort işlemlerinin ara sonuçlarını ya da sonuç kümesini bu temp dosyalara yazar, kalıcı veri nesneleri bu dosyalarda saklanmaz.

Normalde, Oracle’da bir nesneye yapılan değişiklik redo kütüklerinde (log) saklanır, ancak temp dosyaları için bu geçerli değildir. Temp dosyaları için ise UNDO oluşturulur. Veritabanının yerel yönetimli geçici tabloalanları ile konfigüre edilmesi önerilmektedir. DBA, CREATE TEMPORARY TABLESPACES komutunu kullanmalıdır.

Kontrol Dosyaları

Kontrol dosyası oldukça küçük bir dosyadır, anormal şartlarda 64 MB’a kadar büyüyebilir, Oracle’ın ihtiyaç duyduğu diğer dosyaların dizinini tutar. Parametre dosyası (init.ora dosyası) Oracle instance’ına kontrol dosyalarının nerede olduğunu söyler, kontrol dosyaları da instance’a veritabanının ve online redo log dosyalarının nerede olduğunu söyler ayrıca checkpointler, veritabanının adı ve archive redo log geçmişi (history) hakkında da bilgi verir.

Kontrol dosyaları ya donanımla (RAID) çoklanmalıdır ya da ayrı ayrı disklerde birden fazla kopyası alınmalıdır (diskin bozulma ihtimaline karşın), bu dosyaların kaybolması kurtarma (recovery) işlemini zorlaştırır.