Kamis, 23 Juli 2020

Latihan 04

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