Dataguard 10g: Membuat Physical Standby DB (1)
Dataguard adalah solusi HIGH AVAILABILITY dari Oracle. Tujuannya adalah untuk membuat database standby (secondary/tambahan) agar bila sewaktu-waktu database production (primary) mati maka database standby itu bisa menggantikan posisi menjadi production.
Setiap ada perubahan di primary, maka standby segera diupdate, sebisa mungkin diusahakan agar delta (perbedaan data antara primary dan standby) kecil. Mekanisme update standby adalah dengan apply archived log. Archived log dikirim dari primary ke standby, kemudian di apply di standby.
Berdasarkan mekanisme apply archived log, database standby ada dua tipe:
- Physical standby database.
Archived log diapply secara konvensional (by block per block), sebagaimana kalau kita melakukan recovery database dengan archived log. - Logical standby database
Dari Archived log diextract SQL statement-nya, kemudian SQL statement itu di apply
Artikel ini berisi contoh membuat Physical standby database. Dalam contoh ini, struktur directory (untuk semua file Oracle) adalah sama persis antara database primary dan standby. Contoh ini menggunakan environment sebagai berikut:
- Nama instance dan database: ts
- Versi database: Oracle Database 10g Enterprise Edition Release 2
- OS: SunOS 5.10
Secara umum langkah-langkah ini sama untuk semua database 10 Release 2 di Operating System manapun baik Windows maupun Unix (Sun Solaris, IBM AIX, HP UX, Linux, dan lain-lain). Untuk instalasi versi lainnya (8i, 9i, dan 10g) silahkan lihat masing-masing dokumentasinya, caranya tidak berbeda jauh dengan ini.
PERSIAPAN Di PRIMARY DATABASE
Sebelum membuat standby database, persiapkan dulu segala persyaratan (environment) di database primary.
- Apply FORCE LOGGING
SQL> ALTER DATABASE FORCE LOGGING; - Database harus sudah archived log
- Membuat password file
Cek apakah password file sudah ada. Di Windows lokasinya di %ORACLE_HOME%\database, biasanya berformat PWD[namainstance].ora; contoh instance dengan nama DATAKU mempunyai password file PWDdataku.ora. Di UNIX lokasinya di $ORACLE_HOME/dbs, biasanya berformat orapw[namainstance]; contoh instance dengan nama ts mempunyai password file orapwts. Kalau belum ada password file (atau anda ingin membuat ulang), buatlah dengan command orapwd. Ini adalah perintah bawaan Oracle, lokasinya standart yaitu di $ORACLE_HOME/bin. Berikut ini contoh membuat password file:
cd $ORACLE_HOME/dbs
orapwd file=orapwts password=oracle entries=10 force=y - Persiapkan initial parameter (cukup disebut init). Di Windows, init file ada di %ORACLE_HOME%\database\init[namainstance].ora. Di Unix ada di $ORACLE_HOME/dbs/init[namainstance].ora. Berikut ini init file yang berkaitan dengan dataguard (standby database)
- log_file_name_convert = ‘/oradata/oracle/ts/’
- remote_login_passwordfile=’EXCLUSIVE’
- log_archive_config=’DG_CONFIG=(tsprimary,tsstandby)’
- log_archive_dest_1=’LOCATION=/oradata/oracle/ts/arc’
- log_archive_dest_state_1=enable
- log_archive_dest_state_2=enable
- log_archive_format=%s_%t_%r.arc
- fal_client=’tsstandby’
- fal_server=’tsprimary’
- log_archive_dest_2=’service=tsstandby optional LGWR ASYNC NOAFFIRM valid_for=(online_logfiles,primary_role) db_unique_name=ts’
Parameter lainnya biarkan sebagaimana adanya. Sebagai contoh, berikut ini adalah parameter-parameter dari instance yang saya pakai. Tampak settingannya sangat minimalis (banyak memakai nilai default), gak pa-pa, yang penting bisa digunakan untuk contoh.
- audit_file_dest=’/data1/oracle/admin/ts/adump’
- background_dump_dest=’/data1/oracle/admin/ts/bdump’
- core_dump_dest=’/data1/oracle/admin/ts/cdump’
- user_dump_dest=’/data1/oracle/admin/ts/udump’
- control_files=’/oradata/oracle/ts/control01.ctl’, ‘/oradata/oracle/ts/control02.ctl’, ‘/oradata/oracle/ts/control03.ctl’
- compatible=’10.2.0.3.0′
- db_block_size=8192
- db_domain=”
- db_name=’ts’
- pga_aggregate_target=209715200
- sga_target=1610612736
- undo_management=’AUTO’
- undo_tablespace=’UNDOTBS1′
- Buat Oracle Net Service Name (TNS Names), masing-masing untuk primary dan standby database. Bisa dengan netca ,atau langsung menambah entry berikut file $ORACLE_HOME/network/admin/tnsnames.ora:
tsprimary =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.21.106.161)(PORT = 1521))
)
(CONNECT_DATA =
(SID = ts)
)
)tsstandby =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.21.75.200)(PORT = 1521))
)
(CONNECT_DATA =
(SID = ts)
)
)
PERSIAPAN Di STANDBY DATABASE
- Persiapkan init file di %ORACLE_HOME%\database\initts.ora (untuk Windows) atau $ORACLE_HOME/db/initts.ora (di Unix). Isinya sama persis dengan yang di primary, kecuali untuk entry berikut
log_archive_dest_2='service=tsprimary optional LGWR ASYNC NOAFFIRM valid_for=(online_logfiles,primary_role) db_unique_name=ts' - Buat password file. Password harus sama dengan database primary. Jadi, command-nya samakan dengan command untuk membuat password file primary database. Atau cara lain, copy (ftp) password file dari primary.
- Buat service (instance). Ini khusus di Windows, karena di Unix tidak perlu. Gunakan oradim, ini tool standar Oracle.
cd %ORACLE_HOME%\database
oradim -NEW -SID ts
Perintah di atas akan membaca file initts.ora yang telah di buat. Untuk melihat bahwa instance ts sudah ter-create, lihat di tool “Services”-nya Windows, atau coba login dengan SQL PLussqlplus '/ as sysdba'
SQL*Plus: Release 10.2.0.3.0 - Production on Mon Jun 9 13:13:06 2008
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
Enter password:
Connected to an idle instance.
SQL> - Buat Oracle Net Service Name (TNS Names), sama persis seperti di primary database, yaitu tsprimary dan tsstandby
- Buat direktory untuk file-file dump dan database
$ mkdir /data1/oracle/admin/ts/adump
$ mkdir /data1/oracle/admin/ts/bdump
$ mkdir /data1/oracle/admin/ts/cdump
$ mkdir /data1/oracle/admin/ts/udump
$ mkdir /oradata/oracle/ts/
Bersambung ke …
Dataguard 10g: Membuat Physical Standby DB (2)
Referensi:
Oracle® Data Guard Concepts and Administration, 10g Release 2 (10.2)

August 4th, 2008 at 9:02 am
alo pak rohmad, mau tanya. bisa ga pada server standby, user dapat mengakses isi dari database tersebut, mgkn hanya proses select saja. klo bisa, bagusnya menggunakan dataguard yg mana, physical standby db atau logical standby db ?
dan apa kelebihan dari masing2 untuk masalah user masih bisa select pada standby db ?
terima kasih
August 5th, 2008 at 3:07 am
Bisa kok. Bisa menggunakan physical standby (apalagi logical standby. lebih bisa lagi). Pada physical standby, open database read only:
SQL> alter database open read only
Pada kondisi ini, archived log tidak di-apply. Untuk apply lagi, ya mesti dimount dan recover lagi:
SQL> shutdown immediate
SQL> alter database mount;
SQL> recover managed standby database disconnect;