Tablespace
Yönetimi
Merhaba Arkadaslar bu article'da sizlerle Tablespace Managing hakkinda bilgi paylasacam.
Tablespace
, fiziksel olarak tek bir datafile yada datafile’lardan oluşan mantıksal
yapılardır.
Oracle
database’ deki veri yapılarının temeli datafile (veri dosylarına) dayanır.
Datafile’ ler ise mantıksal anlamda bir yada birden fazla segment’den,
segment’ler de extent’lerden oluşur. Extent’ lerde database bloklarından oluşur
Select tablespace_name,file_id,extent_id,block_id,blocks,bytes from
DBA_EXTENTS where owner = 'HR'and
segment_name= 'EMPLOYEES';
Bir oracle server database’ inde
standart tablespace’ ler ve amaçları yazılmıştır.
System Tablespace: Sys kullanıcısına ait bilgiler bulunan tablespace’dir.
Oracle Server için olmazsa olmaz en önemli tablespace’lerdir. İçerisinde Data
dictionary tabloları vardır. Package, store procedure , fonksiyon ve
trigger gibi PLSQL birim yapıları bulunur. System tablespace’ silemeyiz ve
ismini değiştiremeyiz.
Sysaux Tablespace: Automatic Workload Repository raporlarının saklandığı, System tablespace’in yardımcı tablepace’dir.
Genel olarak içierisinde Oracle
strams, Logical standby işlemleri, Logminer, Schedular yapısı bu tablespace’ de
yapılır. Önceki sürümlerde bu işlerin tümü system tablespace içerisinde
yürütülmekteydi.
Sysaux tablespace silemeyiz ve
ismini değiştiremeyiz.
Users Tablespace: User’ lara ait data dosyalarının tutulduğu tablespace’ lerdir.
İçerisinde kullanıcılara ait şema nesneleri bilgileri bulunur.
Temporary tablespace, temp (geçici) dosyalarının yer aldığı tablespace’dir.
Genel olarak büyük oranda gruplama(group by) ve sorting(order by, joining)
işlemleri kullanıcının PGA alanı yetersiz kaldığında bu
işlemlerin yapılabilmesi için extra bir boş alana ihtiyaç vardır. Bu alanlar
için System tablespace yerine temp tablespace içerisindeki tempfile
kullanılmaktadır. Eğer system tablespace , local yönetimli
oluşturulmuşsa default bir temporary tablespace oluşturmak zorundayız.
Kullanıcıların default olarak bu temporary tablespace kullanması için default
oalrak tanımlanmalıdır.
Undo tablespace , Undo bilgisini tutan ve yönetimini sağlayan
tablespace’ dir. Kullanıcının yaptığı DML işlemleri önce Rollback segmentinde
tutulur. Kullanıcı yaptığı işlemleri onaylayabilir yada vazgeçip transaction’ ı
geri almak isteyebilir. Şayet Commit işlemi yapmamışsa transaction geri
alınacaktır. Rollback komutuyla transaction geri alınabilir. Commit işlemi ise
transaction’ on onaylanma işlemidir. Rollback segmenti Undo Tablespace
içerisinde yer alır. Veri tabanı için önemli bir tablespace’ dir.
Bir veritabanında birden fazla undo
tablespace yer alır. Birden fazla olmamaktadır. İsteğe göre tek bir tane kalmak
şartıyla yeniden oluşturulup eskinin silinmesi yada offline edilmesi şartıyla
değiştirilebilir. Read Only durumuna getirilemezler.
Example tablespace: Opsiyonel bir tablespace ‘dir. Oracle database kurulumunda
isteğe göre örnek sh ve hr şema bilgilerini içinde barındıran tablespace’ dir.
Trainer amaçlıdır.
Aşağıdaki sorguda Veritabanında tüm
tablespace’lerin boş alan miktarlarını öğrenebiliriz.
SELECT tablespace_name,
status,contents
,extent_management extents
,segment_space_management free_space
FROM dba_tablespaces;
SQL>
select sum(bytes), tablespace_name from dba_free_space group by tablespace_name;
SUM(BYTES) TABLESPACE_NAME
---------- ------------------------------
73465856 EXAMPLE
14745600 SYSAUX
10354688 SYSTEM
983040 TEMP
175702016 UNDOTBS1
53346304 USERS
6 rows selected.
Tablespace.dbf gruplarindan olusur.
1 tane dbf --> 1 tane tablespace
4 tane dbf -->1 tane tablespace
Tablespace’in icinde Datafile’ler.
Datafile’lerin icinde Segment’ler.
Segment’lerin icinde Extent’ler
Extent’lerin icinde Datablock’lar BULUNUR..
Tablespace 2 yere
bolunur.
- Bigfile tablespace
- Smallfile tablespace
1.Bigfile Tablespace :
- Büyük veritabanları için
tavsiye edilir
-1 tane datafile bulunur.(Cok buyuk database icin
tasarlanmistir.)
- Boyutu 8 KB datablock larla 32
TB
- 2 üzeri 32 datablock bulunur.
Create bigfile tablespace tablespace_adi datafile ‘yeri’ size bellek_degeri;
2.Small Tablespace :
- Çoklu datafile vardır.
- Boyutu 8 KB datablocklarla 32 GB
- 2 üseri 22 datablock bulunur.
Create (small) tablespace test_small datafile ‘yolu’ size 100M;
NOTE: Datablok’larin
buyuklugu oracle init.ora
Parameter dosyasindaki DB_BLOCK_SIZE
degerine baglidir.Datablocklarin degeri ya 8kb yada 8 kb katlari olmalidir.
Oracle Managed File:
Extent Management :
- Local
- Dictionary
1.Dictionary : Segment alan bilgileri system tablespace inde
tutulur.Herhangi bir segmentin alan bilgilerine bakmak için sürekli system
tablespace’ine başvurmak gerekiyor.Cok eski ve cok az kullaniliyor.Dictionary
performans acisinda cok agir birsekilde calismaktadir.
2.Local : Oracle tavsiyesinde
local kullanirlar.Local oldugu zaman oracle otomatik olarak hicbir yere
sormadan (kendisi bilir) nekadar bellek var yada bellek yokmu diye
arastirmasina gerekyok.
a.Uniform:Eger uniform secmissek
extence bellek vermemiz gerekir.Burda databloklar 8kb’dan olusur 100mb
extent’ler olusturur. 100mb Doldugunda 2. Yeni exten olusur.2.doldugunda 3.
Olusur. 3.doldugunda 4. Olusur. ……
Create tablespace test_local datafile ‘yolu’ size 100M
Extent management local autoallocate; (--uniform 1M;)
Autoallocate : segment alanını otomatik kontrol eder.Oracle
tavsiyesinde kullanilmalidir.Burada 16 tane extent olusana kadar her bir extent
64kb ile olur sonra 17-63 e kadar 1m ile olusur.63-120 den sonar 8m ile olusur.
Segment Space Management
Datablockların doluluk oranın
bilgileri verir.
1.Manual eger segment space
management MANUAL ise SYSTEM’de yer alacak
2.AUTOMATIC eger segment space management AUTOMATIC ise
KENDISINDE yer alacak.Oracle tavsiyesi ile kullanilir.
Yeni bir tablespace oluşturma:
Genellikle tüm Persistent(kalıcı)
tablespace’ ler local olarak yönetilmektedir.
Create tablespace Tablespace_adi datafile ‘yolu’ size bellek_degeri M
Extent management local autoallocate
Segment space management auto; ---manuel
EGER BUNU YAPMAKSAK TABLESPACE DEFAULT olarak db_create_file_dest
ALACAKTIR
Alter system set db_create_file_dest=’D:\oracle\oradata\oracle\omf’ SCOPE=BOTH;
Bunu yaptığında artık tablespace
oluşturduğun zaman tablespace datafile adını yazmıyorsun,veritabanı otomatik
olarak isim atıyor.
NOT….: Segment space management auto olabilmesi için extent management’in
local olması gerekiyor.
Segment space management
TEMPORARY ve SYSTEM TABLESPACE lerinde çalışmaz.
CREATE TABLESPACE test DATAFILE '/u01/app/oracle/oradata/veysi01.dbf' SIZE 200M
EXTENT MANAGEMENT LOCAL AUTOALLOCATE;
SEGMENT SPACE MANAGEMENT AUTO;
Table space oluştururken En az bir datafile girmemiz
gerekiyor. Zaten tablespace mantıksal yapı olduğunu başta belirtmiştik .
Şayet Tablespace içerisindeki
extentlerin farklı değişken boyutta olunması isteniyorsa, Extent yönetimi AUTOALLOCATE
belirtmemiz gerekir. Default Extent boyutu 64KB’dır. Eğer tablespace
içerisindeki extent’ lerin aynı spesifik boyutta istiyorsak extent
yönetimini UNIFORM olarak bildirmemiz gerekiyor.
Örnek:
Extent boyutu default 128KB olacak
şekilde 200 mb boyutunda “veysi_tab”
isminde bir tablespace oluşturduk. Size parametresini belirtmezsek o zaman
default uniform size1M olacaktır.
CREATE TABLESPACE veysi_tab DATAFILE '/u01/app/oracle/oradata/veysi02.dbf' SIZE 200M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128KB;
SEGMENT SPACE MANAGEMENT AUTO;
Not: Extent yönetimi tamamen kullanacağımız veritabanı
yönetim sistemine göre değişiklik gösterecektir. Datawarehouse sistemlerde
extent ve db_block_size büyük
seçilebilir. DML aktivasyonu çok içeren sistemlerde ise performans açısından
Autoallocate seçilmesi daha uygundur.
Yeni oluşturulan tüm permanent
tablespace’ler default olarak segment yönetimi otomatiktir. Automatic segment
Management ise segment içerisindeki free alanı otomatik koordinasyonun sağlar.
Automatic Segment Management manual segment yönetimine göre oldukça
verimlidir.Manuel Segment kendi içinde freelist algoritması kullanır.
ALTER TABLESPACE komutu ile de
mevcut tablespace üzerinde değiştirmeler, eklemeler, silme gibi durum
değiştirme işlemlerini yaparız.
Tablespace ‘ büyümesi:
ALTER TABLESPACE test
ADD DATAFILE '/u01/app/oracle/oradata/veysi03.dbf' SIZE 100M
AUTOEXTEND ON
NEXT 512K
MAXSIZE 250M;
Yukarıdaki mevcut test tablespace için ihtiyaç
duyulduğunda datafile için 512 KB’ ar büyüyerek, maksimum 250 MB’a kadar
otomatik büyüyecek şekilde oluşturulmuştur. Segment yönetimi otomatik ve
autoallocate extent yönetimine sahiptir.
AUTOEXTENT ON Avantajı, datafile maximum alan sınırına
eriştiğinde herhangi bir müdahaleye gerek kalmaz. Database ilgili datafile ‘i
otomatik alan belirtilen artışta kazandırır.
ALTER DATABASE DATAFILE '/u01/app/oracle/oradata/veysi03.dbf' AUTOEXTEND OFF;
İle veysi03.dbf datafile’ ın otomatik büyümesi disable
edilmiştir.
ALTER DATABASE DATAFILE '/u02/oracle/oradata/veysi03.dbf' AUTOEXTEND ON NEXT 512K MAXSIZE 250M;
İle veysi03.dbf datafile’ ın otomatik büyümesi enable edilmiş
ve büyümeye izin verilmiştir.
Tablespace ve datafile ilişkisi ve
datafile space ve blok sasyısını görmek için aşağıdaki sql cümlesini
çalıştırıyoruz.
SQL> select tablespace_name,file_name,bytes/1024/1024 space, blocks from dba_data_files;
SQL>
select tablespace_name,file_name,bytes/1024/1024 space, blocks from dba_temp_files;
SQL> select * from dba_tablespaces;
SQL> select * from dba_data_files;
SQL> select * from dba_temp_files;
SQL> select sum(bytes/1024/1024) from dba_data_files;
No comments:
Post a Comment