DERS 7: Database Storage Yapısının Yönetimi
Database Storage Yapısını Yönetmek.
Tablo verisi nasıl depolanır?:
Oracle’ın en küçük parçası Data Blok’larıdır. Blokların boyutu 8 Kb’tir. Bloklar bir araya gelince extent’i oluşturur. Bir extentin boyutu 8 tane bloktur. Yani 8*8 Kb’tir. Extentler bir araya gelince Segmenti oluşturur. Segment dediğimiz ise tablolar, indexler, viewlardır. Taınım olarak segment: bir bütünü oluşturan yapılara denir. Segmentler bir araya gelince Tablespacei oluşturur. Tablespaceler birden fazla Datafile’den oluşabilir. Tablespace’ler bir araya gelince database’i oluşturur.
Small file kullanılan veri tabanlarında bir Datafile’ın boyutu maksimum 32 GB’a kadar büyüyebilir. Big file kullanılan veri tabanlarında ise 8 TB’a kadar veri tutabilmektedir. Big file’e göre çalışan yapılarda bir tablespace sadece bir datafile alır. Bu nedenle biz small file yapılarında çalışacağız. Datafile oluştururken eğer big file olmasını belirtmezsek varsayılan olarak small file olarak oluşturacaktır.
Yukarıdaki resmi incelersek, iki segmentten oluşan bir tablespace bulunmakta. Tablo B için bir insert işlemi gerçekleşmiş ve tablo blokları tamamen dolu noktasına gelmiş. Yani insert işleminin tamamlanması için veri tabanının yeni bir blok’a ihtiyacı var. İşte bu aşamada veri tabanı insert işleminin ihtiyacı kadar blok extent alır. İnsert işlemi için fazladan 3 blok gerekiyorsa bir extent ile 3 blok büyüme gerçekleşmiş olacaktır. Extent: Blokları disklerden alıp, segment’lere ekleyen mantıksal bir kavramdır. Datafile oluştururken extent alıp almasını belirleriz. Bu konuya ileride tekrar değinceğiz.
Database Blokları Nedir, İçinde ne vardır?:
Bloklar 8 Kb boyutunda olduğunu söylemiştik şimdi bu blokların içerisindekileri inceleyelim.
1.Blok Header: Blok Header içerisinde Metadata, blok içerisinde bulunan verinin adresi, bu blok hangi data file’ın kaçıncı bloğu, içerisinde hangi dataları tutuyor gibi bilgileri tutar.
2.Free Space: Blok içerisindeki datalara update gelirse, updateleri başka bloğa yazmasın diye kullanılır. Çünkü farklı bloklara update olursa okurken farklı bloklardan okuycağından performans kaybı olabilir. Tabloyu oluştururken varsayılan olarak %10’luk bir free space alanı oluşturulur ve PCTFree isminde parametresi bulunmakta. Her segment oluşturulurken PCTFree parametresi verilebilir. PCTFree parametresi kullanılarak Free Space alanı 0 olarak ayarlanabilir ya da arttırılabilir. PCTFree parametresi 0 olan yapılar genellikle Data Warehosune yapılardır. Çünkü veri gelir ve değişmez. Free Space alanı eğer Update için bu alan yetmediyse o zaman yeni bir extend almak zorunda kalacaktır.
3.Row Data: Verinin tutulduğu alandır.
Storage Yapısını İnceleyelim:
Yukarıdaki ekranda server tabının altında storage bölümünün altında storage ile ilgili yani verilerin saklandığı alan ile ilgili herşeye ulaşabiliriz. Control File’ler, Tablespace’ler, Data File’ler gibi yukarıdaki resimde görünen her yapıyı tüm detayları görebilir, oluşturabilir ve yönetebiliriz. Mantıksal veri yapıları veri tabanının fiziksel dosyalarında saklar.
Tablespace Oluşturma:
Yeni bir tablespace oluşturmak için Enterprise Manager sayfasındaki Server tabına gelerek Storage altından Tablspaces sayfasını açarız.
Yeni bir tablespace oluşturmak için Enterprise Manager sayfasındaki Server tabına gelerek Storage altından Tablspaces sayfasını açarız.
Gelen sayfada karşımıza varolan tablespace’leri görürüz. İncelediğimizde Allocated (ayrılan) alan boyutu, içindeki datanın miktarı ve yüzdelik olacak şekilde doluluk miktarı. Yeni bir tablespace oluşturmak için create tıklanır.
Extent managementi ne olacak sorusu var iki seçenek mevcut. Locally managed yada dictionary managet biz locally managed seçmek zorundayız, çünk dictionary managed önceki sisterde kullanılan 10G ve sornası için artık bir aktivitesi kalmayan yapıdır. Ancak Upgrade senaryolarında işe yaramaktadır. Sonra bize tablespace type’inin ne olacağını soruyor. 3 seçenek var Permanent, Temporary ve Undo. Temporary geçici bir tablespace oluşturmak istersek seçilir. Undoyu ileride daha tetaylı anlatacağım, kısa bilgi olarak verilerin değişmeden önceki hallerinin tutulduğu tablespacedir. Bizim seçmemiz gereken type permanenttir çünkü içerisine data yazıp ve data okuyacağımız tablespace tibi Permanent tablespace tipidir. Sonrasında bu tablespace üzerinde netür bi işlem yapılacğaını soran status kısmı var burada da ben hem içerisine veri yazacağım hemde veri okuyacağım için read / write belirtiyorum. Sadece bunlarla işimiz bitmiyor. Bir tablespacein çalışabilmesi için fiziksel tarafta mutlaka datafilei olması gerekmektedir demiştik. Yani oluşturmak istediğimiz tablespace’e birde en az bir datafile eklememiz gerekmekte. Ancak 3 tane eklemek tavsiye edilir. Datafile eklemek için alttaki Datafiles bölümündeki add butonunu tıklayarak datafile ekleyeceğiz.
İlk olarak bize storage typeini soruyor. Biz burada Automatic Storage Management (ASM) seçmemiz gerekecek. Çünkü +DATA altında verilen bulundurulması güvenli olacaktır. Automatic Storage Management seçerek devam edebileceğimiz gibi ben eğitim amaçlı olarak File System seçeneğini de anlatmak adına File System seçeneğini seçiyorum. Normal şartlarda dediğim gibi Automatic Storage Management seçilecektir. Yapılandırma hem ASM için hem de File System için aynı şekildedir. Eğer ASM seçersek Disk group seçeneğimiz olur ve ASM ya da FRA seçeneklerimiz olacaktır. ASM seçtiğimizde datafile için DATA disk grubu seçilmelidir. Çünkü FRA yedek için kullandığımız disk grubudur. Alt kısımda ise Storage bölümü bulunmakta. Bu bölümde ise Datafile’in otomatik olarak extent alıp almayacağını belirleriz. Autmatically extend datafile when Filefull (AutOEXTEND) kutucuğunu işaretleriz. Increment bölümünde her seferinde kaç mb extend alacağını belirleriz. Bu önemlidir çünkü eğer insert işlemlerimiz fazla yapılmaktaysa extent boyutu büyük ayarlanmalı aksi takdirde küçük extend boyutu ayarlanırsa veri tabanımızda performans sorunları oluşacaktır. Eğer extend almasını istemezsek bu durumda data’file dolmuşsa insert işlemi yapamayacağız. Ve hata olarak da datafile maximum seviyeye ulaştığını belirten bir hata alırız ve bu hata içinde de extend alamadığını da bildirecektir. Maximum File Size seçeneğinde eğer smoll file kullanıyorsak ve unlimited işaretlersek 32 GB’a kadar extend alacaktır. Eğer bu boyuta kadar değilde daha düşük bir seviyeye kadar büyümesini istersek value kısmından büyümesini istediğimiz en üst seviyeyi belirleriz. Ben eğitim amaçlı File System seçiyorum ve aşağıdaki gibi kuruluma devam ediyoruz. Ancak sizler ASM seçiniz. Ancak bu konuyuda bilgileriniz arasında tutunuz.
File name bizim belirleyeceğimiz herhangi bir isim olabilir. Ben deneme01.dbf seçiyorum .dbf database file uzantısıdır. Bizden ayrıca aşağıda File directory (dizini) sormakta istersek bunu herhangi farklı bir lokasyonada koyabiliriz. Örneğin network üzerinde QNAP gibi bir storage kullanıyorsak buranın üzerinde de gerekli ayarlamalar yapılmışsa tutulabilir. Yani File Directory size kalmıştır.
Şimdi de yukarıdaki storage bölümüne geçerek Extent Allocation bölümüne bakalım. Burada amaç datafile büyürse yani boyutunu doldurursa ne yapacağımız konusunda bize bilgi sormakta. Ben automatic yapıyorum ve gerektiğinde extent almasını istiyorum. Aksi halde boyut belirtiriz ve oboyuta geldiğinde artık yeni veri ekleyemeyiz. Eklemek istediğimizde hata alırız. Segment space management için automatic seçiyorum ve Compression Options (sıkıştırma seçeneği)’ni disable yapıyorum, Log tutmasınıda istediğimden Enable Logginge yes diyerek continue diyorum. Show SQL butonuna tıkladığmızda, komutlar ile nasıl oluşturulacağını görebiliriz.
Tablespaces sayfasında var olan bütün tablespaceleri görmekteyiz. Aynı zamanda edit, view, delete ve actions butonlarını veya seçeneklerini görmekteyiz. Üzerinde değişiklikler yapmak istediğimiz tablespacei seçerek edit deriz, görüntülemek için view, silmek için delete. Hangi tablespacein ne işe yaradığına değinmiyorum.
Actions Açılır Menüsü:
Actions bölümüne değinelim. Üzerinde işlem yapmak istediğimiz tablespace seçildikten sonra Action açılır menüsünden yapılacak işlem seçilir. Action açılır menüsündeki seçeneklerin bir kısmına değinelim.
Add Datafile : Seçili olan tablespace’e Datafile eklemek için kullanılır.
Create Like : Seçili olan tablespace’in özelliklerinin aynısından bir tane daha oluşturmak için kullanılır.
Generate DDL : Seçili olan tablespace’in SQL Syntax’ını görürüz.
Make Loaclly Managed : Seçili tablespace eğer dictionary managed olarak ayarlıysa Locally Managed’a çevirmek için kullanılır. Normal şartlarda dictionary managed oluşturamayız. İstesek de hata alırız. Ancak 10g öncesi sistemlerde dicitonary managed kullanırlır. Eğer eski sistemlerden upgrade yapmışsak dicitionary olarka yeni versiyona geçer ve o table space bu action kullanılarak locally managed’e geçirilir.
Make Readonly : Seçili olan tablespace’i read only moda çeker. Read only moda çekmişsek statüs kısmında read only ikonu çıkacaktır.
Make Writable : Seçili olan tablespace eğer readonly olarak ayarlanmışsa write moda çeker.
Reorganize : Seçili olan tablespace dağılmış blok yapısına sahip ise bu seçenek ile toparlanacaktır. Yani veriler yanyana düzenlenecektir. Ancak bu işlemi yapmak risklidir. Çünkü bu işlemi yapmak saatler alabilir. İlerleyen konularda bu işlemi tablo bazlı yapacağız.
Run Segment Advisor : Seçili olan tablespace’deki dağılmış tabloları öğrenmemizi sağlamakta.
Show Tablespace Contents : Seçili olan tablespace’in içindekileri gösterir.
Segment ismini girerek (tablo, view gibi isimler) extent map’ı tıkladığımızda açılan penrecedeki sarı ile taralı alanlar segment’imizin kapladığı alanları göstermektedir.
Yukarıdaki adımlarda tablespace’i oluşturduk ancak oluşturduğumuz tablespacei kullanabilmemiz için varsayılan olarak ayarlamamız gerekmekte ya da her segment oluşturmak istediğimizde bu tablespacei göstermemiz gerekecektir. Ancak ben her işlem için bu tablespace’i varsayılan yapmka istiyorum. Ancak şuan varsayılan tablespace users tablespace’idir. Peki nasıl varsayılan olarak ayarlarız.
Varsayılan olarak ayarlamak için edit yapacağımız tablespacei seçeriz ve edit butonuna basarız. Ben oluşturmuş olduğumuz DENEME tablespaceini seçiyorum ve edit diyorum.
Type bölümünde set as default permanent tablespace işaretleriz ve apply butonuna bastığımızda bu tablespace’imiz artık varsayılan olarak ayarlanmış olacaktır.
Tablespace Bilgilerini görüntülemek için kullanılan komutlar:
Tablespace bilgisini görüntülemek için DBA_TABLESPACE ya da V$TABLESPACE kullanılır.
Datafile bilgileri için DBA_DATA_FILE ya da V$DATAFILE kullanılır.
Temp File bilgileri için DBA_TEMP_FILES ya da V$TEMPFILE kullanılır.
İsmail Aktaş
Kaynaklar
Oracle Eğitimi ve Kitapçıkları
Internet
Son Yorumlar