Wednesday, August 26, 2009

Setup Oracle Stream for Schema replication between DB

Untuk membuat repikasi dengan menggunakan stream
satu schema dengan schema yang lain caranya adalah sebagai berikut , saya ambil contoh
untuk kloning schema HR  dari database PRODDB ke CLONEDB adalah sebagai berikut :
1. siapkan tablespace untuk logminer di PRODDB

CREATE TABLESPACE LOGMNRTS DATAFILE '/oradata/DB/logmnrtbs.dbf'
SIZE 100M AUTOEXTEND ON MAXSIZE UNLIMITED;
 
2. jalankan logminer
BEGIN
DBMS_LOGMNR_D.SET_TABLESPACE('LOGMNRTS');

END;

3. supplement logging
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (primary key,
unique, foreign key) COLUMNS;
ALTER TABLE apps_a.emp ADD SUPPLEMENTAL LOG GROUP
pk_emp (id) ALWAYS;

4. export schema HR dari PRODDB ke CLONEDB
5. create user stream admin di kedua database (PRODDB dan CLONEDB)
    create user STRMADMIN identified by STRMADMIN;
    grant CONNECT, DBA, IMP_FULL_DATABASE,EXP_FULL_DATABASE to "STRMADMIN";
    exec DBMS_STREAMS_AUTH.GRANT_ADMIN_PRIVILEGE('STRMADMIN');
6. login sebagai strmadmin di PRODDB
    buat database ke user strmadmin di CLONEDB
7. configure apply process di CLONEDB
8. configure capture process di PRODDB
9. instantiate







CLONEDB (apply process) login dengan user strmadmin
-----------------------------


BEGIN

DBMS_STREAMS_ADM.SET_UP_QUEUE(
queue_table ='"STREAMS_APPLY_QT"',
queue_name ='"STREAMS_APPLY_Q"',
queue_user ='"STRMADMIN"');
END;
/

BEGIN
DBMS_STREAMS_ADM.ADD_SCHEMA_RULES(
schema_name ='"HR"',
streams_type ='apply',
streams_name ='"STREAMS_APPLY"',
queue_name ='"STRMADMIN"."STREAMS_APPLY_Q"',
include_dml =true,
include_ddl =true,
include_tagged_lcr = false,
inclusion_rule = true);
END;
/

BEGIN
DBMS_APPLY_ADM.ALTER_APPLY
(
apply_name = 'STREAMS_APPLY',
apply_user = 'HR'
);
END;

COMMIT;

Jika kita tidak menginginkan apply proses di abort setiap kali error,
harus ada penanganan agar prosess apply tetap berjalan walaupun ada error,

BEGIN
DBMS_APPLY_ADM.SET_PARAMETER
( apply_name ='STREAMS_APPLY',
  parameter ='DISABLE_ON_ERROR',
  value ='N' );
END;

start apply
BEGIN
DBMS_APPLY_ADM.START_APPLY
(
apply_name ='STREAMS_APPLY'
);
END;

stop apply
BEGIN
DBMS_APPLY_ADM.STOP_APPLY
(
apply_name = 'STREAMS_APPLY'
);
END;

PRODDB (capture process) login dengan user strmadmin
-----------------------------
BEGIN

DBMS_STREAMS_ADM.SET_UP_QUEUE(
queue_table => '"STREAMS_CAPTURE_QT"',
queue_name => '"STREAMS_CAPTURE_Q"',
queue_user => '"STRMADMIN"');
END;

BEGIN
DBMS_STREAMS_ADM.ADD_SCHEMA_RULES(
schema_name => '"HR"',
streams_type => 'capture',
streams_name => '"STREAMS_CAPTURE"',
queue_name => '"STRMADMIN"."STREAMS_CAPTURE_Q"',
include_dml => true,
include_ddl => true,
include_tagged_lcr => false,
inclusion_rule => true);
END;

BEGIN
DBMS_STREAMS_ADM.ADD_SCHEMA_PROPAGATION_RULES(
schema_name => '"HR"',
streams_name => '"STREAMS_PROPAGATION"',
source_queue_name => '"STRMADMIN"."STREAMS_CAPTURE_Q"',
destination_queue_name => '"STRMADMIN"."STREAMS_APPLY_Q"@STRM',
include_dml => true,
include_ddl => true,
inclusion_rule => true );
END;
/
COMMIT;

process instantiate scn untuk schema :
1. di PRODDB login dengan user strmadmin

BEGIN

DBMS_OUTPUT.PUT_LINE ('Instantiation SCN is: ' DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER());
END;

setelah dapat nilai nya

2. di CLONEDB login dengan user strmadmin
exec DBMS_APPLY_ADM.set_schema_instantiation_scn(source_schema_name => 'HR',source_database_name => 'CLONEDB',instantiation_scn => 514740);


3. Kemudian jalankan capture process

BEGIN

DBMS_CAPTURE_ADM.START_CAPTURE(
capture_name => 'STREAMS_CAPTURE');
END;

BEGIN
DBMS_CAPTURE_ADM.STOP_CAPTURE(
capture_name => 'STREAMS_CAPTURE');
END;


kemudian lakukan test .... !!!
untuk monitoring proses yang terjadi di stream dengan menggunakan table-table
berikut :

v$streams_apply_reader
v$streams_apply_coordinator
v$streams_capture
dba_apply
dba_apply_error
dba_capture
dba_propagation
dba_queue_schedules

untuk memanage stream dengan menggunakan package-package di bawah :
1. dbms_apply_adm
2. dbms_capture_adm
3. dbms_streams_adm

No comments:

Post a Comment