Kamis, 23 Juli 2020

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