Hurriyet

14 Mayıs 2013 Salı

Oracle Veritabani: Tablespace Yaratılması - Creation of a Tablespace



Tablespace veritabanındaki segmentlerin tutulduğu yerdir. Segment olarak bahsettiğimiz birim isim veritabanındaki herhangi bir obje olabilir. Örnek olarak tablolar, indeksler,triggerlar ve bunun gibi bir sürü obje tutulur. En basit tablespace yaratılış sorgusu:

Create tablespace (tablespace_adı);

Bu tablespace’in genel özellikleri yani default olarak yaratılacak  özellikleri kalıcı olması, locally managed tipinde  olması ve  oluşturulacak datafile ise db_create_file_dest’inde yaratılacak olmasıdır. Db_create_file_dest parametre dosyasında belirtilen bir parametredir.
Bu tablespace’lerde  genel olarak belirtmemiz gereken özellikleri içeren bir sorguyu aşağıda yazabiliriz.

Create tablespace (tablespace_adı) datafile ‘(yaratılacak_datafileın_pathi)’ size 50M Autoextend on maxsize 500M;

Oracle’da 3 tane tablespace tipi bulunmaktadır. Bunlar Temp, Undo, Permanent  tablespaceleridir. Temp tablespacelerinin amacı geçici olarak bilgilerin saklanmasıdır. Undo tablespaceler ise daha commit edilmemiş ama DML ifadeleriyle( Insert,Update,Delete) değiştirilmiş olan bilgilerin eski hallerinin saklandığı yerdir. Bu 2 tablespace’in yaratılmasındaki yazım şekli arasında çok az fark vardır.

Undo:

Create undo tablespace (tablespace_adı) datafile ‘(yaratılacak_datafileın_pathi)’ size 50M Autoextend on maxsize 500M;

Temp:

Create Temp tablespace (tablespace_adı) tempile ‘(yaratılacak_datafileın_pathi)’ size 50M Autoextend on maxsize 500M;

Aşağıda koyduğumuz sorgu ise bize ileride yardımcı olacak bir sorgudur. Bu sorguyla veritabanındaki tablespaceler ve bu tablespace’lerin doluluk oranları gösterilmektedir. Bu sorguda kullanılan bazı tablolar DBA tabloları olduğu için bu tablolalara erişim hakkınızın olması gerekmektedir.

SELECT /* + RULE */  df.tablespace_name "Tablespace",
       df.bytes / (1024 * 1024) "Size (MB)",
       SUM(fs.bytes) / (1024 * 1024) "Free (MB)",
       Nvl(Round(SUM(fs.bytes) * 100 / df.bytes),1) "% Free",
       Round((df.bytes - SUM(fs.bytes)) * 100 / df.bytes) "% Used"
  FROM dba_free_space fs,
       (SELECT tablespace_name,SUM(bytes) bytes
          FROM dba_data_files
         GROUP BY tablespace_name) df
 WHERE fs.tablespace_name (+)  = df.tablespace_name
 GROUP BY df.tablespace_name,df.bytes
UNION ALL
SELECT /* + RULE */ df.tablespace_name tspace,
       fs.bytes / (1024 * 1024),
       SUM(df.bytes_free) / (1024 * 1024),
       Nvl(Round((SUM(fs.bytes) - df.bytes_used) * 100 / fs.bytes), 1),
       Round((SUM(fs.bytes) - df.bytes_free) * 100 / fs.bytes)
  FROM dba_temp_files fs,
       (SELECT tablespace_name,bytes_free,bytes_used
          FROM v$temp_space_header
         GROUP BY tablespace_name,bytes_free,bytes_used) df
 WHERE fs.tablespace_name (+)  = df.tablespace_name
 GROUP BY df.tablespace_name,fs.bytes,df.bytes_free,df.bytes_used
 ORDER BY 4 DESC;

Hiç yorum yok:

Yorum Gönder