Transparent Application Failover Oracle Dataguard

Oracle Dataguard adalah salah satu fitur dari oracle yang memungkinkan konsep DRC dapat terimplementasikan dalam sebuah system. Dalam Oracle Dataguard ada 2 buah database, yaitu database primary dan database standby. Pada dasarnya client akan mengakses ke database primary dan database primary akan mengirimkan archive log file ke database standby. Namun ketika terjadi perpindahan role baik melalui switchover atau failover, client harus disetting agar dapat tetap mengakses database primary yang benar.

Transparent Application Failover atau sering disingkat sebagai TAF merupakan suatu fitur yang memungkinkan client untuk tetap mengakses database yang benar.

Untuk dapat mengaplikasikan TAF pada Oracle Dataguard, lakukan hal berikut:
1. Tambahkan baris berikut pada tnsnames.ora client

orcl =
 (DESCRIPTION =
 (ADDRESS_LIST =
 (ADDRESS = (PROTOCOL = TCP)(HOST = HostA)(PORT = 1521))
 (ADDRESS = (PROTOCOL = TCP)(HOST = HostB)(PORT = 1521))
 )
 (CONNECT_DATA =
 (SERVICE_NAME = orcl)
 )
 )

 

2. Jalankan perintah berikut pada server primary

begin
 dbms_service.create_service('orcl','orcl');
end;
/
begin
 DBMS_SERVICE.START_SERVICE('orcl');
end;
/

 

3. Buat trigger untuk memastikan service dinyalakan jika database memiliki role primary. Trigger dijalankan ketika database sedang dinyalakan

create trigger myapptrigg after startup on database
declare
 v_role varchar(30);
begin
 select database_role into v_role from v$database;
 if v_role = 'PRIMARY' then
 DBMS_SERVICE.START_SERVICE('orcl');
 else
 DBMS_SERVICE.STOP_SERVICE('orcl');
 end if;
end;
/

 

4. Jalankan perintah berikut pada server primary:

begin
 dbms_service.modify_service
 ('orcl',
 FAILOVER_METHOD => 'BASIC',
 FAILOVER_TYPE => 'SELECT',
 FAILOVER_RETRIES => 200,
 FAILOVER_DELAY => 1);
end;
/

 

5. Lakukan uji coba dengan melakukan select pada table dengan jumlah baris 10000. Kemudian pada saat select, kita lakukan failover. Proses select akan tampak terhenti sejenak,kemudian berlanjut pada server kedua sehingga proses failover tidak tampak oleh client 🙂

ORA-16191: tricky password file problem at Oracle 11G

Ketika mencoba melakukan setting Oracle Dataguard pada Oracle 11G, mungkin kita pernah menemukan error seperti ini:

ORA-16191: Primary log shipping client not logged on standby

Error tersebut memberitahkuan kepada kita bahwa Database Primary tidak dapat melakuakn pengiriman log kepada database standby. Jika kita menelusuri error tersebut, kita akan menemukan bahwa error ini berkaitan dengan password file yang tidak sinkron sehingga primary log shipping client tidak dapat melakukan login secara remote.

Tentunya ketika pertama kali menemukan error ini, kita akan mencoba membuat ulang sebuah password file baru dengan command:

orapwd file =<nama_password_file> password=<password_baru>

tetapi setelah mencoba membuat password file baru dengan command di atas pada oracle 11G, tidak menyelesaikan masalah juga.

Hal ini disebabkan karena pada Oracle 11G, ada tambahan parameter baru yaitu SEC_CASE_SENSITIVE_LOGON. Parameter ini menentukan apakah ketika login, huruf besar dan huruf kecil dibedakan. Secara default, nilai parameter ini adalah true. oleh karena itu, langkah yang harus kita lakukan agar error ini terselesaikan adalah:

1. Login ke dalam sqlplus dengan menggunakan role sebagai sysdba

2. SQL> alter system set SEC_CASE_SENSITIVE_LOGON=false;

3. SQL> host;

4. buat kembali password file dengan perintah:

orapwd file =<nama_password_file> password=<password_baru> ignorecase=Y

dengan demikian password file baru akan terbentuk tanpa membedakan huruf besar dan huruf kecil, sehingga error akan terselesaikan.

Experience is the best teacher. Hope this share will help others who face the same problem as what I found 🙂