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.

15 Mart 2012 Perşembe

LSNRCTL Utility kullanmak

Listener, database server'a erişmeye çalışan kullanıcıların taleplerine göre onları dinleyip, istenilen server modeline göre bir server process oluşturup ona göre işlem yapan, kullanıcı taraftaki  tnsname.ora dosyasına göre erişimi sağlayan,  gerektiğinde kullanıcıların bağlantılarını ret eden kullanıcıların veritabanına erişmelerini sağlayan bir kapıdır diyebiliriz.
Ve tek bir  listener bir ve birden fazla database instance  hizmet verebilir.  Listener da sonuçta bir servis olduğundan kapatılıp açılabilir.  Listener açık değilse veritabanı açık olsa bile erişim sağlanamaz. dolayısıyla database instance 'den önce listener konfigrasyonunun yapılması gerekmektedir.

Listener  control utility  kullanarak hızlı ve pratik bir şekilde listener(dinleyicimiz) hakkında bilgi alır,  açıp kapatabiliriz. Durumunu öğrenebiliriz.


Listener’ i durdurmak için;

lsnrctl STOP [listener_name]

yada

lsnrctl>stop

Listener’ i başlatmak içinse;
 
lsnrctl START [listener_name]

yada

lsnrctl>start

komutları verilir.
Listener_name dikkat ederseniz belirtmedik. Kullanımı Opsiyoneldir. Listener.ora içerisindeki tanımlanmış default listener adıdır.

Listener status

Listener ‘in durumunu verir. Takma adının ne olduğu, versiyonu ne zamandır aktif olduğu, log dosyası , özet bilgileri gibi bilgileri özetler.
Instance ‘ da bu listener’in servis verdiği instance ‘ların durumunu da belirtir.

Status READY demek ; bu Instance’ dan gelen tüm connection’lar kabul edilebilir anlamını taşır.
Status SECONDARY demek ; Real application Cluster(RAC) sistemlerde ikinci Instance’ dan gelen connection’lar kabul edilebilir anlamını taşır.
Status BLOCKED demek; Instance ‘den gelen connection ‘lar kabul edilmeyecek anlamını taşır.

LSNRCTL> status
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date                04-MAR-2012 00:16:57
Uptime                    8 days 21 hr. 6 min. 47 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Log File         /u01/app/oracle/diag/tnslsnr/mhm/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=mhm.oracle.com)(PORT=1521)))
Services Summary...
Service "+ASM" has 1 instance(s).
  Instance "+ASM", status READY, has 1 handler(s) for this service...
Service "XDB.oracle.com" has 1 instance(s).
  Instance "XDB", status READY, has 1 handler(s) for this service...
Service "XDBXDB.oracle.com" has 1 instance(s).
  Instance "XDB", status READY, has 1 handler(s) for this service...
Service "catdb.oracle.com" has 1 instance(s).
  Instance "catdb", status READY, has 1 handler(s) for this service...
Service "catdbXDB.oracle.com" has 1 instance(s).
  Instance "catdb", status READY, has 1 handler(s) for this service...
The command completed successfully



SERVICES:

Listener’a register edilmiş instance’ ların detaylı bilgilerini öğrenebiliriz.

LSNRCTL> services

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
Services Summary...
Service "+ASM" has 1 instance(s).
  Instance "+ASM", status READY, has 1 handler(s) for this service...
    Handler(s):
      "DEDICATED" established:0 refused:0 state:ready
         LOCAL SERVER
Service "XDB.oracle.com" has 1 instance(s).
  Instance "XDB", status READY, has 1 handler(s) for this service...
    Handler(s):
      "DEDICATED" established:0 refused:0 state:ready
         LOCAL SERVER
Service "XDBXDB.oracle.com" has 1 instance(s).
  Instance "XDB", status READY, has 1 handler(s) for this service...
    Handler(s):
      "D000" established:0 refused:0 current:0 max:972 state:ready
         DISPATCHER <machine: mhm.oracle.com, pid: 6184>
         (ADDRESS=(PROTOCOL=tcp)(HOST=mhm.oracle.com)(PORT=14763))
Service "catdb.oracle.com" has 1 instance(s).
  Instance "catdb", status READY, has 1 handler(s) for this service...
    Handler(s):
      "DEDICATED" established:0 refused:0 state:ready
         LOCAL SERVER
Service "catdbXDB.oracle.com" has 1 instance(s).
  Instance "catdb", status READY, has 1 handler(s) for this service...
    Handler(s):
      "D000" established:0 refused:0 current:0 max:972 state:ready
         DISPATCHER <machine: mhm.oracle.com, pid: 5742>
         (ADDRESS=(PROTOCOL=tcp)(HOST=mhm.oracle.com)(PORT=61753))
The command completed successfully

  1.      +ASM
  2.   Xdb.oracle.com
  3.   Catdb.oracle.com


Toplam 3 tane instance var.
D000 dispatcher no yu gösterir. Her instance dedicated server modelinde bağlanmış ve bir adet dispatcher mevcuttur. Ve bu 3 tane instance Dedicated server modeline göre çalışmaktadır. Dispatcher ve dedicated /shared server ile  makalemiz http://muhammetucar.blogspot.com/2012/03/oracle-server-erisim-yontemleri.html ‘ den yararlı olacaktır.

Handle(işleyici) durumları:
Established: o anda bu instance bağlı olan kullanıcı sayısı
Refused: Reddedilen kullanıcı sayısı
Max: Bağlanacak maksimum kullanıcı sayısı
Current: Şu anda işlem gören kullanıcı sayısı
State: işleyicinin durumuna göre ready /blocked  olur.

Farklı bir makale ile görüşmek üzere...

4 Mart 2012 Pazar

Oracle Server' a Erişim Yöntemleri

Oracle database Instance ulaşmak için iki yöntem tercih edilir. Dedicated Server konfigrasyonu ve shared server konfigrasyonu kullanılarak erişim sağlanılır. Tercih edilmeler kullanım amacaına göre değişir.
Veritabanı İnstance’ a bağlı olan user procesleri taleplerini işlemek  için server tarafında  server process oluşturulur. Ve User işlerini bu server prosesler yapar. Server process’ ler   bir veritabanında  dedicated server ve shared server  olarak iki şekilde oluşturulur.

Dedicated Server Konfigrasyonu:

Dedicated server’ da, talep eden user processlerden gelen her bir session için ayrı ayrı oluşturulan server processleridir. Session işi bittikten sonra bu dedicated server process sonlandırılır. Her bir session için oluşturulduğu için sistem kaynaklarını çok kullanmaktadır. Dolayısı ile database bağlanan user sayısı da arttıkça kullanacağı memory miktarı da artacağından sistem kaynakları olumsuz etkilenir. Oracle database Instance kurulumu yapılırken bağlantı yöntemini belirliyoruz. Burada dedicated konfigrasyonunda default process sayısı 150 ‘dir. Bu uygun bir sayıdır.  
Bu yapıda Client/server ilişkisi içerisinde client’den gelen istekler server tarafında listener’ a gelir. Dedicated server işleme tipi listenerden aldığı bilgiye göre session için bir server process’i oluşturur.
Dedicated server ‘ larda  User Global Area  PGA içerisindedir. UGA içinde Session bilgisi,PLSQL değişkenleri , bind  değişkenleri  vardır. Ve Her session için bir PGA oluşturulur.
Not: Batch işlemleri ve RMAN işlemleri(özellikle Backup – restore – recovery ) dedicated server modunda yapılması gerekir.




Shared Server Konfügrasyonu:
Her bir shared server prosesi(Snnn) bir çok kullanıcı taleplerine hizmet eder. Shares server mimarisi sistem kaynaklarını verimli kullanmanın bir yoludur.  



Shared server konfügrasyonu ,  Listener prosesi ,request queue, response queue ,shared server prosesi ve dispatcher  prosesinden oluşur.

Shared server konfigrasyonunda Listener prosesi gelen talep doğrultusunda user prosesi dinler.
Gelen talep dedicated istenmişse bu listener prosesi bir dedicated process başlatır. Bu konfigrasyonda örneğin veritabanı yöneticisi dedicated da bağlanabilir. Taki önemli sistem kaynaklarını etkili bir şekilde kullanacağı yığın işleri yada backup- restore-recover işlemi yapması gerekebilir.
 Gelen talep shared server istenmişse bu talep dispatcher prosesine iletilir. Shared server mimarisinde en az bir tane dispatcher prosesinin konfigrasyonu şarttır.
Dispatcher prosesi(Dnnn) talep kuyruğu(request queue) ‘ndaki talepleri yerleştirir. Talep listesi SGA içerisinde oluşturulur ve tüm dispatcher prosesleri tarafından paylaştırılır.
Çalışma anında o an boş olan shared server prosess talep listesindeki sırası gelen işlemi alır ve onu işletir. İşlem bittikten sonra  sonuç listesini (Response Queue) günceller. Dispacther prosesi(Dnnn) user prosese yanıt listesine göre yanıtları ilgili user prosese dönüt olarak verir.
Shared server proses yapısına sahip sistemlerde PGA’ deki UGA(user global Area) SGA içinde yer alır. Eğer large pool configure edilmişse UGA burada, edilmemişse Shared pool içerisinde yer alır. Ve paylaşımlı yapıya sahiptir. Bu yapıdaki sessionlar için PGA sadece stack space  ve proses değişkenlerinden oluşur.
Shared Server mimarisi RMAN’ ı desteklemez. Yani RMAN kullanmak istiyorsanız Dedicated bağlanmanız gerekiyor.
Oracle server, request queue(yapılacaklar listesi)  uzunluğuna bakarak shared server proses sayısını dinamik olarak ayarlar. Shared server proses sayısı SHARED_SERVER ve MAX_SHARED_SERVER başlangıç parametresi değerleri arasında belirlenir.
SHARED_SERVERS parametresi ile kaç tane shared server parametresi başlayacağını belirliyoruz. Bununla birlikte ayrı dispacther prosesler de kendiliğinde başlayacaktır. Bunun için ayrı bir Dispatcher başlatmaya gerek yok.
V$SHARED_SERVER dinamik performans view lerini de sorgulayarak bilgi alabiliriz.
V$DISPATCHER view’ lrin sorgulayarak çalışsan Dispatcher ile ilgili detaylı bilgileri öğrenebiliriz.
ALTER SYSTEM SET SHARED_SERVERS=3;
MAX_SHARED_SERVER parametresi  ile shared server proses sayısının üst limitini belirlemek için kullanılır.
Bir instance’ da dedicated ve shared server konfigrasyonu eş zamanlı olarak çalışabilir. Default olarak listener prosesi shared server konfügrasyonu kullanır. Dedicated bağlanmak istiyorsak sqlnet.ora dosyasına USE_DEDICATED_SERVER=ON  yada local naming metodu tercih ediyorsak  connect data içindeki SERVER parametresine “dedicated”  set etmemiz gerekiyor. Connect data içindeki SERVER parametresine “shared” girersek  shared yapıda bağlanılacaktır.
örnek bir tnsname.ora dosyası
XDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = mhm.oracle.com)(PORT = 2241))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XDB.oracle.com)
    )
  )

Başka bir makale ile görüşmek üzere...