Blog ' da Ara

Loading

16 Haziran 2011

Oracle Instance Yönetimi


Merhabalar,
Bu yazımızda oracle instance yönetimi hakkında bir araştırma yapıyor olacağız. Genel olarak oracle açma , kapama gibi işlemler nasıl yapılır, parametre dosyasında neler vardır, ne anlama gelir, alert log lar ve trace dosyaları nasıl kullanılır, dinamik viewlardan instance izleme nasıl yapılır gibi konular hakkında yazacağız.
            Öncelik bir oracle veritabanı yönetirken framework çatısını şekil1 deki gibi gösterelim.
Şekil1:Oracle Management Framework.


Şekilde görüldüğü gibi oracle yönetimi için bilmemiz gerekn yapıda, 1 adet veritabanı, en az 1 tane listener ve yönetim arayüzüne ihtiyaç duyarız.


Veritabanı burada tahmin edeceğiniz gibi bizim yönetmek istediğimiz dataların tümüdür.Bunlar Data file, kontrol file yada redolog file dediğimzi dosya birimleridir.Bunlar hakkında bilgiyi oracle database mimarisi adlı yazımızdan bulabilirsiniz.

Listener ; Yönetim arayüzünden veritabanına bağlanabilmemiz için gereken servislerdir.
Yönetim arayüzü ise toad, sql navigator gibi 3. Party programlar olabileceği gibi, oracle web arayuzu olan Enterprise manger da olabilir.Birden fazla instance nin olduğu ortamlarda (RAC yapıları) Enterprise manager yerine Oracle Grid Kontrol kullanılır.

Bir veritabanını makinamıza remote bağlandıktan sonra (Eğer makinamız vmware içinde ise gerekli ayarlamalar için Bknz: Oracle DBA için Linux ) ;

[oracle@vmora ~]$ sqlplus sys/3y3$vmora as sysdba
Komutunu çalıştırarak sqlplus arayuzune ulaşabiliriz.

Burada startup komutunu çalıştırdığımızda oracle başlatılacaktır.Startup ve shutdown komutları ile ilgili seçenekler hakkında yazımız ilerlediğinde bilgi vereceğiz.Şimdilik kafamızda kavram oluşması açısından çok detaya girmiyorum.

Bundan sonra makinamıza uzak bağlantı sağlanabilmesi için listener servislerinin çalışıyor olması gerekir. Bunun için
[oracle@vmora ~]$ lsnrctl start listener

Komutunu çalıştırız ve eğer listener kapalı ise açık konuma gelir. Komut içerisindeki “listener” kelimesi bizim listenerimizin default ismidir. Siz değişik bir isimle listener oluşturabilirsiniz.

Bunun için $ORACLE_HOME/network/admin/ klasörüne gidip, buradaki listener.ora dosyası içine uygun bir tanım yaptıktan sonra aynı klasördeki tnsnames.ora dosyasına da uygun bir tnsnames tanımlarsınız.(örnekler aynı klasör içindeki samples klasöründe mevcuttur.)Daha sonra $ORACLE_HOME/dbs klaöründeki init<SID>.ora dosyasına *.remote_login_passwordfile='EXCLUSIVE'  ve *.local_listener=your_new_listener satırını ekledekiten sonra database i restart ederseniz kendiniz bir listener tanımlamış olursunuz.

Enterprise manager kullanabilmek içinse dbconsole aşağıdaki komutla başlatılmış olması gerekir.
[oracle@vmora ~]$ emctl start dbconsole
Enterprise Manager kapatmak içinse aşağıdaki komutu kullanırız.
[oracle@vmora ~]$ emctl stop dbconsole

         Enterprise manager’a bağlanmak için herhangi bir browser da https://global_database_name/IP:1158/em yazmanız yeterlidir. Mesela ben vmware içindeki linuxa oracle kurdum ve enterprise manager için https://192.168.2.2:1158/em yazarak bağlanıyorum.Çünkü remote bağlantı için ip konfigürasyonu yaparken bu makinaya 192.168.2.2 ip sini vermiştim.

            Database açılırken oracle bir takım parametreleri referans olarak görür.Bu parametrelere initialization parameter yani başlangıç değer parametreleri denir. Bu parametreler  $ORACLE_HOME/dbs/ klasöründe tutulur.Oracle kurulduğunda spfile<SID>.ora dosyası default olarak oluşturulur ve parametrelerin default değerleri bu dosyaya yazılır.

            SPFILE: Server Parameter File: Oracle Database tarafından düzenlenebilir ve okunabilir.Binary bir dosyadır.Kendimiz manuel düzenleyemeyiz.
            PFILE: Text Initialization Parameter:Spfile2 den oluşturup düzenleyebiliriz.Düzenlemelerimizin etkin olabilmesi için database i restart etmemiz gerekebilir. Ben genelde Pfile ile çalışmayı tercih ederim.Çünkü düzenlemesi ve parametre değerlerini okuması daha kolaydır.Pfile oluşturmak için SQLPLUS ‘a bağlandıkatan sonra aşağıdaki komut çalıştırılabilir.

            create pfile from spfile='$ORACLE_HOME/dbs/spfile<SID>.ora'
Bu komut sonucunda $ORACLE_HOME/dbs/ klasörüne gidip baktığınızda init<SID>.ora dosyasının oluştuğunu göreceksiniz.

Şimdi başlangıç değer parametrelerinden en yoğun kullanılanlara bakalım.
          İnitialization Parameters:
          PROCESSES:Database Bağlanabilecek maximum process sayısıdır.Bu sayı ğere 15 kişi tarafında ndoldurulursa 16. kişi database ‘e login bile olamaz.Burada hemen akıllara şu soru gelebilir.Öyleyse çok yüksek bir değere set edelim kimse login olma sorunu yaşamasın? Ancak şunu unutmayalımki bu sayı ne kadar yüksek olursa okadar işlemci zorlanacak ve db performansı düşecektir.
         OPEN_CURSORS:Bir userın açabileceği maximum cursor sayısıdır.
         CONTROL_FILES:Control file lerin tutulduğu yeri ve ismini belirtir.
         DB_BLOCK_SIZE: Datafilelerin yapı taşı denilecebilecek blockların boyutunu belirtir.OLTP databaselerde bu sayı 8K iken dataware house sistemlerinde 16K yada daha büyük olabilmektedir.
         DB_CACHE_SIZE:Veritabanının cache bellek için kullanacağı memory miktarıdır.Buffer Cache alanı bu parametre ile belirlenir.
         DB_FILE_MULTIBLOCK_READ_COUNT: Database’in bir kerede okuyacağı block sayısıdır.Performansı önemli ölçüde etkiler.Ancak Bu parametreyi değiştiriken Makinamızın CPU RAM gibi değerlerini göz önüne almalıyız.
         SHARED_POOL_SIZE: Paylaşımlı memory’nin miktarıdır.
         SGA_TARGET: Shared Global Area dediğimiz memory biriminin Toplam miktarının belirtir.
         MEMORY_TARGET:Oracle systeminin kullanacağı memory miktarıdır.Default olarak Sistemin %40 ını kullanır.
         PGA_AGGREGATE_TARGET:Processler için Ayrılan Memory miktarını belirtir.
         DB_NAME:Database adını belirtir.
         DB_DOMAIN:Database domain bilgisini belirtir.

           Bu paramterelerin tamamının tutulduğu ve ahngisini değiştirdiğinizde systemi restart etmeniz gerekir gibi bilgileri görebileceğiniz viewlar mevcuttur. Bunlar v$parameter, v$spparameter (sp file içindeki parametreler),v$parameter2 (şu an kullanılan session için aktif olan parametreler) v$system_parameter (instance için aktif olan parametreler).
            Ayrıca sqlplus ekranında show parameter komutu ilede parametreler hakkında detaylı bilgi alabilirsiniz. Bu parametreleri değiştirmek istiyorsanız aşağıdaki gibi komut çalıştırırsınız, 
                   Alter system set parameter_name=parameter value scope=’?’; 
                   Alter session set parameter_name=parameter value scope=’?’;
           Burada system instance bazında değişiklik yaparken session ise yanlızca o session bazında değişiklikj yapar.
           Scope yarı içinse aşağıdaki değerleri girebilirsiniz.
Spfile : Değişiklikleri spfileye kaydeder.
Memory : Değişiklikleri sadece memoryde aktif eder.Bu değer yanlızca dinamik değerler için geçerlidir.
Both: Her iki opsiyon içinde aktif edilmesini sağlar.
         
          Burada dikkat edilmesi gerekn eğer spfile ye yazılmasını istediyseniz database’in resatart edilmesi gerekmektedir.Memory ye yazılanlar ise aktif olacağı gibi database restart edilince inaktif olur.

          Startup ve Shutdown Opsiyonları
Aşağıdaki şekil2 de startup opsiyonları verilmiştir.Şimdi bunları açıklamaya çalışalım.
Şekil2: Startup (oracle instance başlatma) opsiyonları


            Startup dendiğinde tüm işlemleri gerçekleştirerek database open konumuna kadar getirilir.
Startup nomount                                 çalıştırılırsa sadece instance başlatılır.
Alter database mount                        çalıştırılırsa Control file ler açılır.
Alter database open                           çalıştırılırsa Datafile lerde açılır ve databaseimiz açılmış olur.
        
           Default olarak startup deriz ancak bazen yapacağımız operasyon gereği database i mount yada nomount konumuna almak gerekebilir.
Şekil3:Shutdown (oracle instance kapatma) opsiyonları


             Şekil3 de görüldüğü üzere oracle kapatılırkende bazı ayarlar kullanılabilir.

Shutdown abort                Tüm prosesleri kill edip oracle’ı kapatır.Elektriği kesmek gibidir.Tavsiye edilmez.
Shutdown immediate:     Kommitlenmemiş transactionlar rollback yapılır.En genel kullanılan ve tavsiye edilendir.
Shutdown normal:           Tüm sessionların disconnect olamsı beklenir.
Shutdown transactional:Tüm transactionların bitmesi beklenir.


        Oracle instance yada database alert loglar yada treace fileler aracılığıyla takip edilebilir.
Alert loglar $ORACLE_HOME/diag/rdbms/<dbname>/<SID>/alert klasöründe
$ORACLE_HOME/diag/rdbms/<dbname>/<SID>/trace klasöründe tutulur.
        Bu dosyaları okuyabilmek için linux üzerinde cat, more gibi komutlar kullanabileceğiniz gibi vi editörü ilede inceleme yapabilirsiniz.Linux komutları ve vi editörü ile ilgili bilgileri linux ile ilgili yazılarımızda bulabilirsiniz.
        Alert loglarda tüm erroları görebileceğiniz gibi bir sessiona ait trace dosyası oluşturup çalıştırılan tüm processleri izleyebilirsiniz.
Bunun için aşağıdaki komutları çalıştırmanız yeterlidir.
--Trace başlatmak için
EXECUTE DBMS_SYSTEM.set_sql_trace_in_session(sid=>547, serial#=>27610, sql_trace=>TRUE);
--Trace sonlandırmak için
EXECUTE DBMS_SYSTEM.set_sql_trace_in_session(sid=>547, serial#=>27610, sql_trace=>FALSE);
      Yukarıdaki scriptlerde sid izlemek istediğiniz session’a ait id ve serial# yine aynı sessiona ait numaradır. Bu bilgiler ile birlikte yine aynı sessiona ait trace dosyasının bulunduğu path,sessionu başlatan userın os, terminal, dbuser, pid(process id) gibi faydalı bilgileride yine aynı query sonucundan elde edebilirsin.
SELECT s.sid,
       s.serial#,
       p.pid,
       p.spid,
       s.status,
       s.osuser,
       s.username,
       s.machine,
       s.terminal,
       s.module,
       s.logon_time,
       s.sql_trace,
       pa.value || '/' || LOWER(SYS_CONTEXT('userenv','instance_name')) ||   
       '_ora_' || p.spid || '.trc' AS trace_file
FROM   v$session s,
       v$process p,
       v$parameter pa
WHERE  pa.name = 'user_dump_dest'
AND    s.paddr = p.addr
order by osuser desc

Querinin sonucu aşağıdaki gibidir;

SID       SERIAL#           PID      SPID    STATUS           OSUSER           USERNAME     MACHINE        TERMINAL            MODULE         LOGON_TIME SQL_TRACE     TRACE_FILE

542      28205  27        22041  ACTIVE            oyildirim          SYS       WORKGROUP\OYILDIRIM-PC OYILDIRIM-PC        TOAD 9.7.2.5   15.06.2011 16:39:13   DISABLED            /u01/app/oracle/diag/rdbms/mts/mts/trace/mts_ora_22041.trc
15        1837    104      2991    INACTIVE         oracle  SYSMAN          atlas    unknown          OEM.DefaultPool            13.06.2011 18:27:28   DISABLED        /u01/app/oracle/diag/rdbms/mts/mts/trace/mts_ora_2991.trc

          Ayrıca bunların haricinde dictionary views denilen viewlardanda izleme yapılabilir.
Bu viewların tamamına görebilmek için herhangi bir sql editörden (sqlplus, toad, sqldeveloper ...)
        select * from dict;
Komutunu çalıştırmanız yeterlidir.


Faydalı olması dileğiyle.
                                                                                           Özcan YILDIRIM

2 yorum:

  1. mustafa korkmaz18 Aralık 2011 14:53

    sade ve konuya yönelik bir makale

    tebrik ederim.

    YanıtlaSil
  2. Güzel bir yazı olmuş

    Elinize sağlık

    YanıtlaSil

"Sorularınız ve Eleştirileriniz Değerlidir"