Bonjour,

J'essaie de développer un package permettant de gérer des modifications DDL sur un schéma répliqué. J'ai donc un site maître et un site répliqué sous forme de vue matérialisée non updatable en fast refresh. La version est une 10g mais ce pourrait être aussi en 9i.

En suivant les notices oracles, j'ai vu qu'il fallait exécuter les instructions DDL en utilisant les packages de réplication.
Donc pour le site maître, j'ai développé la procédure suivante permettant d'ajouter une colonne à une table existante déjà répliquée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
procedure addcolumn (tablename in varchar2, tablecolumn in varchar2, coltype in varchar2, colcom in varchar2)
is
cnt number;
mgroup varchar2(2000);
proprio varchar2(2000);
begin
   select par_vale into proprio from gentpar where par_code='proprio';
   cnt := 0;
   IF cnt = 0 THEN
    select par_vale into mgroup from gentpar where par_code='masterabo';
    DBMS_REPCAT.ALTER_MASTER_REPOBJECT (
      	 		sname => proprio,
      			oname => tablename,
      			type => 'TABLE',
      			ddl_text => 'ALTER TABLE ' || proprio || '.' || tablename || ' ADD (' || tablecolumn || ' ' || coltype || ')');
	  DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT (
      sname => proprio,
      oname => tablename, 
      type => 'TABLE',
      min_communication => TRUE);
    dbms_output.put_line('  - Création champ ' || tablename || '.' || tablecolumn);
   ELSE
      dbms_output.put_line('  * Champ ' || tablename || '.' || tablecolumn || ' existe déjà !');
   END IF;
end addcolumn;
Le master est quiesced avant l'exécution de cette procédure puis remis en fonction après. L'exécution est faites avec l'administrateur de réplication (qui est aussi le propagateur).
En faisant ainsi je m'attendais à ce que ma modif soit répercutée dans le site secondaire de vues matérialisées mais il n'en est rien, la colonne ne s'ajoute pas dans la vue pourtant inscrite comme répliquant la table du master. Je n'ai vu nul part comment répercuter l'ajout de la colonne de manière automatique dans les sites secondaires de vues matérialisées. La seule solution serait de dropper la vue et de la recréer, ce qui n'est pas très performant sur une table à plusieurs millions de lignes. Quelqu'un connait-il un moyen de répercuter ces modifications correctement ?