1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145
|
/*étape 1 création utilisateur STRMADMIN sur la base source et destination en tant que sysdba */
connect / as sysdba
CREATE TABLESPACE streams_tbs DATAFILE
'/opt/app/oracle/.../.../streams_tbs.dbf'
size 25M AUTOEXTEND ON MAXSIZE 256M;
CREATE USER strmadmin IDENTIFIED BY strmadmin
DEFAULT TABLESPACE streams_tbs
QUOTA UNLIMITED ON streams_tbs;
grant dba to strmadmin;
/*sur dev */
connect
CREATE TABLESPACE streams_tbs DATAFILE
'/u01/.../.../streams_tbs.dbf'
size 25M AUTOEXTEND ON MAXSIZE 256M;
CREATE USER strmadmin IDENTIFIED BY strmadmin
DEFAULT TABLESPACE streams_tbs
QUOTA UNLIMITED ON streams_tbs;
grant dba to strmadmin;
/*étape 2 Création dblink pour STRMADMIN sur la base source et destination en tant que STRMADMIN*/
/*sur prod*/
connect strmadmin/strmadmin
create public database link dbldev
connect to strmadmin
identified by strmadmin
using 'BDDEV';
/*sur dev*/
connect strmadmin/strmadmin
create public database link dblpro
connect to strmadmin
identified by "strmadmin"
using 'BDPRO';
/*étape 3 mise en place de la file d'attente sur la base source et destination en tant que STRMADMIN */
BEGIN
DBMS_STREAMS_ADM.SET_UP_QUEUE(
queue_table => 'strmadmin.streams_queue_table',
queue_name => 'strmadmin.streams_queue');
END;
/
/*étape 4 Construction du schéma sur la base source et destination en tant que sysdba */
/*prod et dev*/
connect / as sysdba
create user demo
identified by demo
default tablespace users
temporary tablespace temp;
grant connect,resource to demo;
connect demo/demo
create table t1(
id number primary key,
text varchar2(80));
/*étape 5 Process capture sur la base source(prod) en tant que STRMADMIN */
connect strmadmin/strmadmin
begin
dbms_streams_adm.add_table_rules(
table_name => 'demo.t1',
streams_type => 'sync_capture',
streams_name => 'sync_capture',
queue_name => 'strmadmin.streams_queue',
include_dml => true,
include_ddl => false,
inclusion_rule => true);
end;
/
/*étape 6 Process de propagation sur la base source(prod) en tant que STRMADMIN */
connect strmadmin/strmadmin
begin
dbms_streams_adm.add_table_propagation_rules(
table_name => 'demo.t1',
streams_name => 'PROD_TO_DEV',
source_queue_name => 'strmadmin.streams_queue',
destination_queue_name => 'strmadmin.streams_queue@dbldev',
include_dml => true,
include_ddl => false,
source_database => 'PROD',
inclusion_rule => true);
end;
/
/*étape 7 Instanciation de la table en tant que STRMADMIN*/
/*prod*/
col apply_scn format 999999999999999 new_value apply_scn
select dbms_flashback.get_system_change_number apply_scn
from dual;
/*dev*/
begin
dbms_apply_adm.set_table_instantiation_scn(
source_object_name => 'demo.t1@dblpro',
source_database_name => 'PROD',
instantiation_scn => apply_scn );
end;
/
/*étape 8 Configuration du process d'apply sur la base de destination(dev) en tant que STRMADMIN*/
connect strmadmin/strmadmin
begin
dbms_streams_adm.add_table_rules(
table_name => 'demo.t1',
streams_type => 'apply',
streams_name => 'streams_apply',
queue_name => 'strmadmin.streams_queue',
include_dml => true,
include_ddl => false,
include_tagged_lcr => false,
source_database => 'PROD',
inclusion_rule => true);
end;
/
/*étape 9 start de l'apply sur dev*/
exec dbms_apply_adm.start_apply('streams_apply');
/*étape 10 test de la synchro*/
/*sur prod*/
insert into demo.t1(id,text) values(1,'essai synchro');
commit;
/*vérification*/
select * from demo.t1@dbldev; |
Partager