Karena masalah jaringan, beberapa waktu yang lalu archived log di primary database tidak terkirim ke standby database (hal seperti ini sering saya alami). Kadang-kadang karena kesibukan, saya tahunya setelah beberapa hari, jadi mesti mengejar untuk apply archived log yang tertinggal itu.
Policy saya, archived log di production saya compress (zip), backup ke tape, dan hapus setiap hari. Archived log di-keep di backup sehingga tidak banyak memakai banyak space di production (primary).
Jadi, mau gak mau saya mesti me-restore backup archived log untuk di-apply di mesin standby:
- Restore archived log ke mesin standby
- Uncompress archived log (yang di-compress sebelum backup)
- Register: ALTER DATABASE REGISTER LOGFILE ‘…’;
- Recover : alter database recover managed standby database;
Kadang-kadang recover gagal karena archived log corrupt.
ORA-00308: cannot open archived log '/.../_30383.arc'
ORA-27046: file size is not a multiple of logical block size
Recovery interrupted!
Kalau begitu biasanya archived log (sequence 30383) tersebut saya coba restore dan recovery ulang. Sering berhasil. Kadang juga masih tidak bisa. Gimana dong? Ada dua solusi:
- Recreate standby database lagi
- Recover dengan RMAN
Recreate standby database lagi, wah… perlu effort yang besar. Akhirnya saya pilih option kedua, recover dengan RMAN. Berikut ini step-step Recovery dengan RMAN
- Di standby database, lihat SCN (system change number) terakhir
SQL> col CURRENT_SCN for 9999999999999999999
SQL> select current_scn from v$database;
Misalkan saya dapatkan current SCN 2254678976792 - Di primary, lakukan incremental backup sejak sequence 2254678976792. Backup bisa dilakukan di disk ataupun tape. Dalam dontoh ini, backup ke disk.
mkdir /tmp/rman_bkup
rman target /
RMAN> BACKUP DEVICE TYPE DISK INCREMENTAL FROM SCN
2254678976792 DATABASE FORMAT '/tmp/rman_bkup/bkup_%U'; - Restore hasil backup ke mesin standby. Dalam contoh ini saya restore ke /tmp/restore_rman/. Kemudian jalankan RMAN di standby
rman target /
RMAN> CATALOG START WITH '/tmp/restore_rman/'; - Kemudian jalankan recover di standby database
RMAN> RECOVER DATABASE NOREDO;
Kadang error seperti ini
ORA-01219: database not open: queries allowed on fixed tables/views only
Solusinya, restart database, dan jalankan RMAN lagi
SQL> shutdown immediate
SQL> startup mount
RMAN> exit
rman target /
RMAN> RECOVER DATABASE NOREDO; - Sampai di sini, database standby sudah sinkron dengan primary, jadi archived log sequence 30383 sudah tidak dibutuhkan lagi. Namun, tampaknya standby database masih butuh archived log sequence 30383 tersebut ketika saya menjalan recover standby database seperti biasa:
SQL> alter database recover managed standby database;
ORA-00308: cannot open archived log '/.../_30383.arc'
ORA-27046: file size is not a multiple of logical block size
Recovery interrupted! - Ya… ternyata standby control file harus dicreate ulang
Di database primary, buat standby control file
SQL> alter database create
standby controlfile as '/tmp/standby.ctl';
Copy contol file /tmp/standby.ctl ke mesin standby.
Shutdown standby database.
Delete (rename) control file yang lama, dan ganti dengan standby control file yang baru dibuat tersebut:
mv control01.ctl control01.ctl.bak
Kemudian startup dan kembali recover
mv control02.ctl control02.ctl.bak
mv control03.ctl control03.ctl.bak
cp -rp standby.ctl control01.ctl
cp -rp standby.ctl control02.ctl
cp -rp standby.ctl control03.ctl
SQL> startup mount
SQL> alter database recover managed standby database; - OO… Berhasil
Referensi:
Oracle® Database Backup and Recovery Advanced User’s Guide
10g Release 2 (10.2)
Halo Mas, mau tanya, di step ke 6, tau darimana kalo controlfile nya yang rusak juga?
thank you
kalo masih pake 10g release 1 gimana solusinya ?
selain upgrade ke release 2 ?