ORACLE etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
ORACLE etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

30 Nisan 2012 Pazartesi

Tablespace Yönetimi - V


Şu ana oluşturduğumuz ve üzerinde çalıştığımız tablespace smallfile datafile ‘lardan oluşan tablespace’ lerdi. Default olarak Create Tablespace cümlesi için smallfile bir datafile’larda oluşacağı bilinmelidir.
Bigfile Tablespace:

Bir  bigfile tablespace tek bir datafile’ dan yada bir tempfile’dan  oluşur. Bu datafile yada tempfile yaklaşık 4 milyar block içerebilir. Block_size 8K olan bir datafile ‘in boyutu 32TB; block_size 32KB olan bir datafile ‘in ise maksimum 128 TB boyutunda olabilir.
Small file bir tablepace ise 1022 adet datafile yada tempfile içerebilir. Bu datafile’ lerin boyutu ise yaklaşık 4 milyon block içerir.
Bir bigfile tablepace’in extent yönetimi local yönetimli olmak zorundadır. Smallfile tablepace’ lerde extent yönetimi  hem local hemde dictionary yönetilebilir.
System ve Sysaux tablespace’ leri big file tablespace olarak oluşturulamazlar.
Bigfile tablespaceler dinamik genişleyen  logical volume özelliğine sahip gelişmiş RAID teknojisi yada Automatic Storage Management(ASM) ile kullanılması gerekir.
Big file bir tablespace oluşturabilmek için bigfile anahtarının belirtilmesi gerekmektedir. Tablespace oluşturulrken default  tablespace özelliği smallfile’ e verilmişse bu şekilde yazılır.
SQL> create bigfile tablespace big_tbs datafile '/u01/app/oracle/oradata/XDB/datafile/big_tbs01.dbf' size 200M ;
Tablespace created.
Renaming Tablespace:

Oracle 10 g ile birlikte gelen bu özellik, mevcut tablespace’in ismini değiştirmek için kullanılır.
Alter tablespace big_tbs rename  to new_big_tbs;
System ve sysaux tablolarının ismini değiştirilemez.  ReadOnly tablespace  olan tüm tablespace’ lerin Adını değiştirebiliriz. Tablespace adı değiştirildiğinde Controlfile backup alınması yararlı olacaktır.
Tablespace thresholds:
Tablespace’ lerde  tablespace  alan kullanımının kritik seviyeye ulaştığını anlayabilmesi için metric threshold değerlerini set etmelidir. Bu değerler tüm tablespace için default değerleri aşağıdaki gibidir. Bu değerler farklı değerlere çekilebilir.

Tablepace Actions:


Yukarıda OEM konsolda tablespace bölmesinde seçili olan tablespace ile ilgili action’ lar görülmektedir.
Add Datafile: Seçili tablespace’ yeni bir datafile eklemek için seçilir.,
Create Like: Seçili tablespace ile bire bir benzer farklı bir tablespace oluşturmak için,
Generate DDL: Tablepace oluşumu içindeki datafile’larda dahil tüm yapının SQL scripti oluşturur.
Make Locally Managed: Dictionary Managed Tablepace’ ler için Extent yönetimi  Local olara yönetilmesini sağlamak için seçilir. Oracle eski sürümlerde extentler  data dictionary  tarafından yönetiliyordu. Locally managed  extent yönetimi için Dictionary  managed’e göre daha avantajlıdır.
Make ReadOnly: Seçili tablespace’i Sadece okunabilir, yapmak DML işlemine kapamak için seçilir.
Make Writable: Read Only yapılmış tablepace’i Writable(DML işlemine açmak) için seçilir.
Place Online:  Seçilen tablepace’ i online durumuna getirmek için kullanılır.
Reorganize: database bloklarını taşımak için bir shrink operasyonudur. Bu işlem 6 adımda gerçekleşir. Tablespace seçme,  hızlı shrink yada güvenli  şekilde seçilir. Sonra işlem gerçekleştilirir.  Rapor incelenir. Schedule(planlama) edilebilir. Yapılan operasyon için Script üretilir.
Run Segment Advisor: Seçili tablepace için segment advisor’ ın çalıştırılması segment space yönetimi ile ilgili bulgular ve yararlı tavsiyeler sunmaktadır. Üç adımda gerçekleşmektedir. Seçim , Task olarak kaydet sechedule et , ve bulgular.
Show tablespace Contents: Tablepace içerisindeki objelerdir.  Seçili objenin extent haristasını görebilirsiniz.


Show dependencies: Tablespce  içerisinde kullanılan  bağımlı objelerdir.
TEST_TBS tablespace için  içindeki datafile’lar dependencies  , dependents ise aşağıda listelenmiştir.


Take offline: tablespace’ offline durumuna getirmek için seçilir. Bu işlem için dört seçenek mevcuttur.
                Normal: Normal güvenli bir şekilde tablespace içindeki datafile ile birlikte offline olur. Online için herahngi bir recovery işlemine gerek kalmaz. Default seçenektir.
                Temporary: Geçiçi sekilde sadece datafile’ları offline durumana getirmek için seçilir.
                Immediate:  tablepace hemen offline durumuna getirilir. Online edilebilmesi için bir recovery işlemi gerektirir. No archivelog da bu seçeneği seçmenizi desteklemez.
                For Recover: Tablespace Recover işlemi için tercih edilen bir seçenektir. Bilindiği gibi Tablespace kurtarılabilmesi için offline mod’ da olması gerekir.
Yukarıdaki tüm offline seçenekleri tablespace için kullanılabilir.

26 Nisan 2012 Perşembe

Tablespace Yönetimi - IV

Tablespace ‘ler iki tiptir. Permanent(Kalıcı) ve Temporary(Geçici) tablespace’ lerdir.


Temporary Tablespace:

Temporary Tablepace, sadece  kullanıcıların session süresince disk üzerinde kullandığı geçici alanlardır. Session süresi bitince bu bilgiler silinir.
Temporary tablepace’ ler session’ ın bir çok sort işlemlerinin yükünü azaltmak için kullanılır.RAM’ daki PGA alanı büyük sort işlemleri için yetersiz kaldığında fiziksel disk üzerindeki temporary alanını kullanır.
Bildiğimiz gibi Memory’deki SORT _AREA_SIZE parametresi bu işlemlerin RAM’ da yapılmasını için gerekli alanı belirten parametredir. Bu alanı bir çok kullanıcının default temporary  alanı olarak paylaştırabiliriz.
Default olarak tüm kullanıcılar temp alanı için SYSTEM tablespace’ i kullanırlar.  Her bir kullanıcı SYSTEM TABLESPACE kullanırsa sistemde yavaşlama ve system tablespace in kapasitesini zorlyacağından bir DBA’ nin bir temporary tablepace oluşturup default oalrak tüm kullanıcılara paylaşması gerekmektedir.

Örnek: Kullanıcı oluştururken yada var olan kullanıcıya default temprary tablespace alanını referans gösteririz.
SQL>ALTER USER xyz  DEFAULT TEMPORARY TABLESPACE test_tbs;

Yada yeni kullanıcı oluşturken;

SQL>CREATE USER xyz IDENTIFIED BY xyx_pass DEFAULT TABLESPACE user
DEFAULT TEMPORARY TABLESPACE test_tbs;

Temporarytablespace, diğer tablepace’ler gibi datafile ‘lardan değil ona has bir tempfile ‘lardan oluşur.
Temporary tablepace içierisinde tüm sort operasyonlarının yapıldığı bir sort segment vardır.Sort Segment , intance’ gelen sıralama(sorting) işlemi görülen sorgu için kendiliğinden oluşur. Biz haricen bir temp segmenti oluşturamayız.

V$SORT_SEGMENT  ve v$TEMP_SEG dinamik view ile içerisindeki alan ve sort işlemi yapan user’ ları görebiliriz.
Extent yönetimi  Lokal dir. Ve AUTOALLOCATE extent yönetimi desteklemez. Extent yönetimi Uniform (sabit boyutta) olabilir.

Daha önceden de söylediğimiz gibi database üzerinde bir tane default temporary tablespace ve bir tane undo tablespace olabilir.
Not: Default temporary tablespace Offline durumuna getirilemez. Yeni bir tane temporary tablespace oluştuncaya kadar eskisini silinemez.
Not:Birden fazla tempoary tablespace oluşturulabilir. Fakat bunlardan sadece birisini kullanabilir.

SQL>ALTER DATABASE DEFAULT TEMPORARY TABLESPACE new_temp;

Eski temporary tablespace silinebilir.

SQL>DROP TABLEPACE old_temp  including contents and  datafiles;

SQLPLUS ile Temporary Tablespace oluşturma:

“CREATE TABLEPACE”yetkisine sahip bir kullanıcı yada “sysdba” rolündeki bir kullanıcı temporary tablespace oluşturabilir. Create temprorary tablespace cümlesi ile bir tablespace oluşturulabilir.
SQL>CREATE TEMPORARY TABLESPACE test_tmp_tbs TEMPFILE '/u01/app /oracle/oradata/XDB/datafile/temp_tbs01.dbf'
     SIZE 20M REUSE
     EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M; 


Kullanıcı işlemlerinin çok yoğun olduğu ortamlarda (groupby, join,distinct, order by,Minus,Union,,Intersect, Create Index, vb.) Temporary tablespace alanı yetmediği durumlarda  temporary tablespace yeni tempfile’ lar eklenebilir.

SQLPLUS ile Temporary tablespace yeni bir Tempfile ekleme:

SQL>ALTER TABLESPACE ADD TEMPFILE ‘/u01/app /oracle/oradata/XDB/datafile/test_temp02.dbf';


Create Bigfile Temporary Tablespace:
SQL>CREATE BIGFILE TEMPORARY TABLESPACE big_tbs TEMPFILE '/u01/app /oracle/oradata/XDB/datafile/big_temp01.dbf'
     SIZE 50M REUSE
     EXTENT MANAGEMENT LOCAL UNIFORM SIZE 16M;


Temporary tablespace ‘in boş  alan durumu ile ilgili bilgileri görmek istersek V$TEMP_SPACE_HEADER dinamik view’ kullanabiliriz. 

17 Nisan 2012 Salı

Tablespace Yönetimi - III


Sysaux tablepace:
System tablespace ‘in auxliary(yardımcı ek) tablespace ‘ dir. Sysaux tablespace, oracle 10 g ile birlikte gelen,  system tablespace’ in yükünü hafifletmek için  kullanılan, daha önceleri system tablespace’de yer alan önem arzetmeyen metadataların depolandığı,  RMAN, LogMiner, Standby database , shared Server , AWR raporarının saklandığı ve Oracle enterprise Manager metadatalarının da tutulduğu alandır.



















Oracle 10 g veüst versiyonlarda oluşturulan tüm database’ ler için zorunlu bir tablespace’ dir.
Tablespace alan boyutu ise içindeki bileşenlerin kullanımına göre değişiklik gösterir. Ancak Oracle  bu tablespace için minumum 250 MB kapasite planlanmasını tavsiye etmektedir
Sysaux tablespace’ in byük bir kısmını AWR raporları tutmaktadır.AWR raporlarının harcadığı alanı,  AWR snaphot interval ve retention period parametrelerinin değerleri etkilemektedir. Bildiğimiz gibi Automatik Workload repository sistem ve memory istatistiklerini diskte saklardı. Snapshot interval default olarak 60 dk’ dır. Yani her 1 saatte veritabanı sistemimizin bir snapshot’ ını alır ve diske kaydeder. Ve memory ‘ deki Instance istatistiklerini MMON background prosesi tarafından veritabanına bildirilir. Retention period ise istatistik raporlarının saklanması garantisini sağlar. Default olarak 8 gündür. Bu değeri değiştirebiliriz. Bu iki değer sysaux tablepace içerisinde saklanan AWR raporlarının boyutunu doğrudan etkilemektedir.
Sysaux tablespace Alter özelliği için sysdba yetkisi gerekmektedir. Sysaux ,normal database operasyonlarında  tablespace drop edemeyiz ,taşıyamayız ve adını değiştiremeyiz.
Sysaux tablespace için
 Status Online ,
Tipi permanent,
ReadWrite,
Extent yönetimi local,
Segment space Auto
Olması gerekmektedir.
Sysaux tablespace’ e ek datafile eklemeleri yapabiliriz.
SQL> ALTER TABLESPACE SYSAUX   ADD DATAFILE '/u01/app/oracle/oradata/XDB/datafile/sysaux02.dbf' SIZE 500M

V$SYSAUX_OCCUPANTS view ile Sysaux tablespace alan kullanımını izlemek için kullanılır. Operasyonu farklı bir tablespace taşıyabiliriz.
SQL> desc V$SYSAUX_OCCUPANTS
 
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 OCCUPANT_NAME                                      VARCHAR2(64)
 OCCUPANT_DESC                                      VARCHAR2(64)
 SCHEMA_NAME                                        VARCHAR2(64)
 MOVE_PROCEDURE                                     VARCHAR2(64)
 MOVE_PROCEDURE_DESC                                VARCHAR2(64)
 SPACE_USAGE_KBYTES                                 NUMBER
 
OCCUPANT_NAME  sysaux içerisinde bulunan operasyon adı
OCCUPANT_DESC operasyon açıklaması
SCHEMA_NAME     şema ismi
MOVE_PROCEDURE   operasyonların taşınması için gerekli olan plsql procedure kodu.
MOVE_PROCEDURE_DESC açıklaması
SPACE_USAGE_KBYTES sysaux içerisindeki operasyonun kilobyte cinsinden alan kullanımı.                                                                                          
SQL> SELECT OCCUPANT_NAME, MOVE_PROCEDURE FROM V$SYSAUX_OCCUPANTS;
 
OCCUPANT_NAME                                 MOVE_PROCEDURE
--------------------------------------------- ---------------------------------------------
LOGMNR                                        SYS.DBMS_LOGMNR_D.SET_TABLESPACE
LOGSTDBY                                      SYS.DBMS_LOGSTDBY.SET_TABLESPACE
STREAMS
......................
.........................
  
Örnek olarak LOGMNR operasyonunu SYSTEM tablespaceiçerisin taşımak istiyoruz. Bundan sonra LOGMNR işlemleri için sysaux’ da değil system tablepace’ de yapılacaktır.

SQL> EXEC SYS.DBMS_LOGMNR_D.SET_TABLESPACE('SYSTEM');
 
PL/SQL procedure successfully completed.

9 Nisan 2012 Pazartesi

Tablespace Yönetimi- II

Oracle Enterprise Manager(OEM) Konsolunu kullanarak ta yeni bir temporary tablespace oluşturabiliriz.

OEM de Server genel sekmesinden tablespaces seçilir.
Daha sonra Yeni bir tablespace eklemek istiyoruz. Create düğmesine basalım.

  
Daha sonra tablespace ismi girilir aşağıdaki gibi extent yönetiminin nasıl yönetileceği, tipi , durumu  seçilir ve bir sonraki adım bu tablespace ait bir datafile/tempfile eklenmesi gerekir.


Oluşacak tablespace ait yeni bir datafile/tempfile eklemek istiyorsak  Add düğmesine,
Silmek istiyorsak Remove düğmesine,
Düzenlemek istersek te edit düğmesine basabiliriz.
 

Tablespace için yeni bir datafile/tempfile eklenir yada düzeltilme yapılabilir. Aşağıda düzeltilme yapılmıştır.
Daha sonra continue ‘butonu ile devam edilir.



Oluşacak Tablepace ile ilgili oluşturma scripti için show sql seçilir.
Create komutu aşağıdaki gibi olur.

Tablespace ile ilgili detaylı bilgileri izlemek istiyorsak dba_tablespaces  tablosu işimize yaramaktadır.

SQL> desc  dba_tablespaces;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 TABLESPACE_NAME                        NOT NULL      VARCHAR2(30)
 BLOCK_SIZE                             NOT NULL      NUMBER
 INITIAL_EXTENT                                       NUMBER
 NEXT_EXTENT                                          NUMBER
 MIN_EXTENTS                            NOT NULL      NUMBER
 MAX_EXTENTS                                          NUMBER
 MAX_SIZE                                             NUMBER
 PCT_INCREASE                                         NUMBER
 MIN_EXTLEN                                           NUMBER
 STATUS                                               VARCHAR2(9)
 CONTENTS                                             VARCHAR2(9)
 LOGGING                                              VARCHAR2(9)
 FORCE_LOGGING                                        VARCHAR2(3)
 EXTENT_MANAGEMENT                                    VARCHAR2(10)
 ALLOCATION_TYPE                                      VARCHAR2(9)
 PLUGGED_IN                                           VARCHAR2(3)
 SEGMENT_SPACE_MANAGEMENT                             VARCHAR2(6)
 DEF_TAB_COMPRESSION                                  VARCHAR2(8)
 RETENTION                                            VARCHAR2(11)
 BIGFILE                                              VARCHAR2(3)
 PREDICATE_EVALUATION                                 VARCHAR2(7)
 ENCRYPTED                                            VARCHAR2(3)
 COMPRESS_FOR                                         VARCHAR2(12)

Dba_data_files tablosuyla da tablespace ve datafile’ lar hakkında bilgi alabililiriz.
SQL> desc dba_data_files;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 FILE_NAME                                          VARCHAR2(513)
 FILE_ID                                            NUMBER
 TABLESPACE_NAME                                    VARCHAR2(30)
 BYTES                                              NUMBER
 BLOCKS                                             NUMBER
 STATUS                                             VARCHAR2(9)
 RELATIVE_FNO                                       NUMBER
 AUTOEXTENSIBLE                                     VARCHAR2(3)
 MAXBYTES                                           NUMBER
 MAXBLOCKS                                          NUMBER
 INCREMENT_BY                                       NUMBER
 USER_BYTES                                         NUMBER
 USER_BLOCKS                                        NUMBER
 ONLINE_STATUS                                      VARCHAR2(7)
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;

TABLESPACE          FILE_NAME                                             SPACE     BLOCKS
---------- -------------------------------------------------- ----- ----------
USERS         /u01/app/oracle/oradata/XDB/datafile/users01.dbf            5        640
UNDOTBS1     /u01/app/oracle/oradata/XDB/datafile/undotbs01.dbf          50       6400
SYSAUX         /u01/app/oracle/oradata/XDB/datafile/sysaux01.dbf         570      72960
SYSTEM        /u01/app/oracle/oradata/XDB/datafile/system01.dbf          680      87040
TEST_TBS      /u01/app/oracle/oradata/XDB/datafile/test01.dbf            10       1280
TEST_TBS2     /u01/app/oracle/oradata/XDB/datafile/test02.dbf            10       1280
6 rows selected.

Dba_temp_files tablosundan ise temp file ve ilgili tablespace görebiliriz.
SQL> select tablespace_name,file_name,bytes/1024/1024 space, blocks from dba_temp_files;

TABLESPACE FILE_NAME                                          SPACE     BLOCKS
---------- -------------------------------------------------- ----- ----------
TEMP       +XDATA/xdb/tempfile/temp.264.751571629               021       2688

TABLESPACE KALDIRMAK:
Oracle Enterprise manager konsole kullanarak tablespace kaldırabiliriz yada SQLPLUS  yada diğer editör programlarını (TOAD vb. ) tablespace  kaldırabiliriz. Bunların hepsi için DROP TABLESPACE yetkisinesahip kullanıcı yada sysdba rolüne sahip kullanıcı ile login oluyoruz.
Tablespace kaldırmak için
SQL> DROP TABLESPACE test_tbs including contents cascade constraints;
Genel olarak en basit şekliyle tablespace kaldırmak için yukarıdaki koyu ifadeleri yazmak yeterlidir. Eğik yazılı ifadeler ise opsiyoneldir.
İçerisindeki bağımlı objeleri de beraber kaldırmak için including contents cascade constraints ifadesini ekleyerek bu tablespace bağımlı farklı tablepaceler içindeki constraint(sınırlama)’ nesneleri de silinmiş olacaktır.
SQL> DROP TABLESPACE test_tbs including contents and datafiles;
Beraberinde datafile ‘ lar ile birlikte tüm her şeyi kaldırmak için yukarıdaki cümleyi çalıştırabiliriz.

28 Mart 2012 Çarşamba

Tablespace Yönetimi -I


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. Hiyerarşik olarak en küçük birim database bloklarıdır. Aşağıda bir tablespace içindeki datafile ve onlar içindeki nesneleri örneklendirmiştir.




                                                                Source:Oracle

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(otomatik iş yükü ambarı)  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.
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.

CREATE DATABASE cümlesi ile yeni bir database oluşturma:
Manuel olarak ta aşağıdaki kodları çalıştırarakta database oluşturulabilir. Daha önceden  “/u01/app/oracle/oradata/mydb” dzin yapısı oluşturulur ve okuma yazma hakkı verildiğini ve initmydb.oradosyası içinde db_name  ve controlfile yeri ve sayısı belirtildiğinde aşağıdaki komutu çalıştırarak yeni bir database oluşturabiliriz.
CREATE DATABASE mydb
   USER SYS IDENTIFIED BY mhm
   USER SYSTEM IDENTIFIED BY mhm
   LOGFILE GROUP 1 ('/u01/app/oracle/oradata/mydb/redo01.log') SIZE 200M,
           GROUP 2 ('/u01/app/oracle/oradata/mydb/redo02.log') SIZE 200M,
           GROUP 3 ('/u01/app/oracle/oradata/mydb/redo03.log') SIZE 200M
   MAXLOGFILES 5
   MAXLOGMEMBERS 5
   MAXLOGHISTORY 1
   MAXDATAFILES 100
   CHARACTER SET US7ASCII
   NATIONAL CHARACTER SET AL16UTF16
   EXTENT MANAGEMENT LOCAL
   DATAFILE '/u01/app/oracle/oradata/mydb/system01.dbf' SIZE 325M REUSE
   SYSAUX DATAFILE '/u01/app/oracle/oradata/mydb/sysaux01.dbf' SIZE 325M REUSE
   DEFAULT TABLESPACE users
      DATAFILE '/u01/app/oracle/oradata/mydb/users01.dbf'
      SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
   DEFAULT TEMPORARY TABLESPACE temp
      TEMPFILE '/u01/app/oracle/oradata/mydb/temp01.dbf'
      SIZE 20M REUSE
   UNDO TABLESPACE undotbs
      DATAFILE '/u01/app/oracle/oradata/mydb/undotbs01.dbf'
      SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;

Yeni bir tablespace oluşturma:
Genellikle tüm Persistent(kalıcı) tablespace’ ler local olarak yönetilmektedir.
CREATE TABLESPACE test DATAFILE '/u02/oracle/oradata/test01.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 “test_uni” isminde bir tablespace oluşturduk. Size parametresini belirtmezsek o zaman default uniform size1M olacaktır.
CREATE TABLESPACE test_uni DATAFILE '/u02/oracle/oradata/test02.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 '/u02/oracle/oradata/test03.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 '/u02/oracle/oradata/test03.dbf'  AUTOEXTEND OFF;
 
İle test03.dbf datafile’ ın otomatik büyümesi disable edilmiştir.

ALTER DATABASE DATAFILE '/u02/oracle/oradata/test03.dbf'  AUTOEXTEND ON NEXT 512K MAXSIZE 250M; 
 
İle test03.dbf datafile’ ın otomatik büyümesi enable edilmiş ve büyümeye izin verilmiştir.


 
 

26 Mart 2012 Pazartesi

Dblink kullanma


Dblink, Databaseler arasında köprü kuran  database objelerdir. Oracle database yada farklı tür databaseler arasında remote köprüler oluşturarak hedef database üzerindeki şema nesnelerine  erişmek için kullanılır. Farklı türk databaseler arasında iletişim kurmak için ise oracle heterojen servislerin kurulup ayarlanması gerekir.
Oluşturulması:
CREATE [PUBLIC] [PRIVATE][SHARED]DATABASE LINK dblink_name
Connect to target_user_name,
İdentified by Target_user_password
USING ’tns_name’;

Erişeceğiniz database üzerindeki bir kullanıcı ve onun şifresini girmen ve database  tnsname.ora dosyasındaki service_name ‘ i belirtilmesi gerekir.
PUBLIC  database üzerindeki tüm herkesin uzak  database’ erişmesi için kullanılır.
PRIVATE ise sadece belirlediğin dblink oluşturucu hesab sahibinin uzak database’ e erişmesi için kullanılır.
SHARED: oluşturulan database herkes tarafından paylaşılmasını sağlar. Ama burada authenticated user ans pasword’ un güvenlik açısından girilmesi gerekir. Sonuçta herkese açık bir dblink oluşturursak bunun güvenlik tarafını da düşünmemiz gerekecektir.
Örnek: shared DBLINK oluşturulması;
CREATE SHARED PUBLIC DATABASE LINK db_lnk
CONNECT TO scott IDENTIFIED BY tiger
AUTHENTICATED BY sec_usr IDENTIFIED BY sec_pass
USING 'ORCL';

Dblink oluşturabilecek bir kullanıcının
 private database link oluşturabilmesi için :  CREATE DATABASE LINK ,
public database link oluşturabilmesi için :  CREATE PUBLIC DATABASE LINK
haklarına sahip olması gerekir.
Current user kullanarakta dblink oluşturabilirsin. Current user, Remote database kullanıcısı ile dblink oluşturduğun user’la aynı olmak zorundadır. O yüzden Curretn user ekini kullacaksak her iki database tarafındada global bir user olması gerekir.
CREATE PUBLIC DATABASE LINK remote_connect
CONNECT TO CURRENT_USER
USING ‘ORCL’;

Örnek:
CREATE PRIVATE DATABASE LINK remote_connect
CONNECT  TO hr IDENTIFIED BY  hr
USING ‘ORCL’;


Örnek  using  satırında belirtmiş olduğumz yerel database’ deki ORCL service name(tnsnames.ora) :
ORCL = (DESCRIPTION = (ADDRESS =
             (PROTOCOL = TCP) (Host = XX.oracle.com) (Port = 1521))
             (CONNECT_DATA = (SID = orcl) (GLOBAL_NAME = orcl.oracle.com)
             (SERVER = DEDICATED)))
Dblink oluştutulurken de GLOBAL_NAME girilebilir. GLOBAL_NAME öğrenmek için
Remote server’da
SELECT GLOBAL_NAME FROM GLOBAL_NAME;

GLOBAL_NAME
-----------
orcl.oracle.com

ile öğrenilebilir. Bir GLOBAL_NAME database_name+domain’ den oluşur.
Local tarafta global name erişimine izin vermek için  initdbname.ora dosyasında ise ;
global_names=true;
yada
ALTER SYSTEM SET GLOBAL_NAME=true;
eklenir.
Remote tarafta ise initdbname.ora dosyasına db_domain set edilmelidir. Dikkat edilmesi gereken nokta database ‘ler aynı domainde olması gerekir.
 Örnek  local database   ora.oracle.net
remote  database ise    orcl.oracle.com
 ise farklı ise Dblink oluşturulur ama erişim sağlanamaz.
Çözüm ,
oluşturacağın dblink ismini remote database yani  orcl.oraclecom  verilir
yada remote database’ in global_name değiştirilir.
ALTER DATABASE RENAME global_name to orcl.oracle.net;
İle aynı domaine sahip olunur. Sorun çözülmüş olur.
Ve global isimli bir dblink oluşturak için;
CREATE PUBLIC DATABASE LINK orcl.oracle.com
CONNECT  TO hr IDENTIFIED BY  hr
USING ‘ORCL’;

Bir view oluşturarak;
CREATE VIEW vw_emp_orcl
AS
SELECT * FROM employees@orcl.oracle.com;

Yada bir synonym oluşturarak;
CREATE PUBLIC SYNONYM sn_emp_orcl
FOR
employees@ orcl.oracle.com;

yada bir tablo oluşturarak;
CREATE TABLE tbl_emp_orcl
AS
SELECT * FROM employees@orcl.oracle.com;

Lokal database ‘de nesne olarak kullanımı yaygınlaştırılabilir.
DDL işlemelerini desteklemez. DML ve Query işlerini rahatlıkla yapabilirsiniz.

Update  işlemi
Kullanımı
UPDATE employees@remote_connect
   SET salary=salary*1.1
   WHERE last_name = 'King';


INSERT işlemi
Kullanımı:
INSERT INTO employees@remote_connect(salary)
VALUES(salary*1.1);
   WHERE last_name = 'King';
 
DELETE İşlemi
 
DELETE FROM employees@remote_connect ;
   WHERE employee_id = 100;
 
 
SELECT:

SELECT * from  employees@remote_connect ;

 
Database üzerinde tüm dblinkleri görmek için
 
SELECT * FROM all_db_links ;

yada 

SELECT * FROM dba_db_links; 
kullanılır.

DBLinkleri silmek için ise

DROP DATABASE LINK dblink_name

Dbinkleri close etmek için

ALTER SESSION CLOSE DATABASE LINK remote_connect;

Kullanılır.

17 Şubat 2012 Cuma

Program Global Area (PGA) Nedir?


Daha önceki ilk makalemde,  Oracle'ın  kullanacağı bellek yapısını SGA(System Global Area) ve PGA (Program Global Area) olarak   iki bölüme ayırır demiştik. SGA ile ilgili genel bilgileri http://muhammetucar.blogspot.com/2011/08/sga.html  makalemizde vermiştik. Umarım yararlı olmuştur. Şimdi uzun bir aradan sonra PGA ile ilgili genel bilgileri paylaşmak istedim.
PGA,  Oracle kullanan her bir process (server process)için bellekte  reserve edilen alandır.Kullanıcı  tarafından gelen isteğe User proses,  user prosesi oracle serverde karşılayan process de server proces s ‘ dir.
Aşağıda bir veritabanı kullanıcısı tarafından  talep edilen bir sql cümlesini olduğunu düşünelim. Oracle Net yardımı ile Client tarafında oluşturulmuş bir  “User process1” olduğunu varsayalım.Gelen talep doğrultusunda server tarafında Listener(dinleyici) aşamasını geçtikten sonra  Oracle server tarafında  bir “Server process1” isimli process oluşacaktır.





Ve yazımızın başında demiştik ki, her server process için bir PGA alanı oluşacaktır. Ve bu server process için bellekte bir alan ayrılacaktır. Toplam PGA alanı ise her bir server process tarafından ayrılan alanların toplamıdır. Ve PGA_AGGREGATE_TARGET parametresi ile set edilebilir.Aşağıdaki resimde PGA alanı ve bileşenleri ve server process ile bağlantısı verilmiştir.

PGA yapısı:

PrivateSQL AREA:Bağlı olan tüm session(oturumların) bir SQL Work Area alanı vardır. SQL bind bilgisi burada yer alır.
Her bir Kullanıcı ağer aynı Sql cümlesini talep ederse bu cümleler için aynı paylaştırılmış (Shared SQL Area) alanı kullanacaklardır.
Private Sql Area nın yeri bağlantının şekline göre de değişir. İki şekilde oracle Server' a bağlanabilir. Shared Server ve Dedicated server şeklinde. Eğer shared server yöntemini kullanırsanız private sql area SGA içerisinde yer alacaktır. Bildiğimiz gibi SGA içinde shared pool and Large pool vardır. Eğer Large pool başlangıçta set edilmemişse(bir değer verilmemişse) o zaman Bu User Global Area dediğimiz kısım Shared Pool 'da mevki bulacaktır.Aksi takdirde Large pool 'u kullanacaktır.

Dedicated yapıda ise PGA içerisinde olacaktır.
Private SQL Area alanı Runtime(çalışma anında) Area ve Persistent(kalıcı) Area olarak iki şekilde bilgi tutulur. Runtime esnasında sorgu çalıştırma durumu bilgisi(Qurey sonucuna erişim bilgisi gibi vb. ) Buradaki bilgiler sorgu iptal edildiğinde yada sorgu sonucu fetch edildiğinde  silinir.
Diğer kalıcı bölüm ise,  bind variable değerlerinin kalıcı olarak saklandığı yerdir. imleç kapatıldığında bu alan serbest bırakılır. İmleç açıldığında bind variable değerleri tekrar yüklenir.



Memory AreaDedicated ServerShared Server
Nature of session memoryPrivateShared
Location of the persistent areaPGASGA
Location of part of the run-time area for SELECT statementsPGAPGA
Location of the run-time area for DML/DDL statementsPGAPGA
Source: Oracle

CURSOR(imleç): Oracle Sessionların talepleri için kullandığı işaretlerdir. Bir SQL sorgusu çalıştırıldığı zaman onun için bir cursor oluşturulur. Sorgu sonucunda dataların getirilmesi dataya bilgi gönderilmesi gibi önceliklerin ve işlemlerin yapılması işlemlerini Cursor sağlar. Yani siz bir işlem yaptırmak istiyorsanız bir imleç oluşturup  işlemlerinizi ona yaptırısınız.Derleme açısından bakıldığında imleçler önemli olduklarından imleç görüldüğü yerde işlemlerin öncelikli yapılması esastır.

SQL WORK AREA: 
         Birleştirme(hash-join) ve sıralama(order by, group by) komutları gibi işlemlr için ayrılmış büyük bir alandır. Örnek olarak istenilen sorgu sonucunda  bir sıralama talebi varsa , database buffer cahce ‘ den getirilen verileri sıralamak için bir alana ihtiyaç olacaktır.Ve bulan da “sort area” yada “Work area” olarak bilinir. Bir diğer örnek ise, birden fazla tabloyu join edeceğiz. Burada en büyük  tablo bu alana getirilir. Sonra diğerleri ve bu alanda da join işlemi yapılır. Bu  alanda yapılan işlem kadarcık mı diye düşünürseniz  önemli bir işlem daha yapılır. Bitmap indeks oluşturma ve birleştirme işlemleri için kullanılan önemli alandır. Datawarehouse sistemlerde sorgu performansını artırmak için b tree indeksler yerine Bitmap index kullanılır demiştik daha önceki makalelerimizde. Bakınız.(http://muhammetucar.blogspot.com/2012/01/oracle-indexes-2.html)

Sql Work Area alanının normal koşullarda yeterli büyüklükte alana sahiptir. Yeterli büyüklükte değilse sql için response time süresinin uzaması demektir. Bu da performansı negatif yönde etkiler.