18 Aralık 2009 Cuma

NOT NULL CONSTRAINT / NULL VALUE

Merhaba,

Sıklıkla karıştırılan ve bol bol sorular gelen bir konuyu ele almak istiyorum. NULL değer karmaşası ve NOT NULL constraint'i.

Öncelikle aklımızda bulundurmamız gereken bilgi şudur; NULL bir değer değildir! NULL sıfır değer demekte değildir! NULL bir değere sadece değersizdir diyebiliriz.

NOT NULL Constraint ile ilgili olarak;

1) Bir NOT NULL constraint'i sadece sütun seviyesinde tanımlanabilir.
2) Tablo objesinin yaratılışı sırasında CREATE TABLE statement'ı ile birlikte yaratılabilir.
3) Tablo objesi yaratıldıktan sonra ALTER TABLE ... MODIFY ifadesi ile tablo'ya eklenebilir.
Önemli Not: ALTER TABLE ifadesini sadece bir constraint'i drop, enable ve disable etmek için kullanabilirsiniz. Constraint yapısını değiştirmek için kullanılamaz!
4) NOT NULL constraint'ini tanımlayacağımız sütundaki bütün verilerin null dışında bir değer olması gerekiyor ya da tablonun tamamen boş olması.
5) NOT NULL constraint'leri data dictionary'de CHECK constraint başlığı altında saklanırlar. Dictionary sorgulandığı zamansa CHECK constraint'i olduğunu gösteren "C" değeri görünür.

NOT NULL constraint'leri ile ilgili olarak aklıma ilk gelenler ve önemli olanları yukarıdaki gibi sıraladım. Unutmadan ufak bir dip not; ORDER BY ifadesinin DESC, yani büyükten küçüğe doğru sıralama ile kullandığımız zaman ilk karşımıza gelecek değer öbekleri NULL olanlardır. NULL değerler ORDER BY ifadesinde en büyük olarak geçerli sayılırlar. Bu duruma da dikkat etmekte fayda vardır.

İyi çalışmalar,

Ogan

1 Aralık 2009 Salı

SNIPED Oracle Oturumları

Merhaba,

Oracle veritabanındaki v$session görüntüsünde Oracle veritabanına bağlı arkaplan ve kullanıcı oturumları listelenir. Bu oturumların da o anlık durumları ile ilgili bilgiler sağlanır.

Örneğin aktif olarak sorgu koşturan bir kullanıcı oturumu varsa v$session'da "ACTIVE" olarak listenelirken, sorgu koşmayan bir kullanıcı "INACTIVE" olarak görüntülenebilir. Bir veritabanı yöneticisi olarak, aktif kullanıcıların sistem kaynaklarını tüketmelerini ve inaktif kullanıcıların da sistemden çıkartılarak, daha fazla pga tüketmelerini engellemek isteyebilirsiniz. İşte bu inaktif kullanıcılar için bir profil ayarı var ve adı da idle_time. Eğer varsayılan profili kullanıyorsanız ve idle_time parametresine de "unlimited" yerine dakika cinsinden bir değer atadıysanız -ki bunu yapabilmek için resource_limit parametresinin de true olması gerekiyor ve spfile kullanılan bir veritabanında bunları dinamik olarak yapabilirsiniz- atadığınız dakika değeri boyunca işlem yapmayan kullanıcıların oturumları Oracle tarafından sonlandırılacaktır.

Bu sonlandırmanın ardından oturumlar Oracle'da sonlandırılacağı için unix oturumlarının açık kalma ihtimali de mevcuttur. Bu durumda v$session'daki durumları inactive ya da killed yerine SNIPED olarak değiştirilecektir. SNIPED olan bir oturuma Oracle daha fazla müdahale etmez ve sizin bu oturuma ait işletim sistemi seviyesindeki oturumunu sonlandırmanızı bekler.

SNIPED olan oturumları aşağıdaki şekilde listeyebiliriz;

SQL> select * from v$session where status = 'SNIPED';

SNIPED olan bir oturumu öldüremeyiz çünkü oturum Oracle tarafından öldürülmüş durumdadır. SNIPED olan bir oturum yeniden aktif hale getirilemez ve ilgili kullanıcı, kendi kullanıcı adı ve şifresi ile yeniden bağlanmayı denemelidir.

İyi çalışmalar,

Ogan
Takip et: @oganozdogan