Selamat datang untuk berbagi IT

Selamat datang untuk berbagi IT.

Kamis, 23 Juli 2020

Latihan 05


Latihan Recover tablespace , tabel dan maintain archivelog dengan RMAN


A. Kasus Recover datafile system01.dbf yang didelete/rename saat oracle database running
   Atau dikenal dengan media failure
   
Pastikan datafile system01 sudah ada backup nya  
dan archive log setelah backup sampai yang terbaru masih tersimpan.   

1. Cari lokasi datafile tslatih
   sqlplus / as sysdba
   SQL> select name from v$datafile 
        where name like '%system%';

   NAME
   ------------------------------------
   /oracle/data/ora121/system01.dbf


-- Untuk bisa mendapat kasus recover tablespace 
2. Hapus atau rename datafile /oracle/data/ora121/system01.dbf
   mv  /oracle/data/ora121/system01.dbf /oracle/data/ora121/system01.dbf.old

3. Shutdown database
    
4. restore datafile backup system01.dbf ke /oracle/data/ora121/ dari command line
 
5. Start oracle dengan option mount

8. Ubah status dari datafile system01.dbf ke offline
   SQL> alter database datafile '/oracle/data/ora121/system01.dbf' offline;
  
  Status system01.dbf akan menjadi recover. bisa dilihat dari
  SQL> select name, status from v$datafile
       where name like '%system01%';
  
9. Sekarang recover tablespace dengan perintah berikut :

  SQL> alter database recover automatic tablespace system;

10. Proses recovery akan menggerate nama file-file redo log yang akan digunakan.
   Sekarang status dari tslatih01.dbf di v$datafile berubah dari recover menjadi offline.

11. Step berikutnya adalah open database

12. Agar tablespace system dapat kembali digunakan status harus dirubah jadi online  

13. Proses recovery datafile system01.dbf selesai

========================================

B. Flasback recovery
   Tidak semua kasus kehilangan data perlu direcover dari backup. Oracle memperkenalkan fitur Flashback 
   untuk recoveri dengan cara sederhana.  Flashback Query memungkinkan user untuk mendapatkan kembali datanya 
   pada titik tertentu sekalipun sudah dimodifikasi dan di commit. Sebagian row atau seluruh isi table.
   Latihan ini memperkenalkan fitur flashback dari oracle dan bagaimana cara mempergunakannya. 
   Situasi yang bagaimana fitur flashback ini digunakan?
   Menurut dokumentasi oracle  teknologi flashback dapat memperbaiki kesalahan berikut :
   - Kesalahan DROP TABLE
   - Kesalahan transaksi UPDATE,DELETE atau INSERT
   - Kesalahan job batch atau akibat kesalahan aplikasi
  
   Kerusakan datafile atau kehilangan data akibat media failure tidak dapat dihandle oleh flashback Query, 
   tetapi menggunakan latihan A di atas.
   
   Syarat database untuk Flashback recovery
  -  Database harus dalam mode archivelog
  -  Rencanakan retensi dari undo sesuai kebutuhan, semakin besar retensi semakin besar undo space yang dibutuhkan. 
        default undo retention adalah 900 detik
  -  Enable Automatic undo management yang terdiri dari UNDO_MANAGEMENT, UNDO_TABLESPACE dan UNDO_RETENTION
      periksa dengan query berikut :
      SQL> select name,value from v$parameter
             where name like '%undo%'

--Latihan mengembalikan tabel yang di drop
1. Buat tabel sbb :
   CREATE TABLE TMFLASHBACK AS
   SELECT owner, table_name, tablespace_name
   FROM all_tables
   WHERE 1=2;

2. Isi dengan 3 record sbb
   INSERT INTO TMFLASHBACK VALUES ('A', '111', 'AAA');
   INSERT INTO TMFLASHBACK VALUES ('B', '222', 'BBB');
   INSERT INTO TMFLASHBACK VALUES ('C', '333', 'CCC');
   COMMIT;
        
3. Select * from TMFLASHBACK;
   OWNER TABLE_NAME TABLESPACE_NAME
   ----- ---------- ---------------
   A   111    AAA
  B   222    BBB
   C   333    CCC

4. DROP TABLE TMFLASHBACK;

5. Select * from TMFLASHBACK;
   ORA-00942: table or view does not exist

6. Recover dengan flashback
   FLASHBACK TABLE TMFLASHBACK TO BEFORE DROP;

7. Select * from TMFLASHBACK;
   
   OWNER TABLE_NAME TABLESPACE_NAME
   ----- ---------- ---------------
   A   111    AAA
  B   222    BBB
   C   333    CCC
   
   
==================================== 

C. Monitor dan maintain archive log dengan RMAN
  Archive log harus dimaintain agar disk tempat archiving tidak menjadi full.
  RMAN bisa digunakan untuk backup , delete archive log dan restore archive log
  untuk keperluan recovery.
  
  Beberapa perintah RMAN
  1. Masuk ke target database
     Dari oracle command prompt : rman target /
     RMAN>
  2. Melihat konfigurasi RMAN
     RMAN> show all;
     
  3. Definisikan destinasi backup ke suatu direktori 
     Misal /home/oracle/bkup/ dengan format backup %d_%U artinya : NamaSID_nomorUnik
     RMAN> CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT = '/home/oracle/bkup/%d_%U';
     Hasil konfigurasi bisa dilihat dengan show all;
 
  4. Backup archivelog dengan RMAN
     RMAN> backup archivelog all;
     
  5. Untuk melihat summary hasil backup archivelog 
     RMAN> list backup of archivelog all summary;
     
  6. Untuk melihat file-file archivelog yang ada didalam backup RMAN
     RMAN> list backup of archivelog all;   
     
  7. Untuk melihat file-file archivelog yang ada di direktori archiving.
     RMAN> list archivelog all;
  
  8. Untuk list file archivelog dengan usia > 14 hari
     RMAN> list archivelog all completed before 'sysdate -14';
     
  9. Delete archivelog dengan kondisi usia file lebih lama dari 14 hari
     RMAN> delete force noprompt archivelog all completed before 'sysdate -14';
     
  10. Restore archivelog ke direktori archiving berdasarkan log sequence 50 s/d 60 
      RMAN> restore archivelog from logseq 50 until logseq 60;
      
  11. Memeriksa avaibilitas backup
      RMAN> crosscheck backup;
     
  12. Memeriksa backup yang sudah obsolete
      RMAN> report obsolete;
      
  13. Menghapus backup obsolete
      RMAN> delete obsolete;
        
Latihan :
Gunakan RMAN untuk maintain file archiving di /oracle/data/arch
1. Set destinsasi backup ke /home/oracle/bkup/%d_%U
2. Backup semua archivelog
3. List hasil backup summary dan detil
4. Delete file-file archive yang usianya > 7 hari di /oracle/data/arch dengan menggunakan RMAN  
5. Periksa file archive di /oracle/data/arch, file dengan usia > 7 hari sudah terdelete
6. Restore 1 buah file archivelog dari backup dengan log sequence pilih sendiri dilihat dari nomor 3
   Periksa file archive dengan log sequence tersebut sudah direstore di /oracle/data/arch
 

Latihan 06


Latihan terakhir topik Database Backup and Recovery --------------------------------------------------- A. Kasus semua control file rusak/hilang dan semua archivelog hilang Dalam latihan kali ini, kita akan membuat/create control file baru. Untuk memudahkan kita backup dahulu controlfile ke trace yang outputnya merupakan perintah create controlfile. Bila tidak ada backupnya, maka bisa dibuat manual perintah create controlfile dengan sintaks yang sesuai. Berikut urutan latihan kali ini : 1. Backup controlfile ke trace dan arahkan output ke /home/oracle/bkup SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE AS '/home/oracle/bkup/create_control.sql'; Isi output adalah perintah create controlfile dengan opsi noresetlogs dan resetlogs dan beberapa petunjuk sesuai recover yang akan dilakukan. 2. delete semua archivelog di /oracle/data/arch 3. shutdown database; 4. rename control01.ctl dan control02.ctl 5. startup normal akan error sbb : SQL> startup ORACLE instance started. Total System Global Area 440401920 bytes Fixed Size 2925360 bytes Variable Size 264244432 bytes Database Buffers 167772160 bytes Redo Buffers 5459968 bytes ORA-00205: error in identifying control file, check alert log for more info 6. shutdown dengan opsi abort SQL> shutdown abort ORACLE instance shut down. 7. startup kembali dengan opsi nomount SQL> startup nomount ORACLE instance started. Total System Global Area 440401920 bytes Fixed Size 2925360 bytes Variable Size 264244432 bytes Database Buffers 167772160 bytes Redo Buffers 5459968 bytes 8. Buka terminal/windows lagi, dan buat controlfile baru - Buka backup controlfile /home/oracle/bkup/create_control.sql - copy sebagian isinya pada bagian " Set #2. RESETLOGS case " CREATE CONTROLFILE REUSE DATABASE "ORA121" RESETLOGS ARCHIVELOG MAXLOGFILES 16 MAXLOGMEMBERS 3 MAXDATAFILES 100 MAXINSTANCES 8 MAXLOGHISTORY 292 LOGFILE GROUP 1 '/oracle/data/ora121/redo01.log' SIZE 50M BLOCKSIZE 512, GROUP 2 '/oracle/data/ora121/redo02.log' SIZE 50M BLOCKSIZE 512, GROUP 3 '/oracle/data/ora121/redo03.log' SIZE 50M BLOCKSIZE 512 -- STANDBY LOGFILE DATAFILE '/oracle/data/ora121/system01.dbf', '/oracle/data/ora121/tslatih01.dbf', '/oracle/data/ora121/sysaux01.dbf', '/oracle/data/ora121/undotbs01.dbf', '/oracle/data/ora121/example01.dbf', '/oracle/data/ora121/users01.dbf' CHARACTER SET WE8MSWIN1252 ; Lalu jalankan di sqlplus, maka akan terbentuk 2 buah controlfile yaitu control01.ctl dan control02.ctl di /oracle/data/ora121 9. Pada tahap ini oracle database statusnya sudah mount, lanjutkan proses recover sebagai barikut SQL> RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL; Maka akan ada respon sbb : SQL> RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL; ORA-00279: change 9513837967951 generated at 07/20/2020 09:10:44 needed for thread 1 ORA-00289: suggestion : /oracle/data/arch/1_2_1045995117.dbf ORA-00280: change 9513837967951 for thread 1 is in sequence #2 Specify log: {<RET>=suggested | filename | AUTO | CANCEL} 10. Karena archivelog sudah tidak ada, maka kita akan recover dengan resetlogs Point nomor 9, berikan feedback CANCEL Specify log: {<RET>=suggested | filename | AUTO | CANCEL} cancel Media recovery cancelled. 11. Open database dengan resetlogs SQL> alter database open resetlogs; Database altered. 12. Periksa tablespce SQL> select name from v$tablespace; NAME ------------------------------ SYSTEM TSLATIH01 SYSAUX UNDOTBS1 EXAMPLE USERS TEMP 7 rows selected. 13. Periksa datafile name SQL> select name from v$datafile; NAME --------------------------------------- /oracle/data/ora121/system01.dbf /oracle/data/ora121/tslatih01.dbf /oracle/data/ora121/sysaux01.dbf /oracle/data/ora121/undotbs01.dbf /oracle/data/ora121/example01.dbf /oracle/data/ora121/users01.dbf 6 rows selected. 14. Tambahkan datafile temp, lihat kembali file backup controlfile /home/oracle/bkup/create_control.sql letaknya di bagian paling bawah SQL> ALTER TABLESPACE TEMP ADD TEMPFILE '/oracle/data/ora121/temp01.dbf' SIZE 62914560 REUSE; 15. Recover dengan create controlfile selesai B. Backup PostgreSQL 1. pg_dump Untuk backup satu database postgreSQL dalam format plain text atau dalam format binary/dmp. 1.1 perintah untuk output dalam bentuk plain text adalah: - Backup satu database pg_dump -h hostname/ip -U username -d dbname > dbname.txt - Backup satu/lebih schema pg_dump -h hostname/ip -U username -d -n schemaname1 -n schemaname2 -d dbhris > someschema.txt - Backup beberapa tabel pg_dump -h 10.1.99.71 -U dbapostgres -t schema.tabel1 -t schema.tabel2 -d dbhris > sometables.txt Contoh 1 backup database dbhris server 10.1.99.71 dengan user dbapostgres : pg_dump -h 10.1.99.71 -U dbapostgres -d dbhris > dbhris.txt Contoh 2 backup schema elearn database dbhris : pg_dump -h 10.1.99.71 -U dbapostgres -d dbhris -n elearn -n public > elearn.txt Contoh 3 backup tabel tmmateri schema elearn dan orgtemp schema public pg_dump -h 10.1.99.71 -U dbapostgres -t elearn.tmmateri -t public.orgtemp -d dbhris > anytables.txt 1.2 Perintah untuk output dalam format binary/dmp adalah dengan menambah opsi -F c pada backup di atas - Backup satu database pg_dump -h hostname/ip -F c -U username -d dbname > dbname.dmp - Backup satu/lebih schema pg_dump -h hostname/ip -F c -U username -d -n schemaname1 -n schemaname2 -d dbhris > anyschema.dmp - Backup beberapa tabel pg_dump -h 10.1.99.71 -F c -U dbapostgres -t schema.tabel1 -t schema.tabel2 -d dbhris > anytables.dmp Contoh 1 backup database dbhris server 10.1.99.71 dengan user dbapostgres : pg_dump -h 10.1.99.71 -U dbapostgres -d dbhris -Fc -C > dbhris.dmp Contoh 2 backup schema elearn database dbhris : pg_dump -h 10.1.99.71 -U dbapostgres -d dbhris -n elearn -n public -Fc -C > elearn.dmp Contoh 3 backup tabel tmmateri schema elearn dan orgtemp schema public pg_dump -h 10.1.99.71 -U dbapostgres -t elearn.tmmateri -t public.orgtemp -d dbhris -Fc -C > anytables.dmp 1.3 Script backup Pada point 1.1 dan 1.2 di atas adalah backup dengan interaktif, yang akan meminta password karena setting di server 10.1.99.71. Asumsi setting server tidak diubah, maka untuk supply password di script backup digunakan environment PGPASSWORD sintaks : PGPASSWORD=password psql atau pg_dump Contoh 1 script list database #!/bin/sh PGHOME=/usr/local/pgsql;export PGHOME PGPATH=$PGHOME/bin;export PGPATH PGSOURCE="-h 10.1.99.71" DBLIST=`PGPASSWORD=dbapo032 $PGPATH/psql -h 10.1.99.71 \ -U dbapostgres -d postgres -q -t \ -c 'SELECT datname from pg_database'` for d in $DBLIST do echo "List database server $PGSOURCE = $d"; done Contoh 2 script list schema dalam satu database #!/bin/sh PGHOME=/usr/local/pgsql;export PGHOME PGPATH=$PGHOME/bin;export PGPATH PGSOURCE="-h 10.1.99.71" BKUPDIR=/home/postgres/bkup;export BKUPDIR DB="dbhris";export DB SCHLIST=`PGPASSWORD=dbapo032 $PGPATH/psql $PGSOURCE \ -U dbapostgres -d $DB -q -t \ -c 'select nspname from pg_catalog.pg_namespace where nspname not like $$pg_%$$ and nspname not like $$i%$$ ;'` for sch in $SCHLIST do echo "schema dalam database $DB = $sch"; done 1.4 Latihan Backup dengan script 1. Buat backup format plain text dan binary/dump untuk database dbhris, hasilnya untuk plain text di dbhris.txt dan untuk binary di dbhris.dmp. Silahkan modifikasi contoh 1 point 1.3 di atas 2. Buat backup format plain text dan binary/dump untuk schema elearn,public dan training database dbhris hasilnya untuk plain test elearn.text, public.text dan training.text, dan untuk binary/dump di elearn.dmp, public.dmp dan training.dmp, silahkan modifikasi contoh 1 point 1.3 di atas 2. pg_dumpall Untuk backup satu server database postgreSQL dalam format plain text. Perintah untuk backup satu server adalah : pg_dumpall -h hostname > dumpall.txt pg_dumpall tidak opsi untuk output binary/dmp 3. Split backup yang ukurannya sangat besar. Split file per 100 MB pg_dump -h 10.1.99.71 -U dbapostgres -d dbhris | split -d -b 100m > dbhrisbk Saat restore untuk menggabungkannya : cat dbhrisbk* > dbhrisbk.txt Split file per 10 MB pg_dump -h 10.1.99.71 -F c -U dbapostgres -d dbhris | split -d -b 10m > dbhrisdmp Saat restore untuk menggabungkan : cat dbhrisdmp* > dbhrisdmp.dmp C. Latihan Restore hasil backup PostgreSQL 1. Restore backup format plain text Restore backup dengan format plain text tidak bisa direstore dengan pg_restore. Gunakan psql untuk restore backup tersebut. Restore backup plain text akan merestore seluruh isi file backup, tidak bisa memilih sebagian saja. Misal backup satu database akan restore satu database tersebut, tidak bisa memilih restore satu schema saja. Sintaks : psql -d dbtarget -U usertarget < file_backup_plain_text Latihan : restore schema elearn hasil backup elearn.txt (point B - 1.1) : psql -d db01 -U postgres < elearn.txt Ada error karena role dbapostgres tidak ada di db01. Owner akan dimiliki oleh role postgres 2. Restore 1 tabel dari binary/dump file Restore backup format binary/dump menggunakan pg_restore. Restore bisa hanya sebagian dari file backup, misal akan restore schema training dari backup database dbhris atau akan restore table elearn.tmmateri Sintaks : pg_restor -d dbtarget -U usertarget -n namaSchema -O -x fileBackup.dmp Latihan : restore schema training dari backup database dbhris.dmp : - Create schema training secara manual dengan psql postgres=# create schema training; - Restore object2 schema training pg_restore -d db01 -U postgres -n training -O -x dbhris.dmp Latihan : restore tabel tmlastpage schema elearn dari backup schema elearn.dmp : - Schema elearn harus sudah ada - Bila schema menggunakan sequence, maka sequence dicreate dahulu - untuk melihat statement create sequence, ekstrak plain text dari backup binary/dump elearn.dmp pg_restore -Fc elearn.dmp > isi_elearndmp - restore tabel tmlastpage dari schema elearn pg_restore -d db01 -n elearn -t tmlastpage -O -x elearn.dmp

Latihan 04 Baru

Pembaruan catatan untuk latihan04 nomor 3

1. #Define SQLDBA sebagai alias dari  sqlplus / as sysdba 

   DBCONN=" / as sysdba"  
   SQLDBA="${ORACLE_HOME}/bin/sqlplus -s ${DBCONN}"

2. Contoh Penggunaannya sbb :
   - $SQLDBA  <<-EOF
       alter system SWITCH LOGFILE;
       exit;
     EOF
   
   - Bila hasil query ingin ditulis ke file archive.lis 

      $SQLDBA > ${BKUPDIR}/archive.lis <<-EOF
      set pages 0
      set lines 80
      set head off
      set echo off
      set verify off
      set feedback off
      column name format a80
      
      select name from v\$archived_log
      where SEQUENCE# >= $maxlog;
      exit;
      EOF
      
      statement set pages, lines, head, echo, verify, feedback adalah agar 
      outputnya hanya isi data saja tanpa kolom judul, break page, feedback
      
   -  Contoh membaca isi file line per line dan copy ke backup direktori
      
      cat $BKUPDIR/archive.lis | while read arch
      do      # awal loop
         cp $arch $BKUPDIR
      done    # end loop 
      

3. Urutan proses hot backup :
   
   - Set environment dan variable 
   - step-01 : Switch log file
   - step-02 : Ambil max sequence dari online redo log ( dari v\$log )
   - step-03 : Create file $BKUPDIR/tablespace.lis  yang berisi list tablespaces yang akan dibackup
   - step-04 : Create file $BKUPDIR/datafile.lis yang berisi list datafiles untuk setiap tablespaces
   - step-05 : Baca file $BKUPDIR/tablespace.lis, loop untuk semua tablespace lalu loop untuk datafile, logik sbb:
               cat $BKUPDIR/tablespace.lis | while read ts
               do    #loop tablespace            
                 cat $BKUPDIR/tablespace.lis | while read df
                   do #loop datafile dari tablespace 
                      - begin backup ts
                      - backup df
                      - end backup ts
                   done
               done
                            
   - step-06 : Backup file-file init, spfile, controlfile
   - step-07 : Switch log file
   - step-07 : Create file ${BKUPDIR}/archive.lis yang berisi list archive selama backup 
               dari v\$archived_log dengan SEQUENCE# >= $maxlog;
   - step-08 : Backup archive log
   - echo "Timestamp : `date` :Hot backup tablespace $DBNAME selesai  "

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
   

Latihan 03

03. Install and Maintain Oracle Database

Teori :

1. Saat linux di start maka ada file yang akan dibaca dan dieksekusi isinya
   yaitu /etc/rc.d/rc.local, hanya root yang bisa update file ini
   
2. Saat install oracle, ada file yang dicreate dengan nama /etc/oratab
   file ini juga dibaca saat linux di start. 

3. Oracle memiliki program untuk start database yaitu dbstart dan 
   untuk stop yaitu dbshut. Program ini berhubungan dengan file /etc/oratab
   
4. Script di redhat linux bisa untuk menjalankan program-program yang telah
   diinstall seperti sqlplus, lsnrctl, dbstart, dbshut, psql, pg_ctl dll
   
5. Contoh script linux untuk menjalankan query sqlplus sbb :
   
   Direktori : /home/oracle/bin
   Nama file : RunSql.sh
   
   #!/bin/sh
   PATH=$PATH:$HOME/bin:/oracle/home/bin
   ORACLE_HOME=/u01/oracle/product/12.1.0/db
   LD_LIBRARY_PATH=/u01/oracle/product/12.1.0/db/lib
   ORACLE_SID=ora121
   export  PATH ORACLE_HOME ORACLE_SID LD_LIBRARY_PATH
   sqlplus /nolog<<EOF
   conn usr01/pwdusr01
   select I_TOOL_MTRLG,D_CALIB, n_tool
   from tmtool
   where n_tool like '%MICRO JACK%';
   EOF
   exit

6. Berikan properti execute dengan chmod
   jalankan dari user oracle : RunSql.sh
   Output spt ini :
   [oracle@oravbox bin]$ RunSQL.sh 

   SQL*Plus: Release 12.1.0.2.0 Production on Thu Jun 25 08:58:05 2020

   Copyright (c) 1982, 2014, Oracle.  All rights reserved.
   
   SQL> Connected.
   SQL>   2    3  
   I_TOOL D_CALIB   N_TOOL
   ------ --------- -------------------------
   140193 19-NOV-99 MICRO JACK
   140192 19-NOV-99 MICRO JACK
   140191 21-JUL-02 MICRO JACK
   140015 19-NOV-99 MICRO JACK
   
   SQL> Disconnected from Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
   With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

7. Untuk menjalankan script milik oracle dari root, gunakan perintah berikut
   /bin/su - oracle -c /home/oracle/bin/RunSql.sh  
   
8. Contoh untuk database postgres :
   /home/postgres/bin/RunPsql.sh
   
   #!/bin/sh
   PGHOME=/usr/local/pgsql;export PGHOME
   PGDATA=$PGHOME/data;export PGDATA
   PATH=$HOME:$PATH:$PGHOME/bin;export PATH
   psql -U usr01 -d db01 -c "select * from tmtest" 
   
   
   [postgres@oravbox bin]$ RunPsql.sh 
   Outputnya :
   
   i_id | n_emp  
   ------+--------
     1  | JAJANG
     2  | BUDI
  (2 rows)


9. Untuk menjalankan script milik postgres dari root, gunakan perintah berikut
   /bin/su - oracle -c /home/postgres/bin/RunSql.sh


=======================================================

Latihan-03

A. Database Oracle

1. Mencoba start oracle dengan program dbstart
   - Setting file /etc/oratab
   - Pastikan listener dan database not running
   - Pastikas variable $ORACLE_HOME sudah di set 
     echo $ORACLE_HOME
     /u01/oracle/product/12.1.0/db
   - Pastikan variable $PATH mengandung $ORACLE_HOME/bin
     echo $PATH
     /u01/oracle/product/12.1.0/db/bin:/usr/lib64/qt-3.3/bin .... dst

2. Jalankan program dbstart
   dbstart $ORACLE_HOME
   outputnya :
   Processing Database instance "ora121": log file /u01/oracle/product/12.1.0/db/startup.log
        
3. Buat file OraStart.sh di /home/oracle/bin
   file tersebut menjalankan program dbstart
   
4. Test OraStart.sh
   - Pastikan listener stop dan database not running
   - jalankan script : 
     cd /home/oracle/bin
     OraStart.sh
   - Output :
     Processing Database instance "ora121": log file /u01/oracle/product/12.1.0/db/startup.log
   - Periksa listener dan database harusnya sudah up

5. Setting oracle listener dan database agar otomatis start saat linux di start / boot   
   dengan memanfaatkan file OraStart.sh

6. Buat file OraShut.sh di /home/oracle/bin
   file tersebut menjalankan program dbshut

7. Test OraShut.sh
   - Pastikan listener dan database running
   - jalankan script : 
     cd /home/oracle/bin
     OraShut.sh
   - Output :
     Processing Database instance "ora121": log file /u01/oracle/product/12.1.0/db/startup.log
   - Periksa listener dan database harusnya sudah down
   
8. Buat crontab di user oracle untuk menjalankan script OraShut.sh pada menit dan jam tertentu 
   (sesuaikan saat akan mencoba)
   
      
B. Database Postgresql

1. Postgres tidak memiliki program semacam dbstart seperti di oracle
   Buat file PgStart.sh di /home/postgres/bin
   file tersebut menjalankan program pg_ctl
   Modifikasi contoh pada bagian teori

2. Test OraStart.sh
   - Pastikan postgres database not running
   - jalankan script : 
     postgres@oravbox bin]$ PgStart.sh 
    [postgres@oravbox bin]$ server starting
    LOG:  database system was shut down at 2020-06-25 10:08:06 WIB
    LOG:  MultiXact member wraparound protections are now enabled
    LOG:  database system is ready to accept connections
    LOG:  autovacuum launcher started
    
    <tekan enter>
   
   - Periksa database harusnya sudah up
   
3. Setting database postgres agar otomatis start saat linux di start / boot   
   dengan memanfaatkan file PgStart.sh    
   

4. Postgres tidak memiliki program semacam dbshut seperti di oracle
   Buat file PgShut.sh di /home/postgres/bin
   file tersebut menjalankan program pg_ctl untuk stop dengan mode immediate

5. Test OraShut.sh
   - Pastikan postgres database running
   - jalankan script : 
     postgres@oravbox bin]$ PgShut.sh 
     
     Output :
   
      [postgres@oravbox bin]$ LOG:  received immediate shutdown request
      WARNING:  terminating connection because of crash of another server process
      DETAIL:  The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory.
      HINT:  In a moment you should be able to reconnect to the database and repeat your command.
      WARNING:  terminating connection because of crash of another server process
      DETAIL:  The postmaster has commanded this server process to roll back the current transaction and exit, because another server process exited abnormally and possibly corrupted shared memory.
      HINT:  In a moment you should be able to reconnect to the database and repeat your command.
      waiting for server to shut down... done
      server stopped


6. Buat crontab di user postgres untuk menjalankan script PgShut.sh pada menit dan jam tertentu 
   (sesuaikan saat akan mencoba)
      

Latihan-02

03. Install and Maintain Oracle Database

1. Setting oracle database menjadi archivelog

 - Periksa status archivelog current database  
   [oracle@oravbox ~]$ sqlplus / as sysdba

  SQL> archive log list
  Database log mode              No Archive Mode
  Automatic archival             Disabled
  Archive destination            USE_DB_RECOVERY_FILE_DEST
  Oldest online log sequence     5
  Current log sequence           7

 - Soal : Buat database sehingga menjadi archive mode spt ini :
  SQL> archive log list
  Database log mode           Archive Mode
  Automatic archival          Enabled
  Archive destination          /oracle/data/arch
  Oldest online log sequence    7
  Next log sequence to archive  9
  Current log sequence         9
  
 - Petunjuk umum :
   1.1. Buat direktori di OS untuk archiving yaitu : /oracle/data/arch
   1.2. set Archive destination ke  /oracle/data/arch  
   1.3. Shutdown database
   1.4. startup mount
   1.5. alter database archivelog;
   1.6. alter database open;

2. Install database postgreSQL versi 9.3.9 
   2.1. Source ada di /source/postgresql-9.3.9
        atau di folder share \\10.10.40.117\03. Install and Maintain Oracle Database
   2.2. Untuk tambah space Hapus folder bekas install database mysql dan postgres 9.4 ( kalau ada ) : 
        /usr/my.cnf,/usr/my-new.cnf,/usr/mysql-cluster.cnf, /usr/pgsql-9.4, /usr/local/pgsql-9.4,/usr/pgsql
   2.3. Step install ada di /source/postgresql-9.3.9/INSTALL
      Step umum untuk install S/W dari source code (bukan rpm atau bin) adalah :
      - masuk ke direktori source code ( /source/postgres-9.3.9 )
      - ./congigure
        Periksa outputnya dan perbaiki bila ada error
      - make
        Periksa outputnya dan perbaiki bila ada error
      - make install
        Periksa outputnya dan perbaiki bila ada error
      - Bila sukses, hasil install ada di /usr/local/pgsql
      
      Langkah berikutnya buat initial database 
    - buat user postgres bila belum ada
    - buat direktori untuk tempat database di /usr/local/pgsql/data
      - ganti owner direktori  /usr/local/pgsql ke postgres
      - su - postgres
      - tambahkan direktori /usr/local/pgsql/bin ke variable $PATH atau di .bash_profile
      - run program initdb dengan opsi -D /usr/local/pgsql/data
      - start database 
      - buat database test
        createdb test
      - test login ke postgres dan database test
        psql test

3. Edit pga_hba.conf agar bisa di konek 
      3.1 hanya dari ip 10.10.x.y dari 10.1.x.y tidak bisa
      2.2 hanya dari ip 10.1.x.y dari 10.10.x.y tidak bisa
      3.3 bisa dikonek dari ip 10.10.x.y dan 10.1.x.y 
          untuk 3.3 Usahakan update hanya satu baris di pg_hba.conf spt berikut :
          host    all             all             10.x.y.z/nn          md5

4. Buat user / role sbb :
   nama user : usr01
   password  : pwdusr01

5. Buat tablespace
   dengan nama : ts01
   owner       : usr01
   lokasi tablespace : /postgres/data

6. Buat database sbb :   
   Nama database : db01
   owner : usr01
   tablespace : ts01

7. test login :
   [postgres@oravbox data]$ psql -U usr01 -d db01
   psql (9.3.9)
   Type "help" for help.

   db01=>    
   
   
 
  
   
   
   

Kamis, 23 Januari 2020

Install Nexus Repository dengan Centos 7.0

Install Nexus Repository manager
Anda membutuhuhkan JDK


sudo yum install java-1.8.0-openjdk.x86_64 -y

Buatlah folder untuk menampung aplikasi nexus


sudo mkdir /app && cd /app


Download nexus repository manager di https://help.sonatype.com/repomanager3/download

Extract ke dalam folder app


sudo tar -xvf nexus-3*.tar.gz
sudo mv nexus-3* nexus

Buatlah user nexus dan beri akses sebagai sudoers


sudo adduser nexus
sudo passwd nexus
sudo usermod -aG wheel nexus

Ubah pemilik hasil ekstraksi file nexus ke user nexus


sudo chown -R nexus:nexus /app/nexus

sudo chown -R nexus:nexus /app/sonatype-work


Buka file parameter nexus

sudo vi  /app/nexus/bin/nexus.rc


run_as_user="nexus"

Mendaftarkan nexus sebagai service
sudo vi /etc/systemd/system/nexus.service


[Unit]

Description=nexus service

After=network.target

 

[Service]

Type=forking

LimitNOFILE=65536

User=nexus

Group=nexus

ExecStart=/app/nexus/bin/nexus start

ExecStop=/app/nexus/bin/nexus stop

User=nexus

Restart=on-abort

 

[Install]

WantedBy=multi-user.target



sudo chkconfig nexus on


Coba jalankan nexus

sudo systemctl start nexus

Jangan lupa untuk membuka port 8081, sehingga anda dapat mengakses ke http://<<ip>>:8081
Gambar awal nexus

Rabu, 22 Januari 2020

Composer Satis

Satis
satis merupakan fitur dari composer untuk generate statis repository. Seperti packagist dengan bentuk yang lebih sederhana. Kemudahan dari satis ini adalah

  1. Menghindari download package secara berulang dilingkungan pengembangan yang sama
  2. Menghindari perbedaan versi package
  3. Dapat menyimpan library khusus untuk perusahaan tanpa ditampilkan ke publik
Cara instalasi satis dengan menggunakan CLI

composer create-project composer/satis --stability=dev --keep-vcs

Setting repository

Selanjutnya anda perlu mengetahui repository apa yang akan disimpan, semisal saya ingin membuat project dari zendframework skeleton maka saya perlu menyiapkan package zendframeworknya dan zend framework zkeletonnya. Pertama buatlah file satis.json didalam directory satis dan isikan


{
  "name":"dimas/repository",
  "homepage":"http://localhost:8888",
  "repositories":[
    {
      "type":"composer",
      "url":"https://repo.packagist.org"
    }
  ],
  "require":{
    "zendframework/zendframework":"^3.0"
  }
}

selanjutnya di folder yang sama build satis.jsonnya

php bin/satis build satis.json web/

Selanjutnya setelah dibuild, jalankan webnya dengan masuk folder web


php -S localhost:8888

Setelah jalan, anda dapat melihat hasil repositorynya.

Catatan: Jika ingin mengupdate satis, dapat langsung ditambahkan di file satis.json nya

Di sisi client

Untuk client yang ingin install zendframework skeleteon:

Pertama download zip file zendframework-skeletonnya:

setelah selesai, unzip dan masuk ke dalam foldernya.

Hapus composer.lock dan edit composer.json

Tambahkan :


{
 "repositories":[
    {
      "type":"composer",
      "url":"http://localhost:8888"
    }
  ],
  "config":{
    "secure-http":false
  }
}

Lalu jalankan 

composer install

Maka akan terinstall folder vendor nya

Selanjutnya anda dapat menambahkan package baru dengan satis

composer require zendframework/zend-db


Pastikan, anda mengecek hasil dari zend-db di composer.json berasal dari local repository

Koneksi Composer Dengan Repository Nexus

Pertama, Persiapkan dahulu repository nexus anda, semisal spesifikasi seperti berikut :


url : http://192.168.56.101:8081
repository : example_repo
username : anonim
password : anonim123

Selanjutnya, testing menggunakan composer.json. Buatlah suatu folder dengan diisikan composer.json seperti berikut ini.


{
 "repositories": [
  {
   "type": "composer",
   "url": "http://192.168.56.101:8081/repository/example_repo/"
  },
  {
   "packagist.org": false
  }
 ],
    "require": {
        "monolog/monolog": "1.0.*"
    },
 "config":{
  "secure-http":false
 }
}

Penjelasan :

Anda perlu memasukkan alaman url repository nexus anda dengan type composer dan menonaktifkan packagist untuk menghindari koneksi langsung ke repository global.
Konfigurasi secure-http diperlukan untuk repository yang masih menggunakan http

Selanjutnya, anda menjalankan perintah "composer update". Maka anda akan diminta untuk memasukkan username dan password repository anda untuk disimpan ke auth.json.

Membuat project dengan nexus

Untuk membuat project zendframework, anda dapat menjalankan perintah ini


composer create-project -n -sdev zendframework/skeleton-application myapp --repository-url=http://anonim:anonim123@192.168.56.101:8081/repository/example_repo/ --no-secure-http

Pada perintah diatas anda akan membuat project dengan menggunakan repository nexus serta penambahan username dan password user repository.

Selesai instalasi, anda perlu merubah composer.json yang ada didalam project. Lalu anda masukkan


{
 "repositories": [
  {
   "type": "composer",
   "url": "http://anonim:anonim123@192.168.56.101:8081/repository/example_repo/"
  },
  {
   "packagist.org": false
  }
 ],
 "config":{
  "secure-http":false
 }
}

Sehingga ketika anda menjalankan perintah "composer require", otomatis akan diarahkan di package repository local anda.

Sekian.

Rabu, 15 Januari 2020

Database Migration Tools

Langkah mudah migrasi tabel dengan menggunakan tools esf database migration toolkit.

Langkah 1 : Install esf seperti biasa

Langkah 2 : Jalankan esf 

Langkah 3 :

Langkah 4 :
Langkah 5
Langkah 6

Selesai, lalu cek databasenya




Fix PHP Header Already Sent

Pada saat diserver,  aplikasi berjalan dengan benar. Aplikasi tersebut berjalan diatas apache dengan php 5.6


Namun, saat dipindahkan ke local terjadi error seperti berikut
Berbagai macam sumber yang didapatkan dapat disimpulkan bahwa error ada pada header untuk redirect ke halaman lain. Dan saya menemukan sumber ini : https://stackoverflow.com/questions/8028957/how-to-fix-headers-already-sent-error-in-php
yang memberikan langkah step by stepnya. Ternyata dapat diselesaikan dengan mengaktifasi output_buffering menjadi ON sesuai dengan manual
Apakah output buffering? Sesuai dengan namanya output buffer, html yang secara defaultnya dikirim kan per bagian ke web server, dengan mengubah ke output buffering html akan ditempatkan dalam sebuah variable dan dikirimkan dalam bentuk 1 bagian saja.

Dan aplikasi berjalan normal di lokal komputer