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
Selamat datang untuk berbagi IT
Selamat datang untuk berbagi IT.
Kamis, 23 Juli 2020
Latihan 05
By Dimas dimz Juli 23, 2020
Latihan 06
By Dimas dimz Juli 23, 2020
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
By Dimas dimz Juli 23, 2020
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
By Dimas dimz Juli 23, 2020
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
By Dimas dimz Juli 23, 2020
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
By Dimas dimz Juli 23, 2020
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
By Dimas dimz Januari 23, 2020
Install Nexus Repository manager
Anda membutuhuhkan JDK
Buatlah folder untuk menampung aplikasi nexus
Download nexus repository manager di https://help.sonatype.com/repomanager3/download
Extract ke dalam folder app
Buatlah user nexus dan beri akses sebagai sudoers
Ubah pemilik hasil ekstraksi file nexus ke user nexus
Buka file parameter nexus
Mendaftarkan nexus sebagai service
Coba jalankan nexus
Jangan lupa untuk membuka port 8081, sehingga anda dapat mengakses ke http://<<ip>>:8081
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
By Dimas dimz Januari 22, 2020
Satis
satis merupakan fitur dari composer untuk generate statis repository. Seperti packagist dengan bentuk yang lebih sederhana. Kemudahan dari satis ini adalah
satis merupakan fitur dari composer untuk generate statis repository. Seperti packagist dengan bentuk yang lebih sederhana. Kemudahan dari satis ini adalah
- Menghindari download package secara berulang dilingkungan pengembangan yang sama
- Menghindari perbedaan versi package
- 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
By Dimas dimz Januari 22, 2020
Pertama, Persiapkan dahulu repository nexus anda, semisal spesifikasi seperti berikut :
Selanjutnya, testing menggunakan composer.json. Buatlah suatu folder dengan diisikan composer.json seperti berikut ini.
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
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
Sehingga ketika anda menjalankan perintah "composer require", otomatis akan diarahkan di package repository local anda.
Sekian.
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
By Dimas dimz Januari 15, 2020
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
By Dimas dimz Januari 15, 2020
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





