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 parameterundo_management
danundo_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 #42Specify 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.
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
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
ko’ tetep g isa ya maz..
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
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???