Startup Inconsistent Database

Sebagai DBA kita kadang dipusingkan dengan masalah yang disebabkan oleh file corrupt. Masalah ini bisa disebabkan oleh database yang mati tiba-tiba karena listrik mati atau masalah di storage (disk). Misalnya database tidak bisa startup dengan error berikut

SQL> startup
ORACLE instance started.

Total System Global Area 1610612736 bytes
Fixed Size 2177912 bytes
Variable Size 396149896 bytes
Database Buffers 1207959552 bytes
Redo Buffers 4325376 bytes
Database mounted.
ORA-01113: file 2 needs media recovery
ORA-01110: data file 2: '/oradata/oracle/ts/undotbs01.dbf'

Biasanya database tidak bisa startup kalau yang perlu di-recovery adalah file UNDO atau SYSTEM. [Dalam contoh di atas adalah file UNDO]. Dalam kasus ini baik yang bermasalah file SYSTEM atau UNDO, perlakuan (work around atau solusi sementara) nya adalah sama.

Lakukan recover database
SQL> recover database;
ORA-00279: change 7516226638 generated at 05/05/2008 12:32:11
needed for thread 1
ORA-00289: suggestion : /oradata/oracle/ts/arc/1_42_653916655.dbf
ORA-00280: change 7516226638 for thread 1 is in sequence #42

Specify log: {ret=suggested | filename | AUTO | CANCEL}
AUTO
ORA-00308: cannot open archived log
'/oradata/oracle/ts/arc/1_42_653916655.dbf'
ORA-27037: unable to obtain file status
SVR4 Error: 2: No such file or directory
Additional information: 3

Open database
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01113: file 2 needs media recovery
ORA-01110: data file 2: '/oradata/oracle/ts/undotbs01.dbf'

Mau tidak mau kita butuh archived log dan/atau logfile yang berisi sequence yang dibutuhkan. Bila archived log atau logfile (yang dibutuhkan) tidak tersedia karena corrupt (atau hilang) maka sampai kapanpun database tidak akan bisa dinaikkan.

Berikut ini adalah work around (solusi sementara) untuk menaikkan database. Database nantinya akan up dengan kondisi inconsistent (tidak konsisten). Kalau database berisi data yang sangat urgent, ini mungkin terasa tidak masalah, yang penting database bisa up dan data bisa diselamatkan.

Work Around

  • Edit Init file
    Remark parameter undo_management dan undo_tablespace
    Tambahkan parameter berikut:
    UNDO_MANAGEMENT=MANUAL
    _ALLOW_RESETLOGS_CORRUPTION = TRUE
    _ALLOW_ERROR_SIMULATION = TRUE
    _CORRUPTED_ROLLBACK_SEGMENTS =(_SYSSMU1,_SYSSMU2,_SYSSMU3, ...)

    Dapatkan value _CORRUPTED_ROLLBACK_SEGMENTS dari [OS] command berikut
    cd system_datafile_directory
    strings system01.dbf | grep _SYSSMU | cut -d $ -f 1 | sort -u
  • Matikan database, dan nyalakan dengan initfile yang telah diedit tersebut. Pfile HARUS disebutkan secara eksplisit di command startup.
    SQL> startup mount
    pfile='/data1/oracle/product/10.2.0/dbs/initts.ora';
    ORACLE instance started.

    Total System Global Area 1610612736 bytes
    Fixed Size 2177912 bytes
    Variable Size 396149896 bytes
    Database Buffers 1207959552 bytes
    Redo Buffers 4325376 bytes
    Database mounted.
  • Recover database until cancel
    SQL> recover database until cancel;
    ORA-00279: change 7516226638 generated at 05/05/2008 12:32:11
    needed for thread 1
    ORA-00289: suggestion :
    /oradata/oracle/ts/arc/1_42_653916655.dbf
    ORA-00280: change 7516226638 for thread 1 is in sequence #42
    Specify log: {ret=suggested | filename | AUTO | CANCEL}
    CANCEL
    ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
    ORA-01194: file 1 needs more recovery to be consistent
    ORA-01110: data file 1: '/oradata/oracle/ts/system01.dbf'
    ORA-01112: media recovery not started
  • Open database
    SQL> ALTER DATABASE OPEN RESETLOGS;
    Database altered.
This entry was posted in Backup & Recovery, Troubleshooting and tagged , , , , , , . Bookmark the permalink.

5 Responses to Startup Inconsistent Database

  1. nasree says:

    pak rohmad, database server saya sering mati sendiri (belum tau penyebabnya apa), trus saya ingin mendetect nya secara otomatis.Misalkan kita buat script yang akan mendetect db yg mati tiba2 dan kemudian melakukan backup dan menaikkan kembali db tersebut. Saya belum nemu syntax atau cara utk mendetect dan menjalankan script tsb spy automatically run ketika db down. Bisa dijelaskan pak?
    terima kasih byk

  2. iwan says:

    Pak saya butuh pencerahan. Saya dapat link ini, kebetulan saya ada msalah dengan standby server dan mirip dengan kasus diatas. awalnya krn ada gap sequence. Tetapi saya sudah coba step lain. Saya pakai panduan dengan Work Around diatas. hasilnya saat SQL>recover database until cancel,muncul error: ORA–00283 dan ORA-01610; . shingga saya coba SQL> recover STANDBY database until cancel; hasilnya mirip dengan di link ini kemudian SQL> ALTER DATABASE OPEN RESETLOGS; muncul error ORA-1666: Controlfile is for a standby database, Apa yg harus saya lakukan untuk kasus seperti ini. (terima kasih atas bantuannya

  3. joe says:

    ko’ tetep g isa ya maz..

  4. DEVI says:

    pak,saya sudah melakukan urutan seperti diatas,akan tetapi ketika
    SQL> recover database until cancel;
    ORA-00283: recovery session canceled due to errors
    ORA-01610: recovery using the BACKUP CONTROLFILE option must be done

  5. piyon says:

    Pak, saat ini saya sedang menangani trouble Oracle dimana database tidak mau membaca update database terbaru. Erorrnya adalah
    “erorr 01017”. sepertinya sih eror user name dan password.
    Bagaimana caranya jika kita tidak tahu user name dan pasword dari erorr diatas. Sebelumnya saya teknisi baru dari sistem ini berada, jadi gak tahu user name dan paswordnya, adakah solusi lain???

Leave a Reply

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