04. Backup & Recovery
Teori :
A. script linux
- Untuk mengetahui apakah oracle sudah running atau belum
ps -fu oracle | grep $ORACLE_SID
Artinya output perintah ps -fu oracle akan digunakan sebagai input perintah grep $ORACLE_SID
output dari grep $ORACLE_SID hanya menampilkan string yang mengandung $ORACLE_SID , dalam hal ini ora121 :
[oracle@oravbox bkup]$ ps -fu oracle | grep $ORACLE_SID
oracle 7661 1 0 09:27 ? 00:00:00 ora_pmon_ora121
oracle 7663 1 0 09:27 ? 00:00:00 ora_psp0_ora121
oracle 7665 1 1 09:27 ? 00:00:52 ora_vktm_ora121
oracle 7669 1 0 09:27 ? 00:00:00 ora_gen0_ora121
oracle 7671 1 0 09:27 ? 00:00:00 ora_mman_ora121
......
oracle 8302 1 0 09:40 ? 00:00:08 oracleora121 (LOCAL=NO)
oracle 9155 1 0 10:19 ? 00:00:00 ora_j000_ora121
oracle 9157 1 0 10:19 ? 00:00:00 ora_j001_ora121
oracle 9167 8353 0 10:19 pts/0 00:00:00 grep ora121
- command awk bisa digunakan untuk memilih field yang diinginkan sesuai delimiter.
Dari output di atas bila kita hanya menginkan field yang mengandung "_"
contoh perintah :
awk -F '_' '{print $3}'
perintah ini akan membaca dan print input yang mengadung "_" yaitu
ora_pmon_ora121
ora_psp0_ora121
ora_vktm_ora121
....
dan print hanya bagian 3 sesuai delimiter jadi :
ora121
ora121
ora121
.....
- perintah grep -c $ORACLE_SID akan menghasilkan count dari baris $ORACLE_SID
- Perintah-perintah linux bisa diassign (dimasukkan) ke variable dengan diapit "`" :
cekproses=`ps -fu oracle | grep $ORACLE_SID`
maka perintah ini : echo $cekproses outputnya sama dengan contoh paling atas
B. Oracle
Ada 2 jenis backup di oracle :
1. Logical backup yaitu exp dan expdp
Hanya backup isi dari database sesuai mode backup
Mode logical backup ada 3 yaitu : full database, schema/owner dan tabel
Untuk mode tabel bisa digunakan untuk kondisi tertentu dari tabel yang akan
diexport dengan menggunakan opsi query=
contoh
isi parameter file : /home/oracle/bkup/parexp
tables=thtool,tmtool
query="where to_char(d_calib,'YYYY')='2017'"
jalankan exp sbb :
exp usr01/pwdusr01 file=/home/oracle/bkup/exp_20200701.dmp parfile=/home/oracle/bkup/parexp log=exp_20200701.log
2. Physical backup yaitu cold backup dan hot backup
- cold backup : backup file-file database saat database mati.
Archive mode database noarchive log
- hot backup : backup file-file database saat database running.
Archive mode database harus archive log
3. Cara hot backup
3.1 Siapkan lokasi backup dengan space cukup untuk backup datafile, misal di /home/oracle/bkup
3.2 Ambil max sequence dari online redo log
select thread#, max(sequence#)
from v$log
group by thread#
order by thread#;
3.3 Cari datafile yang akan dibackup dan ukurannya
select tablespace_name, file_name, bytes/(1024*1024) as MB
from dba_data_files
where tablespace_name 'TSLATIH01' ;
TABLESPACE_NAME FILE_NAME MB
-------------------- ---------------------------------------- ----------
TSLATIH01 /oracle/data/ora121/tslatih01.dbf 65
USERS /oracle/data/ora121/users01.dbf 5
3.4 backup dilakukan per tablespace : ( sebagai sysdba )
-- SQL> alter tablespace TSLATIH01 begin backup;
-- SQL> !cp /oracle/data/ora121/tslatih01.dbf /home/oracle/bkup
-- SQL> alter tablespace TSLATIH01 end backup;
-- demikian pula untuk tablespace USERS
Arti dari SQL> !perintah_linux : adalah menjalankan perintah_linux tanpa keluar dari sqlplus
3.5 switch log file agar perubahan data selama backup yang tercatat oleh online redo dimasukkan ke archive log
SQL> alter system archive log current;
3.6 backup control file untuk keperluan recovery
SQL> alter database backup controlfile to '/home/oracle/bkup/controlbk.ctl' reuse;
3.7 backup archive log yang terjadi selama proses backup ( >= max(sequence#) )
-- SQL> select name from V$ARCHIVED_LOG
where sequence# >= ... ; <-- max(sequence#) step 3.2
-- SQL> !cp name /home/oracle/bkup
3.8 step hot backup selesai
======== Latihan04 ==========
1. Buat script untuk mengetaui apakah database sudah running atau belum
Nama script : /home/oracle/script/checkDB.sh
logik dari script :
- aktifkan .bash_profile
- cek apakah ada proses-proses yang mengandung $ORACLE_SID
- Bila jumlah proses =0 maka tampilkan pesan
Jam saat ini : 2020-07-01 11:13:39 Database ora121 is not running
Selain itu tampilkan pesan
Jam saat ini : 2020-07-01 11:17:14 Database ora121 is running and Ready
2. Buat script untuk backup exp
- Nama script /home/oracle/bkup/run_exp.sh
- Tujuan script adalah menjalankan exp seperti pada point B.1
tetapi nama output dmp tanggalnya (20200701) sesuai dengan current date
/home/oracle/bkup/exp_20200701.dmp
/home/oracle/bkup/exp_20200702.dmp dstnya
begitu juga nama log
/home/oracle/bkup/exp_20200701.log
/home/oracle/bkup/exp_20200702.log dstnya
- isi parameter file : /home/oracle/bkup/parexp
tables=thtool,tmtool
query="where to_char(d_calib,'YYYY')='2017'"
3. Buat script untuk hot backup
- Nama /home/oracle/bkup/run_hotbkup.sh
- Isi script :
tablespace yang akan dibackup TSLATIH01 dan USERS
kompile step-step point B.3.2 s/d 3.7 kedalam script
sebelum backup dimulai periksa apakah database
bila belum running proses backup stop dan exit keluarkan pesan
"Backup stop, database not running"
bila db sudah running lanjutkan step berikutnya