4000 byte’tan daha büyük verilerle çalışıyorsak LOB  alanlara ihtiyacımız olacaktır.   

Standart (basit) veritabanı tipleriyle çalışmak diğer datalarda olduğu gibi Oracle’da da oldukça kolay. Fakat dosya saklama – ya da stringe dönüşümünde veri bozulmaları yaşayabileceğimiz 4000 byte tan büyük datalarla çalışacaksak Oralce LOB (Long Objects) lara ihtiyacımız olacaktır. PHP ile Oracle LOB alanlarda  yapabileceğimiz işlemleri incelemden once kısaca LOB tipleri tanımlayalım  

Oracle LOB Objects     

 

  • BLOB, Binary verileri saklamak için kullanırır (Binary Long Object)
  • CLOB, Veritabanı karakter setinde normal karakterler saklamak için kullanılır (Characters Long Object)
  • NCLOB,Unicode datalar saklamak için kullanılır . PHP nin Oci8 eklentisinde bu yoktur.
  • BFILE, Veritabanı sunucusnda dosya adresini referans alarak sunucuda saklanacak dosyalar için kullanılır.
  •   

    Üzerinde işlem yapılan LOB alanlar biz boşaltana kadar geçici tablo alanında (Temporary Tablespace) saklanır .  Oracle 9i ve öncesinde bu tipler için table spacede ayrı ayrı saklama yeri oluşturuluyormuş bu yuzden eski sürümlerde bu tipler üzerinde işlem yaparken daha dikkatli olmamız söyleniyor.   

     LOB Saklama 
    Oracle 10g  her LOB hücresi için 128 TB kadar veri saklama kapasitesine sahipmiş. Bu Veri tabanı block boyutu ve yığınlama ayarlarında isteğe bağlı değiştirilebiliniyormuş.  LOB verilerinin saklanması 2 elemanla olur. LOB Content  ve LOB Locator. LOB Content   sadece LOB Locator’un adresini içerir. 
          Dahili LOB tipleri (BFILE dışında kalanlar) 4KB nin altında  olduğu sürece diğer tablo verileriyle aynı (stored in line in the table ) yerde saklanır.   lob alanlarınız 4 kb den küçükse isteklerinizin işlenip size gelmesi gayet hızlı olacaktır. fakat büyükse bu  tablo için yapılan SELECT sorgularında LOB sütunlarının dahil edilmesi sorgu sonucu almanızı yavaşlatacaktır.  

    LOB Kısıtlamaları  
     Lob alalar için en önemli kısıtlamalar. Sorgu dahilinde sıralama ve gruplama işlemleridir.  

    • Coğul Elemelerde  kullanılmaz
    • Sıralamalarda kullanılamaz
    • Gruplamalarda kullanulamaz
    • Birleştirmelede kullanılamaz
    • Primary Key olarak atanamaz
    • Unique index oluşturulamaz

    SELECT DISTINCT <lob_type>
    ORDER BY <lob_type>
    GROUP BY <lob_col>   

    dahil edemeyeceğimiz bu işlemler ile yine bu işlemleri kullanan  UNION -MINUS -INTERSECTION gibi tablo birleştirme işlemlerinide kısıtlamış olur.  

    PHP ve ORACLE LOB işlemleri (OCI-Lob Sınıfı):
       Bu sınıfla ilgili php manual de  maalesef cok sınıflı bilgi var.  php ile OCI LOB işlemleri yapmamız için kullanabileceğimiz bu sınıf dikkatimi çektiği üzere bir cok PHP IDE tarafından da complatorlara dahil edilmemiş.! 

    Yerel Sunucumda PHP 5.3 versiyonunda OCI-Lob sınıfının metodlarını incelemek istedim.
      

    OCI-Lob::load()          
    OCI-Lob::tell()          
    OCI-Lob::truncate()      
    OCI-Lob::erase()         
    OCI-Lob::flush()         
    OCI-Lob::setbuffering()  
    OCI-Lob::getbuffering()  
    OCI-Lob::rewind()        
    OCI-Lob::read()          
    OCI-Lob::eof()           
    OCI-Lob::seek()          
    OCI-Lob::write()         
    OCI-Lob::append()        
    OCI-Lob::size()          
    OCI-Lob::writetofile()   
    OCI-Lob::export()        
    OCI-Lob::import()        
    OCI-Lob::writetemporary()
    OCI-Lob::close()         
    OCI-Lob::save()          
    OCI-Lob::savefile()      
    OCI-Lob::free()           

    metodların hepsini maalesef işleyemeyeceğim fakat kullandıkça örnekleri de buraya yazmaya çalışacağım. 

    One Response to “php oracle ve lob tipler”

    1. [...] OCI-Lob  sınıfını tanımıştık. bu sınıfın insert ve update  sorguları için kullanılan metodu olan OCI-Lob::save()  metodunu inceliyor olacağız.  Update sorgularımız için şartımıza uyan bir satır  yoksa php OCI_INVALID_HANDLE gibi bir hata fırlatıyor. update işlemlerini bir sonraki yazıda işleyeceğimiz için şimdilik sadece bahsedip geçiyoruz. OCI-Lob bool save ( string $data [, int $offset ] ) [...]

    Leave a Reply

    (required)

    (required)


    + 2 = eight

    You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

    © 2012 Tufan Suffusion theme by Sayontan Sinha