Senin, 26 Desember 2011

Restore dari Offline Backup

Berikut ini step-step restore dengan memakai instance yang sama.

  1. Siapkan file-file yang akan direstore File-file tersebut adalah control, log, data, dan temp file
  2. Pastikan instance sudah mati

SQL> shutdown immediate;

  1. Restore file-file backup ke directory asalnya

$ cp /backup/ts/control01.ctl /oradata/ts/control01.ctl

$ cp /backup/ts/control02.ctl /oradata/ts/control02.ctl

$ cp /backup/ts/control03.ctl /oradata/ts/control03.ctl

$ cp /backup/ts/redo04.log /oradata/ts/redo04.log

$ cp /backup/ts/redo05.log /oradata/ts/redo05.log

$ cp /backup/ts/redo06.log /oradata/ts/redo06.log

$ cp /backup/ts/sysaux01.dbf /oradata/ts/sysaux01.dbf

$ cp /backup/ts/system01.dbf /oradata/ts/system01.dbf

$ cp /backup/ts/temp01.dbf /oradata/ts/temp01.dbf

$ cp /backup/ts/undotbs01.dbf /oradata/ts/undotbs01.dbf

$ cp /backup/ts/users01.dbf /oradata/ts/users01.dbf

  1. Nyalakan databaseSQL> startup;

Jika karena suatu hal, tidak bisa dilakukan restore ke direktori asalnya, maka bisa dilakukan restore ke tempat (direktori) lain. Step 1 dan 2 masih seperti yang di atas. Step 3 dan seterusnya adalah berikut ini:

1. Siapkan file-file yang akan direstore File-file tersebut adalah control, log, data, dan temp file

2. Pastikan instance sudah mati

SQL> shutdown immediate;

  1. Restore ke directory baru Control file

$ cp /backup/ts/control01.ctl /newdir/ts/control01.ctl

$ cp /backup/ts/control02.ctl /newdir/ts/control02.ctl

$ cp /backup/ts/control03.ctl /newdir/ts/control03.ctlLog file

$ cp /backup/ts/redo04.log /newdir/ts/redo04.log

$ cp /backup/ts/redo05.log /newdir/ts/redo05.log

$ cp /backup/ts/redo06.log /newdir/ts/redo06.logData file

$ cp /backup/ts/sysaux01.dbf /newdir/ts/sysaux01.dbf

$ cp /backup/ts/system01.dbf /newdir/ts/system01.dbf

$ cp /backup/ts/undotbs01.dbf /newdir/ts/undotbs01.dbf

$ cp /backup/ts/users01.dbf /newdir/ts/users01.dbfTemp file

$ cp /backup/ts/temp01.dbf /newdir/ts/temp01.dbf

  1. Ubah konfigurasi control file. Edit init (instance parameter) file.

Filenya di $ORACLE_HOME/dbs/init[NAMAINSTANCE].ora

Ganti lokasi control file dari yang lama ke yang baru.

Value yang lama:

control_files='/oradata/ts/control01.ctl', '/oradata/ts/control02.ctl','/oradata/ts/control03.ctl'Value yang baru:

control_files='/newdir/ts/control01.ctl', '/newdir/ts/control02.ctl','/newdir/ts/control03.ctl'

  1. Ubah konfigurasi file yang lainnya (log, data, dan temp file)
    SQL> startup mountSQL> alter database rename file '/oradata/ts/redo04.log' to '/newdir/ts/redo04.log';
    SQL> alter database rename file '/oradata/ts/sysaux01.dbf' to '/newdir/ts/sysaux01.dbf';
    SQL> alter database rename file '/oradata/ts/temp01.dbf' to '/newdir/ts/temp01.dbf';
    dan seterusnya ...
  2. Open database

SQL> alter database open;

Error yang terkait

  1. Jika control file tidak ada, atau ada tapi direktorinya berubah dan init file belum diedit

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

ORA-00205: error in identifying control file, check alert log for more info

  1. Jika ada data file yang kelewatan, atau ada tapi direktorinya berubah dan belum di-alter/rename
    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-01157: cannot identify/lock data file 4 - see DBWR trace file

ORA-01110: data file 4: '/oradata/ts/users01.dbf'

Offline Backup Oracle Database

Ada dua metode untuk membackup database Oracle, yaitu off line dan online. Off line backup dilakukan dengan mematikan database terlebih dahulu, baru kemudian membackup datafile. Online backup dilakukan tanpa mematikan database, jadi database masih bisa diakses selama proses backup.

Online backup mensyaratkan database berada dalam mode archive log. Nanti akan saya bahas di artikel lain. Kali ini saya akan membahas tentang off line backup.

Berikut ini step-step untuk off line backup:

1. lihat daftar file oracle

(datafile, logfile, dan control file). Gunakan query berikut ini untuk melihat semua file

SQL> select name as file_name from (select name from v$tempfile union select name from v$datafile union select name from v$controlfile union select member as name from v$logfile) order by file_name;

2. Matikan database

SQL> shutdown immediate;

3. Backup file-file database (datafile, logfile, dan control file)
$ cp /oradata/ts/control01.ctl /backup/ts/control01.ctl

$ cp /oradata/ts/control02.ctl /backup/ts/control02.ctl

$ cp /oradata/ts/control03.ctl /backup/ts/control03.ctl

$ cp /oradata/ts/redo04.log /backup/ts/redo04.log

$ cp /oradata/ts/redo05.log /backup/ts/redo05.log

$ cp /oradata/ts/redo06.log /backup/ts/redo06.log

$ cp /oradata/ts/sysaux01.dbf /backup/ts/sysaux01.dbf

$ cp /oradata/ts/system01.dbf /backup/ts/system01.dbf

$ cp /oradata/ts/temp01.dbf /backup/ts/temp01.dbf

$ cp /oradata/ts/undotbs01.dbf /backup/ts/undotbs01.dbf

$ cp /oradata/ts/users01.dbf /backup/ts/users01.dbf

4. Nyalakan database

SQL> startup;

Restore dan Recovery dari Online Backup

Restore dari online backup adalah sama persis dengan restore dari offline backup, kecuali ada 1 tambahan step setelah melakukan restore dari online backup, yaitu kita WAJIB melakukan recovery.

Ringkasan restore dari offline backup:

1. SQL> shutdown immediate

2. Lakukan restore semua file-file yang bersangkutan

3. SQL> startup

Sedangkan untuk restore dan recovery dari online backup adalah sbb:

1. SQL> shutdown immediate

2. Lakukan restore semua file-file yang bersangkutan Restore juga archived lognya

3. SQL> startup mount

4. SQL> recover database using BACKUP CONTROLFILE;Nanti akan diminta memasukkan archive log. Bila archived log sudah di-restore ke lokasinya, pilih AUTO. Setelah semua archived log di-apply, dan database masih minta archived log lagi, pilih CANCEL.

5. SQL> alter database open resetlogs;

Catatan-catatan:

1. Bila file-file (data, control, dan log file) direstore ke tempat yang berbeda dari aslinya, lakukan step-step untuk mengubah konfigurasi file-file tersebut seperti yang sudah di bahas di “Restore dari offline backup”.

2. Ingat, control file yang digunakan untuk menaikkan restored database adalah control file hasil dari “alter database backup controlfile to ‘/backupdir/backupcontrol_22042008.bak’;”

Oracle Database Online Backup

Beberapa keuntungan metode online backup adalah :

  1. Waktu backup, database tidak perlu dimatikan sehingga tidak ada downtime
  2. Bisa melakukan backup per tablespace, bahkan per datafile
  3. Bisa merestore data sampai terakhir sebelum masalah. Bahkan bisa merestore data sampai waktu yang ditentukan. Berbeda dengan restore hasil offline backup di mana yang bisa direstore hanya data terakhir melakukan backup saja.

Seperti yang sudah pernah dibahas, syarat online backup adalah database harus dalam mode archivelog..

Berikut ini step-step online backup.

  1. Backup control file

SQL> alter database backup controlfile to '/backupdir/backupcontrol_22042008.bak';

  1. Lihat Tablespace yang berisi data

SQL> select TABLESPACE_NAME from dba_tablespaces where CONTENTS <>'TEMPORARY';
TABLESPACE_NAME
------------------------------
SYSTEM
UNDOTBS1
SYSAUX
USERS
Temporary tablespace tidak perlu dibackup, karena bukan berisi data

  1. Ubah mode tablespace menjadi backup mode

SQL> alter tablespace SYSTEM begin backup;

SQL> alter tablespace UNDOTBS1 begin backup;

SQL> alter tablespace SYSAUX begin backup;

SQL> alter tablespace USERS begin backup;

  1. Lihat semua datafile yang perlu dibackup (selain file dari temporary tablespace)

SQL> select name from v$datafile;

NAME
---------------------------------------
/oradata/oracle/ts/system01.dbf
/oradata/oracle/ts/undotbs01.dbf
/oradata/oracle/ts/sysaux01.dbf
/oradata/oracle/ts/users01.dbf

  1. Backup datafile

$ cp /oradata/oracle/ts/system01.dbf /backupdir/...

$ cp /oradata/oracle/ts/undotbs01.dbf /backupdir/..

$ cp /oradata/oracle/ts/sysaux01.dbf /backupdir/...

$ cp /oradata/oracle/ts/users01.dbf /backupdir/..

  1. Ubah mode database kembali ke normal

SQL> alter tablespace SYSTEM end backup;

SQL> alter tablespace UNDOTBS1 end backup;

SQL> alter tablespace SYSAUX end backup;

SQL> alter tablespace USERS end backup;

  1. Archive current log

SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;

  1. Jangan lupa, backup juga archived log-nya. Archived log ini nanti kita butuhkan untuk recovery. Archive log yang masih dipakai adalah archived log sejak terakhir online (hot) backup. Archive log sebelum hot backup sudah tidak dipakai lagi.

Kesimpulannya, yang dibackup adalah:

1. Control file

2. Datafile

3. Archived log file

Setting Database Archivelog Mode

Di database Oracle, semua transaksi di-record (disimpan) di dalam log file. Dalam 1 instance, minimal ada 2 group logfile. Mekanisme kerjanya adalah sirkular. Bila logfile penuh, maka transaksi disimpan di log berikutnya. Setelah semua log terisi, maka log yang terlama akan ditulis ulang (rewrite), tentu saja dengan menghapus content (isi) sebelumnya. Tentu saja, hal ini akan membuat kehilangan jejak transaksi yang ada di logfile tersebut.

Dalam database dengan mode archivelog, sebelum logfile ditulis ulang, content-nya dicopy (backup) dulu ke archived log. Oleh karena itu jejak transaksi yang disimpan di log yang ditulis ulang dan tidak akan hilang.

Archived log digunakan untuk recovery database. Bila dilakukan proses restore dari hasil offline backup, maka data yang bisa diambil adalah data ketika off line backup dilakukan. Jadi, seandainya full backup dilakukan sebulan yang lalu, maka data yang bisa diselamatkan (diambil) adalah data sebulan yang lalu tersebut.

Berbeda dengan jika me-restore dari hasil online backup. Setelah file backup di-restore, kemudian archived log yang terbentuk setelah online backup (yang berisi rekaman transaksi itu) di-apply kembali (istilahnya recovery). Sehingga bisa mendapatkan data sampai archived log terakhir, atau sesaat sebelum terjadi bencana (kerusakan database).

Untuk melihat apakah database sudah dalam mode archivelog atau tidak
SQL> archive log list
Database log mode No Archive Mode Automatic archival Disabled Archive destination /oradata/oracle/ts/arc

Oldest online log sequence 56 Next log sequence to archive 58 Current log sequence 58

Dalam contoh di atas, mode database masih belum archivelog. Untuk mengaktifkan mode archivelog, jalankan command berikut:

SQL> shutdown immediate

SQL> startup mount

SQL> alter database archivelog;

SQL> alter database open;

Lihat, sekarang mode database sudah archivelog

SQL> archive log list

Database log mode Archive Mode Automatic archival Enabled Archive destination /oradata/oracle/ts/arc

Oldest online log sequence 56 Next log sequence to archive 58 Current log sequence 58

Catatan:

Perintah “alter database archivelog” adalah untuk membuat mode database menjadi ARCHIVELOG. Untuk meng-archive log file dilakukan dua cara:

1. Manual

2. otomatis

Pilihan manual adalah jarang terjadi, kecuali untuk tujuan tertentu, misalnya belajar. Semua database production selalu memilih yang otomatis.

Untuk mengotomatiskan pekerjaan archive, init parameter log_archive_start harus TRUE. Jadi harus mengaktifkan parameter tersebut di file init.

Saya menggunakan database 10g release 2 (10.2.0). Parameter log_archive_start tidak perlu saya setting, alias bernilai false, tapi archive jalan otomatis. Kayaknya di versi 10g parameter ini dah gak dibutuhkan lagi, saya belum explore lebih jauh.

Yang pasti, database 10g saya archive-nya jalan otomatis tanpa mensetting parameter log_archive_start.