OVH Cloud OVH Cloud

Réplication avec filtre de jointure

4 réponses
Avatar
carjo12
Bonjour,

Je travaille sous MSDE MS SQL Server, je ne possède pas l'outil "Enterprise
Manager" pour la réplication.
Je procède donc avec des procédures stockées systèmes pour implémenter la
réplication de fusion.

Contexte simplifié: des tests (données) sont effectués dans certaines
régions (table-liste).

1) Création de 2 bases de données:

dbCENTRALE qui centralise les données,
db1 qui recueille des données et se connecte occasionnellement pour
répliquer celles-ci à dbCENTRALE.
Par la suite, db1 n'a besoin que d'un certain nombre limité de données pour
recueillir de nouvelles données, etc., d'où l'intérêt du filtre.

2) Création de trois publications, dont deux ayant le même article (table
'tests'): l'une contenant l'article 'tests' intégral et l'autre l'article
'tests' filtré.

1- Première fusion à effectuer:
Publication 1: Table 'regions' de dbCENTRALE répliquée vers table
'regions' de db1
2- Seconde fusion à effectuer:
Publication 2: Table 'tests' de db1 répliquée vers table 'tests' de
dbCENTRALE
2- Troisième fusion à effectuer:
Publication 3 filtrée: Table 'tests' jointe à 'regions' (jointure) de
dbCENTRALE répliquée vers table 'tests' de db1

Problème: la troisième fusion ne fonctionne pas

Message d'erreur:

Category:NULL
Source: Merge Replication Provider
Number: -2147200976
Message: [b]The process could not drop one or more tables because the tables
are being used by other publications[/b].

Merci à l'avance pour toute aide.

4 réponses

Avatar
bruno reiter [MVP]
il semble que ce soit un problème à l'initialisation, tu demandes sans doute
supprimer et recréer la table, ce qu'il ne peut faire, car une autre
publication s'en sert, il faut changer le type d'initialisation et dire :
garder la table telle que

br

"carjo12" wrote in message
news:
Bonjour,

Je travaille sous MSDE MS SQL Server, je ne possède pas l'outil


"Enterprise
Manager" pour la réplication.
Je procède donc avec des procédures stockées systèmes pour implémenter la
réplication de fusion.

Contexte simplifié: des tests (données) sont effectués dans certaines
régions (table-liste).

1) Création de 2 bases de données:

dbCENTRALE qui centralise les données,
db1 qui recueille des données et se connecte occasionnellement pour
répliquer celles-ci à dbCENTRALE.
Par la suite, db1 n'a besoin que d'un certain nombre limité de données


pour
recueillir de nouvelles données, etc., d'où l'intérêt du filtre.

2) Création de trois publications, dont deux ayant le même article (table
'tests'): l'une contenant l'article 'tests' intégral et l'autre l'article
'tests' filtré.

1- Première fusion à effectuer:
Publication 1: Table 'regions' de dbCENTRALE répliquée vers table
'regions' de db1
2- Seconde fusion à effectuer:
Publication 2: Table 'tests' de db1 répliquée vers table 'tests' de
dbCENTRALE
2- Troisième fusion à effectuer:
Publication 3 filtrée: Table 'tests' jointe à 'regions' (jointure) de
dbCENTRALE répliquée vers table 'tests' de db1

Problème: la troisième fusion ne fonctionne pas

Message d'erreur:

Category:NULL
Source: Merge Replication Provider
Number: -2147200976
Message: [b]The process could not drop one or more tables because the


tables
are being used by other publications[/b].

Merci à l'avance pour toute aide.


Avatar
carjo12
Si je comprends bien votre message, il doit n'y avoir aucune action sur la
table en question.
J'ai donc refait les tests avec 'pre_creation_cmd'= N'NONE'
dans la procédure addmergearticle pour les deux articles concernés (i.e.
l'un sans filtre et l'autre avec filtre).

Auparavant, j'avais la valeur N'delete' pour 'addmergearticle' de l'article
filtré, ce qui devrait théoriquement fonctionner, puisqu'il y a une valeur
non nulle
pour l'argument 'subset_filterclause'.

Malheureusement, j'obtiens toujours le même message d'erreur.

"bruno reiter [MVP]" wrote:

il semble que ce soit un problème à l'initialisation, tu demandes sans doute
supprimer et recréer la table, ce qu'il ne peut faire, car une autre
publication s'en sert, il faut changer le type d'initialisation et dire :
garder la table telle que

br

"carjo12" wrote in message
news:
> Bonjour,
>
> Je travaille sous MSDE MS SQL Server, je ne possède pas l'outil
"Enterprise
> Manager" pour la réplication.
> Je procède donc avec des procédures stockées systèmes pour implémenter la
> réplication de fusion.
>
> Contexte simplifié: des tests (données) sont effectués dans certaines
> régions (table-liste).
>
> 1) Création de 2 bases de données:
>
> dbCENTRALE qui centralise les données,
> db1 qui recueille des données et se connecte occasionnellement pour
> répliquer celles-ci à dbCENTRALE.
> Par la suite, db1 n'a besoin que d'un certain nombre limité de données
pour
> recueillir de nouvelles données, etc., d'où l'intérêt du filtre.
>
> 2) Création de trois publications, dont deux ayant le même article (table
> 'tests'): l'une contenant l'article 'tests' intégral et l'autre l'article
> 'tests' filtré.
>
> 1- Première fusion à effectuer:
> Publication 1: Table 'regions' de dbCENTRALE répliquée vers table
> 'regions' de db1
> 2- Seconde fusion à effectuer:
> Publication 2: Table 'tests' de db1 répliquée vers table 'tests' de
> dbCENTRALE
> 2- Troisième fusion à effectuer:
> Publication 3 filtrée: Table 'tests' jointe à 'regions' (jointure) de
> dbCENTRALE répliquée vers table 'tests' de db1
>
> Problème: la troisième fusion ne fonctionne pas
>
> Message d'erreur:
>
> Category:NULL
> Source: Merge Replication Provider
> Number: -2147200976
> Message: [b]The process could not drop one or more tables because the
tables
> are being used by other publications[/b].
>
> Merci à l'avance pour toute aide.





Avatar
bruno reiter [MVP]
il y a deux procédures où mettre NONE, la création de la publication et de
l'abonnement

regardes avec le profiler ce qui se passe à a première synchro

br

"carjo12" wrote in message
news:
Si je comprends bien votre message, il doit n'y avoir aucune action sur la
table en question.
J'ai donc refait les tests avec 'pre_creation_cmd'= N'NONE'
dans la procédure addmergearticle pour les deux articles concernés (i.e.
l'un sans filtre et l'autre avec filtre).

Auparavant, j'avais la valeur N'delete' pour 'addmergearticle' de


l'article
filtré, ce qui devrait théoriquement fonctionner, puisqu'il y a une valeur
non nulle
pour l'argument 'subset_filterclause'.

Malheureusement, j'obtiens toujours le même message d'erreur.

"bruno reiter [MVP]" wrote:

> il semble que ce soit un problème à l'initialisation, tu demandes sans


doute
> supprimer et recréer la table, ce qu'il ne peut faire, car une autre
> publication s'en sert, il faut changer le type d'initialisation et dire


:
> garder la table telle que
>
> br
>
> "carjo12" wrote in message
> news:
> > Bonjour,
> >
> > Je travaille sous MSDE MS SQL Server, je ne possède pas l'outil
> "Enterprise
> > Manager" pour la réplication.
> > Je procède donc avec des procédures stockées systèmes pour implémenter


la
> > réplication de fusion.
> >
> > Contexte simplifié: des tests (données) sont effectués dans certaines
> > régions (table-liste).
> >
> > 1) Création de 2 bases de données:
> >
> > dbCENTRALE qui centralise les données,
> > db1 qui recueille des données et se connecte occasionnellement pour
> > répliquer celles-ci à dbCENTRALE.
> > Par la suite, db1 n'a besoin que d'un certain nombre limité de données
> pour
> > recueillir de nouvelles données, etc., d'où l'intérêt du filtre.
> >
> > 2) Création de trois publications, dont deux ayant le même article


(table
> > 'tests'): l'une contenant l'article 'tests' intégral et l'autre


l'article
> > 'tests' filtré.
> >
> > 1- Première fusion à effectuer:
> > Publication 1: Table 'regions' de dbCENTRALE répliquée vers table
> > 'regions' de db1
> > 2- Seconde fusion à effectuer:
> > Publication 2: Table 'tests' de db1 répliquée vers table 'tests' de
> > dbCENTRALE
> > 2- Troisième fusion à effectuer:
> > Publication 3 filtrée: Table 'tests' jointe à 'regions' (jointure) de
> > dbCENTRALE répliquée vers table 'tests' de db1
> >
> > Problème: la troisième fusion ne fonctionne pas
> >
> > Message d'erreur:
> >
> > Category:NULL
> > Source: Merge Replication Provider
> > Number: -2147200976
> > Message: [b]The process could not drop one or more tables because the
> tables
> > are being used by other publications[/b].
> >
> > Merci à l'avance pour toute aide.
>
>
>


Avatar
carjo12
Merci pour l'information.

J'ai refait le test, mais sans introduire l'article filtré pour m'assurer
que les données de la table abonnée (dbCENTRALE) ne sont pas effacées.
J'ai donc seulement implémenté les deux premières publications, soient:

Publication 1: Table 'regions' de dbCENTRALE répliquée vers table
'regions' de db1

Publication 2: Table 'tests' de db1 répliquée vers table 'tests' de
dbCENTRALE.

J'ai modifié les paramètres des procédures suivants:

db1..sp_addmergearticle....
@pre_creation_cmd=N'none'

dbCENTRALE..sp_addmergepullsubscription....
@sync_type = N'none'

db1..sp_addmergesubscription....
@sync_type = N'none'. (C'est un abonnement global)

Publication 2: dès que je remplace les données de la table source et que je
synchronise, la table destination ne conserve jamais les anciennes données,
mais seulement les dernières données de la table source.
Y a t-il un moyen de 'cumuler' les données dans la table de dbCENTRALE, quoi
que l'on fasse dans la table source?

Merci pour l'aide.

"bruno reiter [MVP]" wrote:

il y a deux procédures où mettre NONE, la création de la publication et de
l'abonnement

regardes avec le profiler ce qui se passe à a première synchro

br

"carjo12" wrote in message
news:
> Si je comprends bien votre message, il doit n'y avoir aucune action sur la
> table en question.
> J'ai donc refait les tests avec 'pre_creation_cmd'= N'NONE'
> dans la procédure addmergearticle pour les deux articles concernés (i.e.
> l'un sans filtre et l'autre avec filtre).
>
> Auparavant, j'avais la valeur N'delete' pour 'addmergearticle' de
l'article
> filtré, ce qui devrait théoriquement fonctionner, puisqu'il y a une valeur
> non nulle
> pour l'argument 'subset_filterclause'.
>
> Malheureusement, j'obtiens toujours le même message d'erreur.
>
> "bruno reiter [MVP]" wrote:
>
> > il semble que ce soit un problème à l'initialisation, tu demandes sans
doute
> > supprimer et recréer la table, ce qu'il ne peut faire, car une autre
> > publication s'en sert, il faut changer le type d'initialisation et dire
:
> > garder la table telle que
> >
> > br
> >
> > "carjo12" wrote in message
> > news:
> > > Bonjour,
> > >
> > > Je travaille sous MSDE MS SQL Server, je ne possède pas l'outil
> > "Enterprise
> > > Manager" pour la réplication.
> > > Je procède donc avec des procédures stockées systèmes pour implémenter
la
> > > réplication de fusion.
> > >
> > > Contexte simplifié: des tests (données) sont effectués dans certaines
> > > régions (table-liste).
> > >
> > > 1) Création de 2 bases de données:
> > >
> > > dbCENTRALE qui centralise les données,
> > > db1 qui recueille des données et se connecte occasionnellement pour
> > > répliquer celles-ci à dbCENTRALE.
> > > Par la suite, db1 n'a besoin que d'un certain nombre limité de données
> > pour
> > > recueillir de nouvelles données, etc., d'où l'intérêt du filtre.
> > >
> > > 2) Création de trois publications, dont deux ayant le même article
(table
> > > 'tests'): l'une contenant l'article 'tests' intégral et l'autre
l'article
> > > 'tests' filtré.
> > >
> > > 1- Première fusion à effectuer:
> > > Publication 1: Table 'regions' de dbCENTRALE répliquée vers table
> > > 'regions' de db1
> > > 2- Seconde fusion à effectuer:
> > > Publication 2: Table 'tests' de db1 répliquée vers table 'tests' de
> > > dbCENTRALE
> > > 2- Troisième fusion à effectuer:
> > > Publication 3 filtrée: Table 'tests' jointe à 'regions' (jointure) de
> > > dbCENTRALE répliquée vers table 'tests' de db1
> > >
> > > Problème: la troisième fusion ne fonctionne pas
> > >
> > > Message d'erreur:
> > >
> > > Category:NULL
> > > Source: Merge Replication Provider
> > > Number: -2147200976
> > > Message: [b]The process could not drop one or more tables because the
> > tables
> > > are being used by other publications[/b].
> > >
> > > Merci à l'avance pour toute aide.
> >
> >
> >