Administrasi Control File

Selain datafile dan log dfile, control file merupakan salah satu file utama database Oracle. Secara global ada baiknya kita lihat lagi arsitektur database Oracle. Informasi yang disimpan di contol file di antaranya adalah nama database, lokasi datafile dan logfile, nomor SCN, dan lain-lain.

View-view dictionary yang datanya diambil dari control file di antaranya adalah: v$DATABASE, v$DATAFILE, v$TEMPFILE, v$LOGFILE, V$LOG, dan lain-lain. Control file dibaca Oracle ketika instance sedang mount. Oleh karena itu, view-view tersebut bisa di-query meskipun database dalam keadaan mount (belum open).

Lokasi
Lokasi control file ditunjukkan oleh parameter control_files. Silahkan temukan parameter control_files ini di instance parameter (init file atau spfile). Atau gunakan SQL command berikut:

SQL> show parameter control_files
SQL> -- atau
SQL> select name from v$controlfile;
SQL> -- atau
SQL> select NAME,VALUE from  v$parameter
where NAME ='control_files';

Melihat isi control file

Untuk melihat informasi apa saja yang disimpan di control file, gunakan SQL command berikut:

SQL> select * from V$CONTROLFILE_RECORD_SECTION order by type;

Untuk melihat definisi control file, backup control file ke file text. Gunakan perintah ini:

SQL> alter database backup controlfile to trace;

Perintah di atas akan membuat trace file yang disimpam di direktori user_dump_dest. Gunakan perintah SQL “show parameter user_dump_dest” untuk melihat lokasi direktori tersebut. Format file adalah NAMAISNTANCE_ora_OSID.trc. Di contoh saya ini, trace file yang di-generate adalah ts_ora_22363.trc.

Isi trace file ini adalah script untuk re-create control file. Ada dua bagian, yaitu recreate dengan opsi NORESETLOGS atau RESETLOGS. Berikut ini adalah content control file (dengan opsi NORESETLOGS)

STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "TS" NORESETLOGS FORCE LOGGING ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 4 '/oradata/oracle/ts/redo04.log'  SIZE 5M,
GROUP 5 '/oradata/oracle/ts/redo05.log'  SIZE 5M,
GROUP 6 '/oradata/oracle/ts/redo06.log'  SIZE 5M
DATAFILE
'/oradata/oracle/ts/system01.dbf',
'/oradata/oracle/ts/undotbs01.dbf',
'/oradata/oracle/ts/sysaux01.dbf',
'/oradata/oracle/ts/users01.dbf2',
'/oradata/oracle/ts/test01.dbf',
'/oradata/oracle/ts/test02.dbf'
CHARACTER SET WE8MSWIN1252
;
RECOVER DATABASE
ALTER SYSTEM ARCHIVE LOG ALL;
ALTER DATABASE OPEN;
ALTER TABLESPACE TEMP ADD TEMPFILE '/oradata/oracle/ts/temp01.dbf2'
SIZE 20971520  REUSE AUTOEXTEND ON NEXT 655360  MAXSIZE 32767M;

Bagain kedua, yaitu recreate dengan opsi RESETLOGS, intinya sama saja. Hanya berbeda pada poin-poin berikut:

CREATE CONTROLFILE REUSE DATABASE "TS" RESETLOGS FORCE LOGGING ARCHIVELOG
RECOVER DATABASE USING BACKUP CONTROLFILE
ALTER DATABASE OPEN RESETLOGS;

Menambah, multiplexing (mirroring) control file
Ketika membuat database dengan dbca, by default Oracle akan membuat 3 control file. Isi ketiga control file tersebut adalah sama. Sebenarnya, 1 control file saja cukup. Kita dianjurkan untuk membuat lebih dari 1 untuk jaga-jaga (multiplex/mirror), kalau-kalau salah satu control file corrupt kita masih punya yang lainnya. Oleh karena itu, idealnya masing-masing control file ditaruh di file system (drive) yang berbeda.

Multiplexing dilakukan dengan menambah control file. Misalkan kita sudah punya 3 control file berikut:

/oradata/oracle/ts/control01.ctl
/oradata/oracle/ts/control02.ctl
/oradata/oracle/ts/control03.ctl

Saya ingin menambah 1 control file lagi dan saya taruh di directory /data1/oracle. Berikut ini step-stepnya:

  1. Shutdown database
    SQL> shutdown immediate
  2. Copy control file. Bisa yang mana saja, toh isinyanya sama semua
    cd /data1/oracle/
    cp -rp /oradata/oracle/ts/control03.ctl control04.ctl
  3. Edit parameter control_files di instance parameter file (initfile atau spfile).
    Kalau pakai init file, edit file $ORACLE_HOME/dbs/initts.ora (dalam contoh ini, nama instance adalah ts). Tambahkan control file yang baru tersebut ke definisi control_files:

    control_files='/oradata/oracle/ts/control01.ctl',
    '/oradata/oracle/ts/control02.ctl',
    '/oradata/oracle/ts/control03.ctl',
    '/data1/oracle/control04.ctl'

    Kalau pakai spfile, kita tidak bisa mengedit spfile pakai text edior, mau tidak mau ya harus startup instance (cukup startup nomount saja):

    SQL> startup nomount
    SQL> alter system set control_files=
    '/oradata/oracle/ts/control01.ctl',
    '/oradata/oracle/ts/control02.ctl',
    '/oradata/oracle/ts/control03.ctl',
    '/data1/oracle/control04.ctl'
    scope=spfile;
    SQL> shutdown immediate
  4. Startup database. Check bahwa sekarang control file sudah bertambah
    SQL> startup
    SQL> select name from v$controlfile;
    
    NAME
    --------------------------------------
    /oradata/oracle/ts/control01.ctl
    /oradata/oracle/ts/control02.ctl
    /oradata/oracle/ts/control03.ctl
    /data1/oracle/control04.ctl

Me-rename (memindahkan) control file

Step-stepnya hampir sama dengan menambah control file. Misalkan kita akan memindahkan control file /data1/oracle/control04.ctl ke directory /data2/oracle/

  1. shutdown database
  2. pindahkan (rename) control file
    cd /data2/oracle/
    mv /data1/oracle/control04.ctl /data2/oracle/
  3. Edit instance parameter file (initfile atau spfile). Ganti control file yang lama (/data1/oracle/control04.ctl) menjadi yang baru (/data2/oracle/control04.ctl):
    control_files='/oradata/oracle/ts/control01.ctl',
    '/oradata/oracle/ts/control02.ctl',
    '/oradata/oracle/ts/control03.ctl',
    '/data2/oracle/control04.ctl'
  4. startup database

Mengurangi (delete/drop) control file
Step-stepnya juga hampir sama saja dengan menambah control file, intinya adalah membuang (take out) control file (yang akan dibuang) dari parameter control_files. Misalkan saya ingin menghapus control file /data2/oracle/control04.ctl.

  1. shutdown database
  2. Take out /data2/oracle/control04.ctl dari parameter control_files.
    control_files='/oradata/oracle/ts/control01.ctl',
    '/oradata/oracle/ts/control02.ctl',
    '/oradata/oracle/ts/control03.ctl'
  3. startup database

Referensi
Oracle┬« Database Administrator’s Guide 10g Release 2 (10.2) – Managing Control Files

This entry was posted in Administration and tagged , , , , . Bookmark the permalink.

6 Responses to Administrasi Control File

  1. Danish says:

    Saya tertarik untuk belajar Oracle, tapi saya bukan lulusan Ilmu Komputer. jadi saya harus belajar benar2 dari nol. kira2 bisa gak ya??? Baca artikel di atas saja pusiiing…. ????

  2. Janu says:

    mas saya sudah buat satu control file baru.tapi kenap saat di startu keluar pesan error : ora-00205:error in indentifying control, check log for more information.terus bagaimana cara mengatasi error ini?krn saya juga tidak bisa connect ke user…

  3. tenardi says:

    om saya mau tanya, tadi di bagian re-create control file terdapat dua bagian, yaitu recreate dengan opsi NORESETLOGS atau RESETLOGS.
    itu maksudnya NORESETLOGS dengan RESETLOGS apa ya??
    thx…

  4. Siregar says:

    Sir, saya mw nanya ne. Kalo qta pake MySQL untuk IDE nya biasanya pake PhpMySQL/SQLyog and kalo PostgreSQL kita pake phpPgAdmin.
    Trus kalo kita pake ORACLE, IDEnya(Administrator Tool for LINUX) biasanya pake apa ya…?

    Tengs Sir, website ni sangat membantu dalam belajar Oracle,,:D.

  5. Eko Supriyanto says:

    Dear Sdr Rohmad,

    Saya pengguna Aplikasi SAP dengan database Oracle 10.2…ketika menjalankan Database check muncul warning sbb:

    “BR0286W Size 3103850496 of file H:\ORACLE\DBN\SAPDATA3\DBN_1\DBN.DATA1 is different from Oracle file size 3103793152”

    sebenarnya apa yg terjadi?? jika berkaitan dgn controlfile, apa yg harus saya lakukan dgn controlfile??bagaimana mengkoreksi kekeliruan ini??

    Regards,

    Eko

Leave a Reply

Your email address will not be published. Required fields are marked *