Oracle’da Geçici Tablolar (Temporary Tables)

Oracle klasik olan ve verilerin kalıcı olarak tutulduğu tablo tiplerinden farklı olarak, verilerin geçici olarak tutulabildiği tablo desteği de sağlamaktadır.Geçicilikten kasıt bu tabloların transaction ya da session bazlı olarak tutulmasıdır.Yani bu tür tablolardaki veriler ya transaction sonunda “COMMIT” edilene kadar ya da session sonlandırılana kadar tutulur.
Genel olarak incelemek gerekirse aşağıdaki noktalara değinmekte fayda var:
1) Geçici tablolar , geçici segmentleri (temporary segments) kullanırlar.Normal tablolardan farklı olarak, kendileri (ve oluşturulduysa indeks(ler)i) oluşturuldukları zaman değil INSERT (ya da CREATE TABLE AS SELECT) işleminden sonra veritabanında yer işgal etmeye başlarlar. Transaction bazlı ise transaction sonlandıgında (COMMIT), session bazlı ise session sonlandığında geçici segmentte yazılan bilgiler silinir.
2) Bu tabloları oluşturmak için “CREATE GLOBAL TEMPORARY TABLE” anahtar sözcükleri kullanılır.Temel olarak session bazlıdırlar.Bundan kasıt aynı geçici tabloyu kullanacak olan 2 farklı session diğer session’da kullanılan geçici tablodan bağımsızdır, veri o session’a özgüdür.(Bu sebeble DML lock mekanizmasına ihtiyaç yoktur.)Örneğin bir session’da geçici tabloya yapılan truncate işlemi diğer session’daki geçici tabloyu etkilemez.Diğer session’daki tablo truncate olmaz.Session herhangibir sekilde sonlandıgında geçici tablodaki bilgiler otomatik olarak silinir, kaybedilir.Her session kendi session’ındaki geçici tablo bilgilerini görür.
3) Geçici tablolar üzerinde yapılan herhangibir DML sonrasında veri değişikliği sebebi ile bir “redo log” üretimi olmaz.Bununla birlikte veri için “undo log” ve “undo log”’lar için de bir redo log üretimi olur.(Redo log: commit yapılmadan evvel tüm değişikliklerin tutulduğu yer, Undo : -rollback- ,verinin DML yapılmadan (değiştirilmeden) evvelki hali)
4) Geçici de olsalar bu tablolar üzerinde CREATE INDEX ile indeks oluşturmak mümkündür.Tabi bu indekste tablonun kendisi gibi geçicidir.Oluşturulan indeks bilgisi de session bazlıdır.Diğer session’lar bunu görmez.Hatta bu tablolar ile VIEW lar da oluşturulabilir , üzerlerinde trigger bile yazılabilir.Yine bu tabloların tanımları (verileri değil) EXPORT ve IMPORT yapılabilir.
5) Transaction bazlı geçici tablolar o transaction ya da bu transaction’ın alt transaction’ları tarafından ulaşılabilirdirler.Bununla birlikte aynı session içersindeki transctionlar gecici tabloyu “concurrent” olarak kullanamazlar.Örneğin bir transaction geçici tablota bir INSERT yaptığında bu transaction’ın alt transaction’ları artık bu geçici tabloyu kullanamazlar.Tersi durumda yani alt transaciton INSERT yaparsa , bu transaciton sonunda veri kaybolur ve ne kendisi ne de ana transaction tabloya ulaşamaz.
Kullanıma örnekler verecek olursak : transaction sürerken ara sonuçları tutabileciğimiz bir tablo olarak kullanılbileceği gibi ,çok fazla “redo” üretileceği ama bunu istemediğimiz durumlarda ya da bir rapor cekileceğinde referans tablo olarak uygun şekilde kullanılabilir.
sentaks
Transaction bazlı geçici tablo oluşturmak için (Her commit’te veriler silinir):
create global temporary table
table_name [ table definition ]
on commit delete rows;
Session bazlı geçici tablo oluşturmak için (veriler session sonuna kadar tutulur.)
create global temporary table
table_name [ table definition ]
on commit preserve rows;
Kaynak:

CEVAP VER
Lütfen yazınızı giriniz.
Lütfen adınızı buraya giriniz.