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:

  1. Physical standby database.
    Archived log diapply secara konvensional (by block per block), sebagaimana kalau kita melakukan recovery database dengan archived log.
  2. 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:

  1. Nama instance dan database: ts
  2. Versi database: Oracle Database 10g Enterprise Edition Release 2
  3. 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.

  1. Apply FORCE LOGGING
    SQL> ALTER DATABASE FORCE LOGGING;
  2. Database harus sudah archived log
  3. 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
  4. 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′
  5. 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

  1. 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'
  2. 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.
  3. 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>
  4. Buat Oracle Net Service Name (TNS Names), sama persis seperti di primary database, yaitu tsprimary dan tsstandby
  5. 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)

This entry was posted in Dataguard and tagged , , , , , . Bookmark the permalink.

12 Responses to Dataguard 10g: Membuat Physical Standby DB (1)

  1. andes says:

    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

  2. rohmadne says:

    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;

  3. Qq says:

    Alo pak rohmad…
    maw tanya ni..

    Jika saya ingin buat standby db system pada 2 komputer di lab untuk Tugas Akhir, akan tetapi komputer2 tersebut masih dipakai lab untuk kegiatan praktikum (beda OSnya dengan OS tmpat oracle saya), sehingga sering direstart..
    Kira2 apa akibatnya utk primary db dan standby dbnya?
    Apa stelah standby system saya sudah beres,kemudian dipakai praktikum (direstart lagi), standby system saya akan rusak?

    Jika iya, ada usul utk penanganan hal tsb?
    (apa dgn deep freeze)?

    Satu lagi…
    Pak rohmad ga buat stndby log file ya?
    sebab saya ingin menerapkan ketiga data protection mode pada Tugas Akhir saya..

    Sekian terima kasih..mohon balasannya ya pak..=)
    Thx

  4. rohmadne says:

    Hallo rekan Qq.
    Kalo standby dimatikan, gak pa-pa kok. Setelah standby nyala lagi, sinkronkan (apply) archived log yang ketinggalan.

    Di artikel ini saya tidak membuat standby logfile. Artikel ini membahas dari tingkat basic-nya saja. Kalo ingin membuat standby logfile, silahkan baca Oracle documentation 🙂

  5. Qq says:

    Ok pak rohmad..
    makasi banyak ya..^^

    oia..
    saya maw nanya lagi pak bbrp hal..
    maap mrepotkan..hehe

    1. saya sudah berhasil membuat standby db system di lab, akan tetapi pernah ketika saya mencoba sintaks Insert pada suatu tabel di primary db, di standby Db-nya ketika saya sudah lihat dalam mode read only, record tsb tdk tercipta pak..
    padahal archived redo lognya sudah terapply dan sama antara primary dan standby, serta saya sudah buat pula dalam real time…
    Ada pendapat ttg hal tsb pak??

    2. ttg ORA-01093: ALTER DATABASE CLOSE only permitted with no sessions…
    saya pnah mengalami error ini ketika saya mencoba meng-close standby database (saya mencoba mengubah standby db dr open mode menjadi managed recovery lagi)..
    meskipun hal itu bisa diatasi dgn shutdown immediate, tapi error itu msh srg tjd..oleh krn itu saya pnasaran..hehehe..=p
    Kira2 itu knapa ya pak?

    3. Yg trakhir ttg error ORA-01665: control file is not a standby control file..
    berhubungan dgn kejadian diatas, sehabis saya shutdown immediate dan mencoba startup nomount dan alter databse mount standby database..error tsb muncul…
    meski pnyelesaiannya dgn startup dr pfile lagi (pfile yg dibuat dari primary db utk standby db ketka pembuatan standby system) akan tetapi sama spt diatas, jika saya ubah standby db dari mode read only ke managed recovery, mk eror itu kadang muncul stelah saya bbrp kali ubah mode tsb..

    boleh tahu kenapa 2 error itu bs tjd pak..^^

    mhon dijawab ya pak..
    Sgala feedback/masukan akan sgt berguna skali buat saya..hehe..=)

    Thx pak rohmad..

  6. Qq says:

    Alo pak rohmad..

    Alhamdulillah..saya sudah berhasil memecahkan pertanyaan saya yg no.2 dan no.3..=)

    Yg no.1 menurut dugaan saya krn masalah data protection mode (default oracle Max performance) jadi belum langsung terapply di stndbynya..
    Apa bnr bgitu pak?

    Lalu saya ada pertanyaan tambahan pak…
    Begini..
    saya menggunakan DG Broker utk pengoperasian standby db-nya..
    nah tetapi ketika penggantian data protection mode atau switchover tjd error pak…
    Ini tampilannya..

    =====================
    DGMGRL> edit configuration set protection mode as maxavailability;

    Operation requires shutdown of instance “orclta” on database “orclTA”
    Shutting down instance “orclta”…
    Database closed.
    Database dismounted.
    ORACLE instance shut down.
    Operation requires shutdown of instance “orclta” on database “orclTA”
    Starting instance “orclta”…
    Unable to connect to database
    ORA-12514: tns:listener does not currently know of service requested in connect descriptor

    Failed.
    You are no longer connected to ORACLE
    Please connect again.
    Unable to start instance “orclta”
    You must start instance “orclta” manually
    =========================
    Kira2 apa yg slah ya pak?
    Mohon bantuannya ya pak?
    =)

    Thx banget..^^

  7. Qq says:

    aLo bpk rohmad..
    ^^

    Sya sdh berhasil mmecahkan mslh diatas..
    akan tetapi menemui mslh lg..

    ketika saya melakukan switchover,terjadi error spt ini pak..
    pdhl saya sudah memperbaharui isi listener.ora dgn mengubah Global DB_name-nya…

    Kira2 saya slh dmn ya pak?
    Saya sgt mohon respon dr bpk demi selesainya tugas akhir saya..
    Segala masukan akan sangat membantu sekali dan saya akan sgt berterimakasih utk itu..=)
    trimakasih pak…

    oia saya memakai 10g R2…
    berikut file listener.ora saya di primary…
    ==============================================
    SID_LIST_LISTENER =
    (SID_LIST =

    (SID_DESC =
    (SID_NAME = PLSExtProc)
    (ORACLE_HOME = E:\oracle\product\10.2.0\db_1)
    (PROGRAM = extproc)
    )

    (SID_DESC =
    (SID_NAME = orclTA)
    (ORACLE_HOME = E:\oracle\product\10.2.0\db_1)
    (PROGRAM = orclTA)
    )

    (SID_DESC =
    (SID_NAME = orclTA)
    (GLOBAL_DBNAME = orclTA_DGMRL)
    (ORACLE_HOME = E:\oracle\product\10.2.0\db_1)
    )
    )

    LISTENER =
    (DESCRIPTION_LIST =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.14.13.17)(PORT = 1521))
    )
    )
    =======================================================

    berikut pesan eror di DG Brokernya…
    =========================================
    DGMGRL> switchover to ‘orclQQ’;
    Performing switchover NOW, please wait…
    Operation requires shutdown of instance “orclta” on database “orclTA”
    Shutting down instance “orclta”…
    ORA-01109: database not open

    Database dismounted.
    ORACLE instance shut down.
    Operation requires shutdown of instance “orclta” on database “orclQQ”
    Shutting down instance “orclta”…
    ORA-01109: database not open

    Database dismounted.
    ORACLE instance shut down.
    Operation requires startup of instance “orclta” on database “orclTA”
    Starting instance “orclta”…
    ORACLE instance started.
    Database mounted.
    Operation requires startup of instance “orclta” on database “orclQQ”
    Starting instance “orclta”…
    Unable to connect to database
    ORA-12514: TNS:listener does not currently know of service requested in connect
    descriptor

    Failed.
    You are no longer connected to ORACLE
    Please connect again.
    Unable to start instance “orclta”
    You must start instance “orclta” manually
    Switchover succeeded, new primary is “orclQQ”
    ===========================================

    Mohon responnya ya pak..
    trimakasih,..^^

  8. Defry says:

    Dear pak rohmad,

    Mohon penjelasan tentang perbedaan antara db_name dengan db_unique_name

  9. WAHYU says:

    Pak saya mau tanya bila instance db saya terlanjur online dan open apakah saat ALTER SYSTEM SET LOG_ARCHIVE_DEST_2=’SERVICE=PRIMS’ harus restart instance;

  10. Sugianto says:

    Apa kabar mas rohmad? masih ingatkan sama diriku? …

    Mas, tanya dong….
    Apakah bisa kita implementasi Oracle Dataguard dengan beda OS, misal di primary menggunakan Solaris sedangkan utk standby nya menggunakan AIX…dan Database nya Oracle 10g.

    Makasih mas

  11. ali shodikin says:

    salam hangat pak rohmat, bagaiaman langkah2 membuat Dataguard untuk oracle 11g, apakah harus menggunakan database entrepise edition ?

Leave a Reply

Your email address will not be published. Required fields are marked *