Outils pour utilisateurs

Outils du site


flux_streams

Ceci est une ancienne révision du document !


Introduction

L'objectif ici est de mettre en place une réplication streams bi-directionnelle entre deux bases Oracle 11gR2 nommées YODA et LUKE.

La réplication s'effectue sur un schéma nommé ALICE. Lors de la phase d'initialisation les données de ALICE présentent sur YODA seront importés dans LUKE.

Une fois la mise en place terminée, les modifications du schéma ALICE pourront se faire sur n'importe quelle base.

Création du user Streams

Création des tablespaces dédiés sur YODA

CREATE TABLESPACE "STRM_DATA" DATAFILE 
'/u03/app/oracle/oradata/YODA/strm_data_01.dbf' SIZE 100M;
CREATE TEMPORARY TABLESPACE "STRM_TEMP" TEMPFILE 
'/u02/app/oracle/oradata/YODA/strm_temp_01.dbf' SIZE 50M;

Création des tablespaces dédiés sur LUKE

CREATE TABLESPACE "STRM_DATA" DATAFILE 
'/u03/app/oracle/oradata/LUKE/strm_data_01.dbf' SIZE 100M;
CREATE TEMPORARY TABLESPACE "STRM_TEMP" TEMPFILE 
'/u02/app/oracle/oradata/LUKE/strm_temp_01.dbf' SIZE 50M;

Création du user à faire sur les deux bases YODA et LUKE.

create user strmadmin identified by strmadmin default tablespace strm_data temporary tablespace strm_temp;

Affectation des droits à faire sur les deux bases YODA et LUKE.

alter user strmadmin quota unlimited on strm_data;
grant dba to strmadmin;
execute dbms_streams_auth.grant_admin_privilege('STRMADMIN',TRUE);

Objet Directory

La première synchro entre YODA et LUKE se fera via DataPump. Mettre en place sur chaque base un objet directory.

Sur YODA

mkdir -p /u02/app/oracle/dpump/YODA
sqlplus strmadmin/strmadmin@yoda
SQL> create directory dpump as '/u02/app/oracle/dpump/YODA';

Sur LUKE

mkdir -p /u02/app/oracle/dpump/LUKE
sqlplus strmadmin/strmadmin@luke
SQL> create directory dpump as '/u02/app/oracle/dpump/LUKE';

Paramètres Oracle

Il faut sur chaque bases activer le paramètre Oracle global_names à true.

alter system set global_names=true scope=both;

Création des files d'attente

Sur les deux bases en strmadmin

begin
dbms_streams_adm.set_up_queue(
queue_table => 'file_envoi',
queue_name=> 'file_envoi');
end;
/

begin
dbms_streams_adm.set_up_queue(
queue_table => 'file_reception',
queue_name=> 'file_reception');
end;
/

Création des databases link

Très important, en raison du positionement de global_names à true, les dblinks doivent avoir le même nom que la chaine Oracle*Net ( tnsnames.ora ).

Depuis YODA → LUKE

CREATE DATABASE LINK LUKE 
CONNECT TO STRMADMIN IDENTIFIED BY strmadmin 
USING 'LUKE';

Depuis LUKE → YODA

CREATE DATABASE LINK YODA 
CONNECT TO STRMADMIN IDENTIFIED BY strmadmin 
USING 'YODA';

Préparation des instanciations

Sur les deux bases.

begin
dbms_capture_adm.prepare_schema_instantiation(
schema_name=>'ALICE',
supplemental_logging => 'keys');
end;
/

Création des captures

Sur YODA

begin
dbms_streams_adm.add_schema_rules(
schema_name=> 'ALICE',
streams_type=>'capture',
streams_name=>'CAPTURE_YODA',
queue_name=>'file_envoi',
include_dml=>true,
include_ddl=>true,
include_tagged_lcr=>false,
source_database=>'YODA');
end;
/

Sur LUKE

begin
dbms_streams_adm.add_schema_rules(
schema_name=> 'ALICE',
streams_type=>'capture',
streams_name=>'CAPTURE_LUKE',
queue_name=>'file_envoi',
include_dml=>true,
include_ddl=>true,
include_tagged_lcr=>false,
source_database=>'LUKE');
end;
/

Création des propagations

Propagation de YODA → LUKE

begin
dbms_streams_adm.add_schema_propagation_rules(
schema_name =>'ALICE',
streams_name=>'PROPA_TO_LUKE',
source_queue_name=>'file_envoi',
destination_queue_name=>'file_reception@luke',
include_dml=>true,
include_ddl=>true,
include_tagged_lcr=>false,
inclusion_rule=>true,
source_database=>'YODA',
queue_to_queue=>false
);
end;
/

Propagation de LUKE → YODA

begin
dbms_streams_adm.add_schema_propagation_rules(
schema_name =>'ALICE',
streams_name=>'PROPA_TO_YODA',
source_queue_name=>'file_envoi',
destination_queue_name=>'file_reception@yoda',
include_dml=>true,
include_ddl=>true,
include_tagged_lcr=>false,
inclusion_rule=>true,
source_database=>'LUKE',
queue_to_queue=>false
);
end;
/

Création des applications

Sur YODA : application des données de LUKE

begin
dbms_streams_adm.add_schema_rules(
schema_name=>'ALICE',
streams_type=>'apply',
streams_name=>'APPLICATION_FOR_LUKE',
queue_name=>'file_reception',
include_dml=>true,
include_ddl=>true,
include_tagged_lcr=>false,
source_database=>'LUKE'
);
end;
/

Sur LUKE : application des données de YODA

begin
dbms_streams_adm.add_schema_rules(
schema_name=>'ALICE',
streams_type=>'apply',
streams_name=>'APPLICATION_FOR_YODA',
queue_name=>'file_reception',
include_dml=>true,
include_ddl=>true,
include_tagged_lcr=>false,
source_database=>'YODA'
);
end;
/

Instanciation des bases

Instanciation de YODA

set serveroutput on size 1000000
declare
  current_scn number;
begin
  current_scn:=dbms_flashback.get_system_change_number();
  dbms_output.put_line( 'SCN Courant : ' || current_scn );
  begin
    dbms_apply_adm.set_schema_instantiation_scn@luke(
    source_schema_name=>'ALICE',
    source_database_name=>'YODA',
    instantiation_scn=>current_scn,
    recursive=>true
    );
  end;
end;
/

Instanciation de LUKE

set serveroutput on size 1000000
declare
  current_scn number;
begin
  current_scn:=dbms_flashback.get_system_change_number();
  dbms_output.put_line( 'SCN Courant : ' || current_scn );
  begin
    dbms_apply_adm.set_schema_instantiation_scn@yoda(
    source_schema_name=>'ALICE',
    source_database_name=>'LUKE',
    instantiation_scn=>current_scn,
    recursive=>true
    );
  end;
end;
/

Import des données

Il s'agit ici d'utiliser datapump via un database link afin d'importer depuis YODA dans LUKE les informations du schéma ALICE.

Dans un premier temps il faut relever sur YODA le SCN courant.

select dbms_flashback.get_system_current_number() from dual;
-> 855547

Ce numéro SCN servira de marqueur lors de l'import DataPump via la clause flashback_scn. Créer un fichier de paramètres, alice.dpimp, pour l'import. Il est supposé créé sur chaque base la directory dpump.

directory=dpump
network_link=yoda
logfile=alice.dpimp.log
table_exists_action=truncate
schemas=alice
flashback_scn=855547

Lancer ensuite l'import DataPump sur LUKE.

impdp strmadmin/strmadmin@luke parfile=alice.dpimp

Lancement des captures

Sur YODA

begin
  dbms_capture_adm.start_capture('CAPTURE_YODA');
end;
/

Sur LUKE

begin
  dbms_capture_adm.start_capture('CAPTURE_LUKE');
end;
/

Lancement des propagations

Sur LUKE

begin
  dbms_propagation_adm.start_propagation(propagation_name=>'PROPA_TO_YODA');
end;
/

Sur YODA

begin
  dbms_propagation_adm.start_propagation(propagation_name=>'PROPA_TO_YODA');
end;
/

Lancement des applications

Sur YODA

begin
  dbms_apply_adm.start_apply('APPLICATION_FOR_LUKE');
end;
/

Sur LUKE

begin
  dbms_apply_adm.start_apply('APPLICATION_FOR_YODA');
end;
/
flux_streams.1457033861.txt.gz · Dernière modification: 2016/03/03 20:37 par admin