Tablespace Nedir?
Bu
yazimda Tablespace’in ne oldugunu, yapisini ve nasil
olusturabilecegimizi ifade etmeye calisacagim. Tablespace; sadece bir
veritabanina ait olup icerisinde objeler bulunduran mantiksal depolama
yapisidir. Bir baska deyisle Oracle
Veritabani uzerinde datalarin yani verilerin saklandigi yer fiziksel
olarak Datafile mantiksal olarak ise Tablespace olarak ifade
edilmektedir. Tablespace’ler sifir ya da sifirdan fazla segment’e sahip olabilirler.
Bir uygulamaya ait tablo ve indeksleri bir Tablespace icerisinde
tutabilir ve verinin yonetimini kolaylastirabiliriz. Butun bir
veritabaninin yedeginden donmek yerine bir Tablespace’i kurtarabilir,
offline yapabiliriz. Bir Tablespace’i read only yapabilir ve statik
verinin surekli yedeklenmesini onleyebilir veya bir tablespace’i baska
bir veritabanina tasiyabiliriz.
Bir 11g veritabaninda olmazsa olmaz iki tane tablespace vardir. Bunlar
system ve sysaux’tur. System Tablespace icerisinde data dictionary
tutulmaktadir ve bir kullanici objesinin yaratilmasi icin
kullanilmamalidir. Sysaux Tablespace’i ise System
Tablespace'ine yardimci olmasi icin 10G ile gelen bir ozelliktir.
Workspace manager, logical standby, Oracle streams ve Automatic workload
repostory gibi datalari tutar. Bir
veritabani yaratildigi zaman bu iki tablespace mutlaka yaratilir.
Veritabani olusturulurken eger herhangi baska bir tablespace
yaratilmadiysa system tablespace’i temporary (gecici) tablespace gibi
davranacaktir. Genelde tavsiye edilen durum System ve Sysaux disinda
varsayilan bir temporary tablespace yaratmak ve bir de undo tablespace’e
sahip olmaktir. Cunku undo Tablespace’in yoklugunda System Tablespace’i
undo tablespace gibi davranmaktadir ve kesinlikle bu durum tavsiye
edilmemektedir. Cunku system tablespace’inin rollback segment’leri
yerine, undo tablespace’inin undo segment’lerinin, veri tutarliligi
acisindan kullanilmasi daha sagliklidir.
Tablespace Yapisi
Oracle’da depolama yonetimi fiziksel ve mantiksal olarak asagidaki sekildeki gibi katmanli bir yapidadir.
Tablespace’ler
sadece bir veritabanina ait olan, bir ya da daha fazla datafile’dan
olusan ve icerisinde oracle objeleri bulunduran mantiksal bir storage
yapisidir demistik. Sekillerde gordugumuz uzere ve daha onceden yapmis
oldugumuz tanimlarin uzerine Tablespace’lerin yapisi ile ilgili uzerinde
durmamiz gereken diger iki baslik ise; Tablespace’lerin extent alani
yonetimi ve Segment alani yonetimi bakimindan ikiye ayriliyor olmasidir:
Extent alani yonetimi bakimindan;
Locally Managed Tablespace:
• Bos extent’ler tablespace icinde yonetilir,
• Bos extent’lerin kayitlarini tutmak icin bir bitmap kullanilir,
• Her bit, bir block’a ya da blok grubuna isaret eder,
• Bit degerleri bos ya da dolu extent’leri belirtir,
• Tavsiye edilen tablespace tipidir.
• Bos extent’ler tablespace icinde yonetilir,
• Bos extent’lerin kayitlarini tutmak icin bir bitmap kullanilir,
• Her bit, bir block’a ya da blok grubuna isaret eder,
• Bit degerleri bos ya da dolu extent’leri belirtir,
• Tavsiye edilen tablespace tipidir.
Dictionary Managed Tablespace:
• Bos extent’ler Data Dictionary tarafindan yonetilir,
• Extend’ler allocate ya da unallocate edildiginde ilgili tablolar update edilir,
• Eski surumlere uyum amaciyla desteklenmektedir.
• Bos extent’ler Data Dictionary tarafindan yonetilir,
• Extend’ler allocate ya da unallocate edildiginde ilgili tablolar update edilir,
• Eski surumlere uyum amaciyla desteklenmektedir.
Segment alani yonetimi bakimindan;
Butun
lokal extent yonetimine sahip olan tablespace’ler icin iki farkli
segment alan yonetimi secebilmekteyiz; otomatik veya manuel.
Manuel yonetim:
Manuel segment alani yonetiminde bir serbest bloklar listesi
tutulmaktadir ve bu listenin amaci hangi bloklarin insert islemi icin
hazir oldugunu gostermektir. Bunu yaparken bir blok uzerinde kullandigi
bilgilere ise PCTUSED ve PCTFREE parametreleri sahiptir. Herhangi bir
“insert” veya “update” operasyonundan sonra veritabani kalan alani
ilgili bloktaki PCTFREE parametresini kontrol ederek algilar. Eger kalan
veri blogu alani PCTFREE parametresinin altinda ise bu blok yukarida
bahsettigim listeden cikartilir ve bir insert operasyonu icin yeniden
gosterilmez. Bu noktada ilgili blok uzerinde kalan PCTFREE parametresi
kadar alan ileriki “update” operasyonlari icin saklanir. Herhangi bir
“update” veya “delete” operasyonundan sonra veritabani kullanilan alani
ilgili bloktaki PCTUSED parametresini kontrol ederek algilar. Eger
kullanilan veri blogu alani PCTUSED parametresinin altinda ise bu blok
yukarida bahsettigim listeye alinir ve sonraki insert operasyonu icin
hazir bekletilir.
Kisacasi
dongu bu sekilde ilerlemektedir ve PCTUSED ile PCTFREE parametrelerini
degistirilebilmektedir fakat Oracle siddetle segment alan yonetimini
otomatik ve extent yonetimini de lokal secmemizi tavsiye etmektedir. Bu
sekilde en optimum duzeyde ve bir veritabani yoneticisinin gundelik
hayatini kolaylastiracak seviyede yonetim saglanabilmektedir.
SQL> CREATE TABLESPACE kaya_tbs DATAFİLE '/db/kaya/mydf_01.dbf' SİZE 200M
EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT MANUAL;
SQL>Tablespace created
Automatic yonetim:
Segment alan yonetiminin bir tablespace icin otomatik ayarlandigi
durumda ise su meshur serbest bloklar listesi kullanilmayacak, PCTUSED
ve PCTFREE parametreleri bu defa gozardi edilecektir ve onlarin yerine
bitmap’ler kullanilacaktir. Bitmap’ler her bir blok icindeki boslugu hesaplayarak yeni bir kayit icin yeterli alan olup olmadigini tarif edeceklerdir.
Otomatik segment alan yonetimi yalnizca lokal extent yonetimine sahip
olan tablespace’ler tarafindan kullanilabilmektedir ve bir temporary
veya system tablespace’i icin bu tanimlama yapilamaz. Segment alan
yonetimini otomatik olarak tanimlamak icin;
SQL> CREATE TABLESPACE kaya_tbs DATAFİLE '/db/kaya/mydf_01.dbf' SİZE 200M
EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO;
SQL>Tablespace created
- Bir Tablespace’in boyutlandirmasi ile ilgili unutmamamiz gereken
onemli bir nokta; Tablespace’in boyutunun olmamasidir yani
tablespace’ler genisletilemez. Tablespace’lerin icerisindeki veri
dosyalarinin boyutu(lari) vardir ve bunlarin boyutlarinin arttirilmasi
ile tablespace buyur.
Tablespace Olusturmak
Tablespace
yapisini kullanmak, veritabaninin kontrol edilebilirligi ve bakim
islemleri acisindan database adminlerinin islerini cok
kolaylastirmaktadir. Ornegin her departman icin ayri tablespace
(muhasebe_tbs,satis_tbs, hareket_tbs vb.) ve kullanici olusturarak
veriler arasi ayrim saglanabilir. Veri guncelleme departmandan
departmana farklilik gozeteceginden yedekleme bakim gibi islerin
zamanlari farkli tarihlere ayarlanabilir dolayisiyla birinde
olusabilecek bir hatadan oturu digerleri etkilemeyecek ve calismalari
aksamayacaktir. Ayni sekilde kullanicilara hak verirken daha esnek ve
daha kolay bir sekilde islemler gerceklestirilecektir. O zaman simdi
nasil olusturabiliriz bu yapiyi onu inceleyelim; oncelikli olarak bir tablespace’i yaratirken almamiz gereken bazi kararlar bulunmaktadir. Bunlar:
1) Tablespace’in bigfile tablespace mi yoksa smallfile tablespace mi olacagina karar vermek,
2) Extent’lerin local olarak mi yoksa dictionary tarafindan mi yonetilecegi,
3) Segment bosluklarinin otomatik mi yoksa elle mi kontrol edilecegidir.
2) Extent’lerin local olarak mi yoksa dictionary tarafindan mi yonetilecegi,
3) Segment bosluklarinin otomatik mi yoksa elle mi kontrol edilecegidir.
Bu kararlari verebilmek icin oncelikle yukarida gecen terimler hakkinda
bilgimizin olmasi gerekmektedir. Simdi bunlari mumkun oldugu kadar kisa
bir sekilde ele alalim ve inceleyelim:
Bigfile ve Smallfile nedir? Bir
bigfile tablespace yalniz bir datafile veya tempfile dosyasindan
olusabilmektedir. 10g ile gelen bir tablespace cesitidir ve boyut olarak
2 uzeri 32 veri blogundan olusabilir. 32KB blok boyutu kullanmakta olan
bir bigfile tablespace 128 TB’a kadar datafile olusturabilir ayni
sekilde 8KB blok boyutu kullanmakta olan bir bigfile tablespace 32 TB’a
kadar datafile olusturabilir. Orneklerden de anlasilacagi uzere bu tipte
tablespace’ler cok buyuk veritabanlari icin tasarlanmistir. Bir bigfile
tablespace yaratmak icin yapilmasi gereken tek sey “BİGFİLE” ozel
kelimesini eklemektir;
SQL> CREATE BİGFİLE TABLESPACE deneme_tbs
Smallfile tablespace olarak adlandirdigimiz tipte ise bir tablespace’e
ait birden cok veri dosyasi olabilmektedir. Ornegin 8KB blok boyutu
kullanmakta olan bir tablespace’e ait veri dosyalarinin azami boyutu
32GB olabilmektedir. Bir smallfile tablespace yaratabilmek icin BİGFİLE
ozel kelimesi gozardi edilebilir veya isteye bagli olarak SMALLFİLE
ekleyebilirsiniz;
SQL> CREATE [SMALLFİLE] TABLESPACE deneme_tbs
Extent Yonetimini Secmek: Oracle
veritabani bir tablespace icerisindeki bir obje icin yer tahsisi etmek
istedigi zaman, bir yigin halinde duran veritabani bloklarindan olusan
extent’lerden tahsis etmektedir. Oracle bu extent bilgilerini; serbest
olan extent’ler, extent boyutlari, tahsis edilen toplam extent miktari
gibi bilgileri, ya data dictionary’de ya da tablespace’in kendisi
tarafindan yonetmektedir ve bakimini yapmaktadir.
Bir tablespace’e ait extent bilgilerini dictionary’de tutmakla olusan
tablespace’e “dictionary managed tablespace” denmektedir. Extent’ler
uzerinde yapilacak herhangi bir degisiklikte (tahsis veya birakma –
allocation or freed) ilgili data dictionary tablolari guncellenerek bu
guncelleme icin undo uretilmektedir.
“Local extent” yonetimi ile veri dosyalarinin basliklari icerisinde
bulunan bir guncelleme (bitmap pattern) ile bu islem yapilmaktadir. Bu
durumda Oracle, UET$ ve FET$ tablolari uzerinde dolanmak ve gereksiz
recursive SQL’ler olusturmak yerine bu basliktaki bitmap bilgilerini
guncelleyecektir. Ornekle devam edecek olursak;
SQL> CREATE TABLESPACE kaya_tbs DATAFİLE '/db/kaya/mydf_01.dbf' SİZE 20G EXTENT MANAGEMENT DİCTİONARY;
SQL> Tablespace created
Local extent yonetimine sahip bir tablespace’e ait olan veri
dosyalarinin extent’lerinde yapilacak bir guncellemede, bu veri
dosyalarinin basliklari icerisinde bulunan bitmap bilgileri
guncellenecek ve bloklarin yeni durumlari gosterilecektir. Bu guncelleme
ile rollback’in bir ilgisi yoktur cunku herhangi bir data dictionary
tablosu guncellenmemektedir. Lokal olarak extent’leri yonetilen bir
tablespace’in extent tahsisinin yapilmasinda iki adet secenegimiz
bulunmaktadir; UNİFORM veya AUTOALLOCATE. Uniform opsiyonunu secerek
Oracle’a tahsis edecegi veya serbest birakacagi extent boyutlarinin ayni
oldugu ve varsayilan olarak 1 MB olacagini ifade etmekteyiz. Uniform
secenegi bir gecici tablespace icin varsayilandir ve bir undo
tablespace’i icin secilemez. Ornegin; 20MB’a sahip bir uniform
tablespace yaratabilmek icin asagidaki komutu calistirmamiz yeterlidir:
SQL> CREATE TABLESPACE kaya_tbs DATAFİLE '/db/kaya/mydf_01.dbf' SİZE 200M
EXTENT MANAGEMENT LOCAL UNİFORM SİZE 20M;
SQL> Tablespace created.
Autoallocate secenegi ile tahsis edilecek veya serbest birakilacak
extent’lerin boyutlarinin degisebilecegini ve segment’ler icerisinde bu
sekilde yer alacagini ifade etmekteyiz. Burada uniform’dan farkli yani
uniform’da belirli bir olcude (varsayilan olarak 1 MB) hareket etmesini
soylemekteydik. Autoallocate secenegi bu ozelligi sayesinde kucuk veya
buyuk tablolarin en iyi secenegi olmaktadir. Autoallocate secenegi ile
bir tablespace yaratmak icinse;
SQL> CREATE TABLESPACE kaya_tbs DATAFİLE '/db/kaya/mydf_01.dbf' SİZE 20G
EXTENT MANAGEMENT LOCAL AUTOALLOCATE;
SQL> Tablespace created
Son olarak 3. soruya cevap bulabilmek adina, manuel segment space
management de boş alanları yönetmek için freelist kullanilir; otomatik
segment space management da bitmap kullanılır. Otomatik segment space
management daha verimlidir cunku boş alanları birleştirmeye (colascing)
ihtiyaç yoktur ve default ayardır.
Bu 3 konu uzerindeki kararlarinizi verdikten sonar artik tablepspace
olusturabiliriz. İki komut ile tablespace yaratabiliriz. CREATE DATABASE
veya CREATE TABLESPACE. Asagida ornek bir tablespace yaratma komutu
verilmistir:
SQL> CREATE TABLESPACE "ORNEK" DATAFİLE 'C:\ORACLE\PRODUCT\10.2.0 \ORADATA\ORCL\ornek.dbf' SİZE 100M LOGGİNG EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;
SQL> Tablespace created
|
Tablespace information: Tablespace’lerle ilgili bilgilere nereden ve nasil ulasabiliriz?
Bir Oracle 11g veritabanina ait tablespace bilgilerine ulasabileceginiz goruntuler;
1) DBA_TABLESPACES
2) DBA_DATA_FİLES
3) DBA_TEMP_FİLES
4) V$TABLESPACE
2) DBA_DATA_FİLES
3) DBA_TEMP_FİLES
4) V$TABLESPACE
Ornek sorgular ile alacagimiz ekran goruntulerini inceleyelim:
1-) SQL> SELECT tablespace_name, status, contents, extent_management, segment_space_management FROM DBA_TABLESPACES;
TABLESPACE_NAME STATUS CONTENTS EXTENT_MAN SEGMENT
-----------------------------------------------------------------------------------------------------------
SYSTEM ONLİNE PERMANENT LOCAL MANUAL
UNDOTBS1 ONLİNE UNDO LOCAL MANUAL
SYSAUX ONLİNE PERMANENT LOCAL AUTO
TEMP ONLİNE TEMPORARY LOCAL MANUAL
....
....
2-) SQL> SELECT name, bigfile, flashback_on FROM V$TABLESPACE;
NAME BİGFİLE FLASHBACK_ON
-----------------------------------------------------------------
SYSTEM NO YES
UNDOTBS1 NO YES
SYSAUX NO YES
TEMP NO YES
Yukaridaki iki sorgunun ciktilarina da bakaraktan, V$TABLESPACE’in
sagladigi bilgilerin biraz daha kisitli oldugunu anliyoruz ancak bu
goruntu ile de FLASHBACK ile ilgili bilgileri gorebiliyoruz. Birde
DBA_TABLESPACES’in biraz daha fazla ve nitelikli bilgi sunmakta oldugu
hemen goze batiyor. Ote yandan DBA_TABLESPACES icerisindeki bilgiye
veritabanini open duruma getirmeden ulasamazken, V$TABLESPACE
icerisindeki veriye veritabani mount mod’da iken ulasabiliriz.
Tablespace’leri Kaldirmak: Bir
tablespace’in artik veritabaninin bir parcasi olmadigini dusundugunuz
zaman asagidaki komut yardimi ile ilgili tablespace’i database’den
kaldirabiliriz:
SQL> DROP TABLESPACE KAYA_TBS;
SQL> Tablespace dropped
*Bir tablespace kaldirildigi zaman rollback sansiniz yoktur ve bu sekilde geri getiremezsiniz!!!
*SYSTEM tablespace’ini asla veritabanindan kaldiramazsiniz!!!
Bir tablespace veritabanindan kaldirildigi zaman kontrol dosyasi
uzerinde bir guncelleme gerceklestirilir. Onemli bir not, bir
tablespace’i veritabaninin bir parcasi olmaktan cikardiginiz zaman
varsayilan olarak o tablespace’e ait veri dosyalari sistemden
kaldirilmaz. Baska bir tablespace icin ileride kullanabilirsiniz. Ancak
yine de bu veri dosyalarini da sistemden kaldirmak istiyorsaniz
asagidaki komutu yazmalisiniz:
SQL> DROP TABLESPACE KAYA_TBS İNCLUDİNG CONTENTS AND DATAFİLES;
Hiç yorum yok:
Yorum Gönder