Minggu, 23 Agustus 2009

Teori dan Administrasi init file (pfile dan spfile) di ORACLE

Konfigurasi instance disimpan di file bertipe text yang dikenal dengan init file (initial file) atau pfile (parameter file). Mulai versi 9i Oracle memperkenalkan pfile bertype binary yang disebut spfile.

Di Unix family, init file ada di directory $ORACLE_HOME/dbs. Sedangkan di Windows ada di folder %ORACLE_HOME%\database.



Format nama file:

  1. Pfile: initNAMAINSTANCE.ora
    Di Unix, nama instance adalah case sensitive, instance dataku berbeda dengan DATAKU. Pfile untuk instance dataku adalah initdataku.ora. Dan Pfile untuk instance DATAKU adalah initDATAKU.ora

    Sedangkan di Windows, nama init file tidak case sensitive, instance dataku ya sama saja dengan DATAKU. Kalau kita membuat database dengan dbca, initfile yang terbentuk adalah INITdataku.ORA. Kalau file ini diganti dengan initDATAKU.ora yang tidak apa-apa, Windows gitu lho!

  2. Spfile: spfileNAMAINSTANCE.ora
    Sama seperti pfile, case sensitive di Unix dan tidak case sensitive di Windows.



Cara membuat initfile:

  1. pfile
    Dibuat secara manual pakai text editor , contoh: notepad di Windows dan vi di Unix. Bisa juga dibuat berdasarkan content spfile yang sudah ada.
    SQL> create pfile from spfile;
  2. spfile
    Spfile tidak bisa dibuat dengan text editor sebagimana membuat pfile. Tentu saja, file binary tidak bisa dibuat (diedit) dengan text editor. Spfile hanya bisa dibuat dengan cara berikut ini (content-nya diambil dari pfile yang sudah ada):

    SQL> create spfile from pfile;

By default, kalau ada spfile maka ketika startup Oracle akan membaca parameter dari spfile. Kalau tidak ada spfile, Oracle membaca pfile. Kalau tidak ada kedua-duanya, instance tidak bisa di-startup. SQL> startup
ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file
‘/mnt01/oracle/10.2.0.3/dbs/initDATAKU.ora’

Mengedit Init file (mengubah parameter instance)

Parameter instance ada dua tipe yaitu dynamic dan static. Parameter dynamic bisa diubah ketika instance sedang jalan sedangkan parameter static tidak bisa, artinya perubahan parameter static harus dilakukan di initfile dan instance harus di-restart.

Contoh parameter dinamik adalah pga_aggregate_target. Berikut ini cara untuk mengubahnya:

  1. Kalau instance sedang mati
    Naikkan instance dulu, kemudian lakukan perubahan pakai SQLPlus

    SQL> startup
    SQL> alter system set pga_aggregate_target=100m;

    Perintah alter system di atas langsung mengubah parameter di instance (memory) yang berjalan.

    1. Kalau kita pakai spfile, perintah ini langsung mengupdate juga spfile. Sehingga ke depannya kalau kita merestart instance, Oracle membaca pga_aggregate_target=100m dari spfile.
    2. Kalau kita pakai pfile, pga_aggregate_target=100m tidak di-update ke pfile sehingga ke depannya kalau kita merestart instance, pga_aggregate_target kembali ke nilai semula. Agar perubahan bersifat permanen, edit juga parameter pga_aggregate_target di pfile
  2. Kalau instance sedang jalan
    Langsung lakukan perubahan di SQLPLus
    SQL> alter system set pga_aggregate_target=100m; Sama seperti penjelasan sebelumnya, kalau pakai spfile maka spfile juga diupdate secara otomatis. Kalau pakai pfile, agar perubahan bersifat permanen maka pfile harus diedit secara manual pakai text editor.

Contoh parameter statik adalah db_writer_processes, control_files, sessions, dsb. Berikut ini cara untuk mengubah parameter db_writer_processes yang bersifat statik itu:

  1. Kalau instance sedang mati
    Kalau pakai pfile, edit pfile pakai text editor, kemudian startup instance.

    Edit pfile
    SQL> startup

    Spfile tidak bisa diedit pakai text editor, kalau tetep dipaksa edit pakai text edior maka spfile akan corrupt sehingga tidak dikenali oleh Oracle. Spfile hanya bisa diubah dengan SQLplus ketika instance naik. Jadi naikkan dulu instance, pakai nomount biar cepet toh kita tidak perlu instance mount atau open, yang penting startup dulu. Kemudian alter system set db_writer_processes=2 scope=spfile. Perintah ini akan mengedit spfile saja, sementara parameter di instance sendiri masih belum berubah. Setelah itu, baru startup
    SQL> startup nomount
    SQL> alter system set db_writer_processes=2 scope=spfile;
    SQL> shutdown immediate
    SQL> startup

  2. Kalau instance sedang jalan

    Kalau pakai pfile, database matiin dulu, edit pfile, kemudian restart instance
    SQL> shutdown immediate
    Edit pfile
    SQL> startup

    Kalau pakai spfile, alter system dengan scope=spfile, kemudian restart
    SQL> alter system set db_writer_processes=2 scope=spfile;
    SQL> shutdown immediate
    SQL> startup

Catatan

  1. Perintah alter system set pga_aggregate_target=100m by default kalau pakai spfile, maka
    alter system set pga_aggregate_target=100m scope=both
    Dan kalau pakai pfile. maka
    alter system set pga_aggregate_target=100m scope=memory
  2. Kita tidak bisa menjalankan alter system set db_writer_processes=2 karena ini adalah parameter static. Kalau masih dipaksa akan muncul error:

    SQL> alter system set db_writer_processes=2;
    ERROR at line 1:
    ORA-02095: specified initialization parameter cannot be modified

    Parameter static hanya bisa diubah di scope=spfile
    SQL> alter system set db_writer_processes=2 scope=spfile;
    System altered.

  3. Kalau dilihat pakai text editor, spfile berisi sama seperti pfile, hanya ada entry yang "aneh-aneh" (yang bukan merupakan parameter instance) di baris pertama.
  4. Contoh kasus.

    Instance saya hanya punya spfile (spfileDATAKU.ora) dan tidak punya pfile (initDATAKU.ora)> Suatu ketika saya ingin mengubah parameter static (misalnya control_files). Karena ketidak tahuan, parameter control_files saya edit di spfileDATAKU.ora pakai text editor (notepad).

    Karena spfile adalah file binary, maka spfile menjadi rusak karena diedit pakai text editor, sebagian akibatnya Oracle tidak bisa membacanya. Karena spfile tidak bisa dibaca, maka Oracle mencari pfile. Karena saya tidak punya pfile sementara spfile-nya corrupt, ya akhirnya saya tidak bisa startup instance
    SQL> startup
    ORA-01078: failure in processing system parameters
    LRM-00109: could not open parameter file
    ‘/mnt01/oracle/10.2.0.3/dbs/initDATAKU.ora’

    Waduh… gimana ini?!! Solusinya, buat pfile initDATAKU.ora yang isinya sama persis dengan spfileDATAKU.ora, dengan catatan: jangan ikut sertakan entry spfileDATAKU.ora yang aneh-aneh di baris pertama itu.

    Untuk melihat isi spfile spfileDATAKU.ora, di unix gunakan perintah more. Di Windows, gunakan wordpad; kalau pakai notepad biasanya tampilannya amburadul.

sumber : http://rohmad.net/2008/06/28/teori-dan-administrasi-init-file-pfile-dan-spfile/

2 komentar:

asep mengatakan...

weits..
lengkap bgt yaz..
mantap..mantap..
tp gw masih blum terlalu paham..
ribet bgt ya kayanya..
hehehehe...

Diaz Kribozz mengatakan...

waahh klo yg ini dah masuk administration di oracle sep..

klo yg bkal muncul di kuliah SBD tar,yang normalisasi ama ERD,,pcaya dah..hahaa